在TensorFlow中,假设我有一个图像,我想多次应用相同的卷积内核。例如,我想做类似以下的事情:
for i in range(5):
output = tf.nn.relu(tf.nn.bias_add(tf.nn.conv2d(output, weights, [1,1,1,1]), bias))
但如果我有很多循环,这会很快耗尽内存。我认为这是因为系统正在分配足够的内存来同时保存整个序列。
这样做的替代方法是什么?
谢谢!
答案 0 :(得分:1)
张量流的工作方式如下:
创建任何操作时,即使未使用此操作,也不会销毁该操作。因此,通过每次迭代,您将创建3个操作。因此,经过5次迭代后,您最终将完成15次操作。所以实际上,这不是如何将相同的卷积内核应用于输入。所以你应该先创建整个图形。那就是:
x = tf.placeholder(tf.float32, shape=[...], name='input_frames')
weights: tf.Variable(tf.truncated_normal([5, 5, 3, 128], stddev=1e-1, dtype=tf.float32, name='weights1'))
output = tf.nn.relu(tf.nn.bias_add(tf.nn.conv2d(output, weights, [1,1,1,1]), bias))
for i in range(5):
sess.run(output, feed_dict={x: "your_image"})
希望这会有所帮助。