2017-05-26 8 views
0

モデルのフォワードパスに必要なフロップ数を取得するためにtfprofを使用しています。 私のモデルは3層のLSTMであり、その後は完全に接続されたレイヤーです。 完全に接続されたレイヤーでは線形に計算数が増えますが、LSTMレイヤーでは変化しません。それはどのように可能なのでしょうか?Tensorflow tfprof LSTMCell

tfprof 1タイムスタンプフォワードパスのレポート。

==================Model Analysis Report====================== 
_TFProfRoot (0/2.71m flops) 
    rnn/while/multi_rnn_cell/cell_1/lstm_cell/lstm_cell_1/MatMul (1.05m/1.05m flops) 
    rnn/while/multi_rnn_cell/cell_2/lstm_cell/lstm_cell_1/MatMul (1.05m/1.05m flops) 
    rnn/while/multi_rnn_cell/cell_0/lstm_cell/lstm_cell_1/MatMul (606.21k/606.21k flops) 
    fc_layer/MatMul (1.54k/1.54k flops) 
    rnn/while/multi_rnn_cell/cell_0/lstm_cell/lstm_cell_1/BiasAdd (1.02k/1.02k flops) 
    rnn/while/multi_rnn_cell/cell_1/lstm_cell/lstm_cell_1/BiasAdd (1.02k/1.02k flops) 
    rnn/while/multi_rnn_cell/cell_2/lstm_cell/lstm_cell_1/BiasAdd (1.02k/1.02k flops) 
    fc_layer/BiasAdd (3/3 flops) 

tfprof 2タイムスタンプのフォワードパスのレポート。

==================Model Analysis Report====================== 
_TFProfRoot (0/2.71m flops) 
    rnn/while/multi_rnn_cell/cell_1/lstm_cell/lstm_cell_1/MatMul (1.05m/1.05m flops) 
    rnn/while/multi_rnn_cell/cell_2/lstm_cell/lstm_cell_1/MatMul (1.05m/1.05m flops) 
    rnn/while/multi_rnn_cell/cell_0/lstm_cell/lstm_cell_1/MatMul (606.21k/606.21k flops) 
    fc_layer/MatMul (3.07k/3.07k flops) 
    rnn/while/multi_rnn_cell/cell_0/lstm_cell/lstm_cell_1/BiasAdd (1.02k/1.02k flops) 
    rnn/while/multi_rnn_cell/cell_1/lstm_cell/lstm_cell_1/BiasAdd (1.02k/1.02k flops) 
    rnn/while/multi_rnn_cell/cell_2/lstm_cell/lstm_cell_1/BiasAdd (1.02k/1.02k flops) 
    fc_layer/BiasAdd (6/6 flops) 

答えて

1

tfprofはグラフの静的解析を行い、各グラフノードの浮動小数点演算を計算します。

あなたはdynamic_rnnまたはtf.while_loopを持つ類似のものを使用していると仮定します。その場合、グラフノードは一度 のグラフに表示されますが、実際には実行時に複数回実行されます。

この場合、tfprofには、あなたの単語のタイムスタンプが何回実行されるかを静的に把握する方法がありません( )。したがって、浮動小数点演算は一度だけ とカウントされます。

今のところ回避策はおそらく自分でタイムステップを増やすことです。

+0

明白な説明のためにありがとう。私は実際にdynamic_rnnを使用しています。 –

関連する問題