TensorFlow模型训练出现形状不兼容错误,请求技术帮助
解决TensorFlow训练时的形状不兼容错误
问题根源
你遇到的ValueError: Shapes (None, 1) and (None, 26) are incompatible错误,核心原因是标签格式与损失函数不匹配:
- 模型最后一层是26神经元的
softmax,对应26分类任务 - 当前使用的
categorical_crossentropy损失函数要求标签是one-hot编码格式(形状为(样本数, 26)),但你的训练/验证标签是整数形式(形状为(样本数, 1)),两者形状不兼容 - 警告
Model was constructed with shape (None, 1)是标签形状不匹配引发的关联提示
两种可行解决方案
方案1:修改损失函数(最简单,无需改动标签)
直接将损失函数替换为sparse_categorical_crossentropy,该损失函数专门适用于整数形式的分类标签:
model.compile(optimizer = 'rmsprop', loss = 'sparse_categorical_crossentropy', # 此处修改 metrics=['accuracy'])
方案2:将标签转换为one-hot编码(保持原损失函数)
如果坚持使用categorical_crossentropy,需要将整数标签转换为one-hot编码格式,修改train_val_generators函数:
def train_val_generators(training_images, training_labels, validation_images, validation_labels): training_images = np.expand_dims(training_images,axis=3) validation_images = np.expand_dims(validation_images,axis=3) # 新增:将整数标签转为one-hot编码 training_labels = tf.keras.utils.to_categorical(training_labels, num_classes=26) validation_labels = tf.keras.utils.to_categorical(validation_labels, num_classes=26) train_datagen = ImageDataGenerator(rescale = 1./255, rotation_range= 40, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip=True, fill_mode='nearest') train_generator = train_datagen.flow(x=training_images, y=training_labels, batch_size=32) validation_datagen = ImageDataGenerator(rescale = 1./255) validation_generator = validation_datagen.flow(x=validation_images, y=validation_labels, batch_size=32) return train_generator, validation_generator
注意:两种方案二选一即可,无需同时修改。
内容的提问来源于stack exchange,提问作者LBlueLockL
相关产品推荐
相关产品推荐

