Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从tensorflow数据集获取要素时出错_Python_Python 3.x_Tensorflow_Runtime Error_Tensorflow Datasets - Fatal编程技术网

Python 从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数据集时出错。我使用的是在

错误是:

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))