我在使用tf.image.central_crop()
时遇到了以下问题
def preprocessor(image): image = tf.reshape(image, (IMAGE_HEIGHT, IMAGE_WIDTH, IMAGE_CHANNELS)) print(image.get_shape()) image = tf.image.central_crop(image,0.8) print(image.get_shape()) return image
输出的结果是
(384, 384, 3) 和 (?, ?, 3)
central_crop()
函数似乎丢失了图像张量的高度和宽度信息。为什么会发生这种情况?
Tensorflow 版本: tensorflow 1.0.0, tensorflow-gpu 1.0.1
回答:
你是对的。除非张量被评估,否则无法检索其形状。如果你想在后续操作中使用它,可以使用”tf.shape(image)”。
TensorFlow 裁剪了图像,但无法获取其形状。如果你只是想检查它是否进行了裁剪,请按照以下步骤(运行会话):
import tensorflow as tfimport numpy as npIMAGE_HEIGHT = 384IMAGE_WIDTH = 384IMAGE_CHANNELS = 3def preprocessor(image): image = tf.reshape(image, (IMAGE_HEIGHT, IMAGE_WIDTH, IMAGE_CHANNELS)) image = tf.image.central_crop(image,0.8) shape = tf.shape(image) return image,shapeimage = tf.random_normal([IMAGE_HEIGHT,IMAGE_WIDTH,IMAGE_CHANNELS])image_cropped,shape = preprocessor(image)sess = tf.Session()im_v,im_crop_v,shape_v = sess.run([image,image_cropped,shape])print(im_v.shape)print(im_crop_v.shape)print(shape_v)
输出结果:
(384, 384, 3)(308, 308, 3)[308 308 3]