我有一个简单的网络定义如下:
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是a sparseTensor
,其余的是稠密的
W1=[1000,200]
、W2=[200,400]
和W3=[400, 500]
的尺寸(形状)
当我运行以下命令时:
sess.run([train], feed_dict={x:X, y_:Y})
其中X
是[N, 1000]
形的sparseTensor
,而Y
是[N, 500]
形的张量
我得到一个错误,说:
OOM when allocating tensor with shape[3684773,200].
这是在计算W
的梯度时发生的。3684773恰好也是X
中非零元素的数量
注:
tf.gradients
计算渐变时,它们完全有效
好的李>X
和稠密的multiply( tf.matmul )
运行相同的网络时,它工作得非常好李>
也许我来帮助你有点晚了,但你面临的问题是你没有足够的内存来分配梯度的张量。假设您使用的是32位浮点,那么这个张量将需要~2.8GB的内存,这对于图形卡来说是相当多的。我看到的唯一解决方案是使用
但是你应该期待一个巨大的性能损失
相关问题 更多 >
编程相关推荐