Python 从tensorflow数据集获取要素时出错
我在尝试加载加州理工学院tensorflow数据集时出错。我使用的是在 错误是:Python 从tensorflow数据集获取要素时出错,python,python-3.x,tensorflow,runtime-error,tensorflow-datasets,Python,Python 3.x,Tensorflow,Runtime Error,Tensorflow Datasets,我在尝试加载加州理工学院tensorflow数据集时出错。我使用的是在 错误是: tensorflow.python.framework.errors_impl.InvalidArgumentError: Cannot batch tensors with different shapes in component 0. First element had shape [204,300,3] and element 1 had shape [153,300,3]. [Op:IteratorGet
tensorflow.python.framework.errors_impl.InvalidArgumentError: Cannot batch tensors with different shapes in component 0. First element had shape [204,300,3] and element 1 had shape [153,300,3]. [Op:IteratorGetNextSync]
错误指向ds\U列车功能的行。取(1)
代码:
ds\U列车,ds\U测试=tfds.load(name=“caltech101”,split=[“列车”,“测试”])
ds_train=ds_train.shuffle(1000).批处理(128).预取(10)
对于ds_系列中的功能,请选择(1):
图像,标签=特征[“图像”],特征[“标签”]
问题源于数据集包含可变大小的图像(请参见数据集说明)。Tensorflow只能将具有相同形状的内容批处理在一起,因此您首先需要将图像重塑为一个公共形状(例如,网络的输入形状)或相应地填充它们
如果要调整大小,请使用:
如果您想填充,请使用(只需在上述预处理
功能中替换它,并根据需要调整参数)。
通常,对于我所知道的大多数网络,都会使用调整大小
最后,在数据集上映射函数:
ds_train = (ds_train
.map(prepocess)
.shuffle(1000)
.batch(128)
.prefetch(10))
注意:错误代码中的变量形状来自于
shuffle
调用。调用tfds.load
后运行print(ds\u train.output\u shapes)
的结果是什么?{image':TensorShape([Dimension(None),Dimension(None),Dimension(3)],“image/file\u name”:TensorShape([])),“标签”:TensorShape([])}
如果在ds\u train=ds\u train.shuffle(1000).batch(128).prefetch(10)
?{image]:TensorShape([Dimension(None),Dimension(None),Dimension(None),Dimension(None),Dimension(None),Dimension(3)],“image/文件名”:TensorShape([Dimension(None)],“标签”:TensorShape([Dimension(None)])
是否可能在不首先清除python环境的情况下意外运行了ds\u train=ds\u train.shuffle(1000).batch(128).prefetch(10)
行两次?从输出中可以看出,tfds.load
不会预批处理数据(也不应该预批处理),但您的错误消息显示代码试图批处理整个数据集,而不是单个样本。如果您重新启动python解释器并按照显示的方式运行这些行,而中间没有任何其他内容,那么问题还会发生吗?啊,谢谢。我想没有简单的方法来重塑或垫?当然有!让我再补充一句:谢谢,非常感谢:)
ds_train = (ds_train
.map(prepocess)
.shuffle(1000)
.batch(128)
.prefetch(10))