我使用TensorFlow函数tf.image.resize_images来调整我的图像大小,但我在代码中得到了这个错误:ValueError:“images”不包含形状。完整代码如下:
# -*- coding: utf-8 -*-
import tensorflow as tf
file = ["./1.jpg"]
f = tf.train.string_input_producer(file)
reader = tf.WholeFileReader()
key, img = reader.read(f)
img = tf.image.decode_image(img)
# img.set_shape([218,178,3])
img = tf.image.resize_images(img, [64,64])
coord = tf.train.Coordinator()
with tf.Session() as sess:
tf.train.start_queue_runners(coord=coord)
image = sess.run(img)
完整的错误信息是
Traceback (most recent call last):
File "image_read_test.py", line 10, in <module>
img = tf.image.resize_images(img, [64,64])
File "C:\Python35\lib\site-packages\tensorflow\python\ops\image_ops_impl.py", line 724, in resize_images
raise ValueError('\'images\' contains no shape.')
ValueError: 'images' contains no shape.
然后我试着解决这个问题,但只能找到这样的方法
# -*- coding: utf-8 -*-
import tensorflow as tf
file = ["./1.jpg"]
f = tf.train.string_input_producer(file)
reader = tf.WholeFileReader()
key, img = reader.read(f)
img = tf.image.decode_image(img)
# img.set_shape([218,178])
# img = tf.image.resize_images(img, [64,64])
coord = tf.train.Coordinator()
with tf.Session() as sess:
tf.train.start_queue_runners(coord=coord)
image = sess.run(img)
image = tf.image.resize_images(image, [64,64])
只有这样功能才能正常工作,但我不知道为什么?函数tf.image.resize_images是否只接受numpy数组作为参数?或者我可以找到另一种方法来解决这个问题?注意:img.set_shape([218,78,3])不适合我
4条答案
按热度按时间qxsslcnc1#
将
expand_animations = False
作为参数传递很重要:尝试:
以确保Tensor是三维的。这个问题是由于gif格式造成的,因为decode_gif返回一个四维数组[num_frames,height,width,3],而其他格式包括decode_bmp、decode_jpeg和decode_png,它们返回三维数组[height,width,num_channels]。
有关详细信息,请查看related documentation
e4yzc0pl2#
我最近面对这个问题,
不返回带有形状的Tensor,但我的图像都是JPEG格式的。
所以我用了
它会返回带有形状的Tensor,这就解决了问题。注意,还有tf.image.decode_png()。
更多信息可以在这里找到Tensorflow tf.image.decode_jpeg documentation
s6fujrry3#
3b6akqbq4#
我直接将原始图像数据(即我的输入形状是
(batch_size, image_height, image_width, 3)
,我没有在任何时候调用decode_jpeg
),并添加tf.config.run_functions_eagerly(True)
正好帮我解决了这个问题
我不知道我的案例中的根本原因,但TFRecords是使用与加载模型所使用的版本不同的Tensorflow版本生成的,我怀疑这是问题的一部分。