0
backpropagating我有一個簡單的網絡定義如下:問題,同時通過在sparse_tensor_dense_multiply tensorflow
h1 = tf.sparse_tensor_dense_matmul(x, W1)
h2 = tf.matmul(h1, W2)
y = tf.matmul(h2, W3)
loss = tf.nn.l2_loss(y - y_)
train = tf.train.AdamOptimizer(learning_rate=lr).minimize(loss)
其中x是一個sparseTensor
,其餘的是緻密的。
W1 = [1000,200]
,W2 = [200,400]
和W3 = [400, 500]
的尺寸(形狀)。
當我運行以下命令:
sess.run([train], feed_dict={x:X, y_:Y})
其中X
是形狀[N, 1000]
和Y
的sparseTensor
是形狀的張量[N, 500]
我得到一個錯誤說:
OOM時分配具有形狀的張量[3684773,200]。
這正在計算W
的梯度時發生。 3684773也恰好是X
中非零元素的個數。
注:
- 當我計算使用
tf.gradients
梯度,它們完全 做工精細。 - 當我使用密集的
X
和密集的multiply(tf.matmul)
運行相同的網絡時,它工作得很好。