我有一个函数可以返回一个名为图层的变量 - 图像格式为:
<tf.Tensor 'Conv2D_1:0' shape=(?, 16, 16, 1) dtype=float32>
我需要将这些图像保存在.jpeg中。
到目前为止,我一直想到这样做:
# Reshape into tf.image.encode_jpeg format
images = tf.reshape(tf.cast(layer, tf.uint8), [16, 16, 1])
# Encode
images_encode = tf.image.encode_jpeg(images)
# Create a files name
fname = tf.constant('datetime.now() + ".jpeg"')
# Write files
fwrite = tf.write_file(fname, images_encode)
train_batch_size = 300
在session = tf.Session()
中# That means it will only scroll through my 300 images...
x_batch, y_true_batch = next_batch_size(train_batch_size)
feed_dict_train = {x: x_batch, y_true: y_true_batch}
result = session.run(fwrite, feed_dict=feed_dict_train)
但我收到以下错误:
InvalidArgumentError (see above for traceback): Input to reshape is a tensor with 76800 values, but the requested shape has 256
[[Node: Reshape_7 = Reshape[T=DT_UINT8, Tshape=DT_INT32, _device="/job:localhost/replica:0/task:0/cpu:0"](Cast_7, Reshape_7/shape)]]
我的占位符是:
# Placeholder variable for the input images
x = tf.placeholder(tf.float32, shape=[None, img_size_flat], name='x')
# Reshape 'x'
x_image = tf.reshape(x, [-1, img_size, img_size, num_channels])
# Placeholder variable for the true labels associated with the images
y_true = tf.placeholder(tf.float32, shape=[None, num_classes], name='y_true')
知道如何解决这个问题,或者我可以应用哪些方法来保存图像?
答案 0 :(得分:1)
您使用的批量大小为76800/256 = 300
重塑功能正在尝试将整批重塑为(16,16,1)
张量:这是不可能的。
如果您想保存单张图片,您有两种选择:
tf.reshape(tf.cast(layer[0], tf.uint8), [16, 16, 1])
如果您要保存整批图像,则必须循环批处理(使用tf.map_fn
)并单独编码图像(因为tf.image.encode_jpeg适用于单个图像)。然后,从python中提取每个编码图像并将其保存到磁盘。