【问题标题】:Partial update on Tensor in TensorFlowTensorFlow 中张量的部分更新
【发布时间】:2023-03-11 13:33:01
【问题描述】:

我正在尝试在 TensorFlow 中对图像运行多个卷积,然后连接结果。因为tf.concat 分配了新的张量,我有时会遇到ResourceExhaustedError(当前的解决方案是将batch_size 更改为更小的值)。

所以这是我的问题。有没有办法创建大张量(我事先知道所有维度),然后将卷积结果分配给它(部分地避免连接和内存分配)?或者也许还有其他更有效的方法?

类似:

convs = tf.Variable(tf.zeros([..])
tf.update(convs, [..], tf.nn.conv2d(..) + biases1)
tf.update(convs, [..], tf.nn.conv2d(..) + biases2)
^^^^^^^^^         ^^offsets

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    没有办法做到这一点 - TensorFlow 对象在设计上是不可变的。

    可能还有另一种方法可以完成您想要的事情(如果了解内存不足以供将来改进的情况会很有趣)。

    【讨论】:

    • 在 udacity 的深度学习课程之后,我正在使用 TensorFlow。错误弹出的原因很明显。我在GPU 上只有2GB,所以当我尝试在具有10k 个示例的验证集上运行具有更多卷积的计算(我尝试了3 个)时,它首先分配10k*28*28*8 (*3) 浮点数,当我连接这些结果时它分配另一个10k*28*28*8*3浮动,最后我需要重塑这个张量,以便它再次分配相同数量的内存,最终出现错误。对于相同的数据,它有点浪费内存。对于较小的批次,这不是问题,一切都很好。
    • 对于 10k 个示例,小批量绝对是可行的方法,尤其是仅用于验证运行时。
    猜你喜欢
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    相关资源
    最近更新 更多