Python Tensorflow数据集:即使在调整大小后也无法批处理不同形状的张量错误?

Python Tensorflow数据集:即使在调整大小后也无法批处理不同形状的张量错误?,python,tensorflow,computer-vision,Python,Tensorflow,Computer Vision,tensorflow数据集模块出现问题。使用stanford_dogs数据集,我将图像大小调整为[180180],但是当模型经过训练时,从错误消息中可以看出tensorflow正在尝试以原始大小加载图像 我做错了什么 代码来复制下面的错误(和错误)。数据集大约为750mb。可以将其复制粘贴到google colab并运行以进行复制 import io import numpy as np import tensorflow as tf import tensorflow_datasets as

tensorflow数据集
模块出现问题。使用
stanford_dogs
数据集,我将图像大小调整为
[180180]
,但是当模型经过训练时,从错误消息中可以看出
tensorflow
正在尝试以原始大小加载图像

我做错了什么

代码来复制下面的错误(和错误)。数据集大约为750mb。可以将其复制粘贴到
google colab
并运行以进行复制

import io
import numpy as np
import tensorflow as tf
import tensorflow_datasets as tfds

def _normalize_img(img, label):
    img = tf.cast(img, tf.float32) / 255.
    img = tf.image.resize(img,[180,180])
    return (img, label)
    

train_dataset, test_dataset = tfds.load(name="stanford_dogs", split=['train', 'test'], as_supervised=True)

train_dataset = train_dataset.shuffle(1024).batch(32)
train_dataset = train_dataset.map(_normalize_img)

test_dataset = test_dataset.batch(32)
test_dataset = test_dataset.map(_normalize_img)

model = tf.keras.Sequential([
    tf.keras.layers.Conv2D(64,2,padding='same',activation='relu',input_shape=(180,180,3)),
    tf.keras.layers.MaxPooling2D(2),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Conv2D(32,2,padding='same',activation='relu'),
    tf.keras.layers.MaxPooling2D(2),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(120,activation='softmax')
])


model.compile(
    optimizer=tf.keras.optimizers.Adam(0.001),
    loss='sparse_categorical_crossentropy')


history = model.fit(
    train_dataset,
    epochs=5)
失败,错误为:

InvalidArgumentError:  Cannot batch tensors with different shapes in component 0. First element had shape [278,300,3] and element 1 had shape [375,500,3].
     [[node IteratorGetNext (defined at <ipython-input-29-15023f95f627>:39) ]] [Op:__inference_train_function_4908]
InvalidArgumentError:无法批处理组件0中具有不同形状的张量。第一个元素具有形状[278300,3],元素1具有形状[375500,3]。
[[node IteratorGetNext(定义于:39)][Op:uu推理u训练u函数4908]

遇到此错误是因为
tf.data.Dataset
API无法创建一批具有不同形状的张量。由于批处理函数将返回形状的张量
(批处理、高度、宽度、通道)
高度
宽度
通道
值必须在整个数据集中保持不变。您可以在中阅读更多有关为什么的信息

调整大小后的批处理将解决您的问题:

train\u dataset=train\u dataset.shuffle(1024)
train\u dataset=train\u dataset.map(\u normalize\u img)
#我们对每个大小相同的图像进行一次批处理
列车数据集=列车数据集。批次(32)