2017-05-08 10 views
0

質問にTensorFlowが関係する場合でも、私は質問を記述するために通常の数学の用語を使用します。テンソル変換中にメモリをどのように管理しますか?

のは

  • 私は次元の行列Wを持っているとしましょうn x k
  • 入力ベクトルの大き1 x kx私はW

に各要素にxを比較する必要が

  • いくつかのコード例を読んだ後、私が今やっているやり方は、 WS(n = self.nNodesk=self.inputShape):

    inputShape = (10,) 
    
    W = tf.Variable(tf.random_uniform((nNodes,) + inputShape, 0.0, 1.0, dtype=tf.float32), dtype=tf.float32, name='W') 
    
    x = tf.placeholder(self.__datatype, inputShape, name='input') 
    
    x_M = tf.expand_dims(x, 0, name='x_m') 
    
    x_MM = tf.tile(x_M, (nNodes, 1), name='x_mm') 
    
    spatDiffs = tf.subtract(x_MM, self.W) 
    

    のようだ - しかし、私はわからない - しばらくした後、TensorFlowはexpand_dimstileので、(特にGPU上で)メモリを管理する上でいくつかの困難を持っている、ということ操作は新しいテンソルを返します。

    はどのX_MMのためのテンソルを割り当てる方法(私はWのためにそうであるように)とコピーX_MMの各要素への入力値xあります。このようにしてX_MMのメモリは1回だけ割り当てられます。

    ベクターを1行ずつ別のものにコピーするための「アトミック」命令はありますか?(新しいメモリを割り当てずに並べ替えたもの)?これを取得するためにTensorFlowイテレータを使用する必要がありますか?

    さらに一般的に、私はTensorFlowのメモリ管理について心配すべきですか?それは私にとっては重要な話題ですが、ドキュメンテーションに関するすべての関連情報や新しいメモリを割り当てる演算子を使用するすべての例は見つかりません。

  • 答えて

    0

    Tensorflowは自動的にメモリを管理します。自然な方法で計算を書いて、Tensorflowにバッファを管理させるだけです。

    たとえば、Tensorflowは何もする必要なく、自動的に出力の一部の入力バッファを再利用します。私はあなたのコード内の特定の演算子のためにそれが起こるかどうかは分かりません。

    特定のTensorflowプログラムがメモリ不足の状態で問題が発生した場合は、詳細な実行可能な自己完結型の複製を提供してください。それ以上の情報がなければ、何がうまくいかないと言うことは不可能です。

    希望に役立ちます!