在tensorflow中通过稀疏的_tensor _稠密的_matmul反向传播时的问题

2024-09-29 06:23:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的网络定义如下:

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中非零元素的数量

注:

  1. 当我使用tf.gradients计算渐变时,它们完全有效 好的
  2. 当我使用稠密的X和稠密的multiply( tf.matmul )运行相同的网络时,它工作得非常好

Tags: 网络定义tftrainh2h1w1dense
1条回答
网友
1楼 · 发布于 2024-09-29 06:23:56

也许我来帮助你有点晚了,但你面临的问题是你没有足够的内存来分配梯度的张量。假设您使用的是32位浮点,那么这个张量将需要~2.8GB的内存,这对于图形卡来说是相当多的。我看到的唯一解决方案是使用

with tf.device("/cpu:0"):
    # your code

但是你应该期待一个巨大的性能损失

相关问题 更多 >