我再次遇到Tensorflow的问题。我正在使用FCN模型,并且由于内存使用需要应用随机裁剪。
tf.random_crop(combined, size=[512, 512, 4])
不幸的是,现在新尺寸“坚持”张力,我无法摆脱它。
由此产生的问题是,结果模型只接受大小为512x512的输入,据我所知,这种输入无法以一种很好的方式解决。
是否有任何解决方案可以删除由random_crop引起的形状信息,或者在获得训练模型后轻松调整大小?
提前谢谢。
答案 0 :(得分:1)
我不知道它是否完全适合您的用例,但size
的{{1}}参数可以是张量,因此您可以使用{{1} }如下例所示。
tf.random_crop()
修改强>
根据作物尺寸的存储方式,可能有不同的解决方案可以在不使用placeholder
的情况下分配import tensorflow as tf
import numpy as np
image = tf.placeholder(tf.float64, [None, None, 4])
cropped_size = tf.placeholder(tf.int32, [2])
cropped_image = tf.random_crop(image, size=[cropped_size[0], cropped_size[1], 4])
print(cropped_image.get_shape().as_list())
# [None, None, 4]
with tf.Session() as sess:
res = sess.run(cropped_image,
feed_dict={image: np.random.rand(900, 600, 4), cropped_size: [512, 512]})
print(res.shape)
# (512, 512, 4)
的值。例如使用TF文件阅读器(在读取之前,这些值将保持未知)。
另一个简单的黑客行为:利用cropped_size
(doc),提供feed_dict
无论如何获得的裁剪尺寸。由于tf.placeholder_with_default(default_val, shape)
值实际上未分配到运行时(如果您要为此占位符提供不同的值),您的维度将保留在图表中default_val
:
tf.placeholder_with_default()