在Tensorflow 2.0中,tf.shape(image)返回None

在Tensorflow 2.0中,tf.shape(image)返回None,tensorflow,tensorflow-datasets,tensorflow2.0,Tensorflow,Tensorflow Datasets,Tensorflow2.0,我用Tensorflow 2.0建立了一个超分辨率模型。在预处理过程中,我希望按照给定的面片大小裁剪低分辨率和高分辨率图像。为了做到这一点,我想得到低分辨率和高分辨率图像的高度和宽度。但是tf.shape(image)没有返回任何值。 有更好的方法吗 目前,在使用tf.shape之前,我只是将每个图像的大小调整到某个大小,但由于并非所有图像都具有相同的大小,这会影响图像的质量。期待您的建议 编辑部分: 下面是代码的一些部分 low_r=tf.io.decode_jpeg(lr_文件名,通道=3)

我用Tensorflow 2.0建立了一个超分辨率模型。在预处理过程中,我希望按照给定的面片大小裁剪低分辨率和高分辨率图像。为了做到这一点,我想得到低分辨率和高分辨率图像的高度和宽度。但是tf.shape(image)没有返回任何值。 有更好的方法吗

目前,在使用tf.shape之前,我只是将每个图像的大小调整到某个大小,但由于并非所有图像都具有相同的大小,这会影响图像的质量。期待您的建议

编辑部分: 下面是代码的一些部分

low_r=tf.io.decode_jpeg(lr_文件名,通道=3)

low_r=tf.cast(low_r,dtype=tf.float32)

打印(低形状)

打印语句打印(无、无、3)
我想得到的是身高和体重,比如(240360,3)

我无法重复您的问题,但这应该可以让您测试Tensorflow 2.0安装并与当前获得的结果进行比较

创建张量并检查其形状:

import tensorflow as tf
t = tf.constant([[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]])
tf.shape(t)  # [2, 2, 3]

Out[1]: <tf.Tensor: id=1, shape=(3,), dtype=int32, numpy=array([2, 2, 3])>
输出:

tf.Tensor([2 2 3], shape=(3,), dtype=int32)
tf.Tensor([], shape=(0,), dtype=int32)
tf.Tensor([], shape=(0,), dtype=int32)
最后,在int和string上调用它以返回有效的返回:

tf.shape(1)
Out[10]: <tf.Tensor: id=12, shape=(0,), dtype=int32, numpy=array([], dtype=int32)>

tf.shape('asd')
Out[11]: <tf.Tensor: id=15, shape=(0,), dtype=int32, numpy=array([], dtype=int32)>
输出:

tf.Tensor([2 2 3], shape=(3,), dtype=int32)
tf.Tensor([], shape=(0,), dtype=int32)
tf.Tensor([], shape=(0,), dtype=int32)

tf.shape()。这与以下事实有关:
TensorShape
tensor是在构建过程中生成的,而不是在执行过程中生成的

使用
tf.shape()
(在您的问题中提到,但实际上没有在您的代码片段中使用)可以为我解决这个问题

> my_tensor.shape()
TensorShape([None, None, None, None])
> tf.shape(my_tensor)
[10 512 512 8]

如果你不提供代码,我们就帮不了你。请看一下。我提供了我的代码。