我尝试使用调整尺寸来获取一种将图像放大到特定区域的方法,作为细粒度图像识别的注意机制。
不过,我是在TPU上这样做的,当我试图训练时,我收到一个错误,说操作不可用。
所以我试着想出一种方法来获取一批图像,以及一批相应的边框坐标,并将作物大小调整到原始图像的大小。
我不知道如何对全张量进行操作,所以我尝试了一个循环:
result = tf.Variable([tf.image.resize(images[0][tx[0]:tx[0]+tl[0], ty[0]:ty[0]+tl[0], :], [1200, 1200])])
for i in range(1, tf.shape(images)[0]):
result = tf.concat([result, [tf.image.resize(images[i][tx[i]:tx[i]+tl[i], ty[i]:ty[i]+tl[i], :], [1200, 1200])]], axis=0)所以我要说的是:
如果我将它作为独立的脚本运行,但在尝试使用模型进行训练或预测时,它就不起作用了:
ValueError: "result" has shape (1, 1200, 1200, 3) before the loop, but shape (2, 1200, 1200, 3) after one iteration. TensorFlow control flow requires it stays the same or be more specific.有人知道怎么做吗?我可以在不需要循环的情况下做作物操作吗?
我还想知道Tensorflow是否会知道如何在此基础上进行反向传播。
顺便说一下,我使用的是Tensorflow 2
发布于 2020-04-01 19:57:46
这会为你说清楚的。Tensorflow希望所有循环变量与每次迭代保持一致。因此,不允许出现张量和增长。你必须定义一个更大的张量,并在一个循环中填充它。
https://stackoverflow.com/questions/60976235
复制相似问题