質問にTensorFlowが関係する場合でも、私は質問を記述するために通常の数学の用語を使用します。テンソル変換中にメモリをどのように管理しますか?
のは
- 私は次元の行列
W
を持っているとしましょうn x k
- 入力ベクトルの大き
1 x k
のx
私はW
に各要素にx
を比較する必要が
n = self.nNodes
、k=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_dims
とtile
ので、(特にGPU上で)メモリを管理する上でいくつかの困難を持っている、ということ操作は新しいテンソルを返します。
はどのX_MM
のためのテンソルを割り当てる方法(私はW
のためにそうであるように)とコピーはX_MM
の各要素への入力値x
あります。このようにしてX_MM
のメモリは1回だけ割り当てられます。
ベクターを1行ずつ別のものにコピーするための「アトミック」命令はありますか?(新しいメモリを割り当てずに並べ替えたもの)?これを取得するためにTensorFlowイテレータを使用する必要がありますか?
さらに一般的に、私はTensorFlowのメモリ管理について心配すべきですか?それは私にとっては重要な話題ですが、ドキュメンテーションに関するすべての関連情報や新しいメモリを割り当てる演算子を使用するすべての例は見つかりません。