Keras模型做数据增强后首Epoch报形状不兼容错误(基于Fashion MNIST)
报错原因及解决方法
核心问题说明
该报错本质是标签与模型输出形状不匹配、验证集数据配对错误共同导致的,具体错误点如下:
- 验证集参数配对错误:
fit_generator中的validation_data错误传入了(x_train, y_val_binary),训练集输入和验证集标签的样本数量完全不一致,形状自然无法匹配,正确的配对应该是(x_val, y_val_binary) - 标签编码逻辑错误:
LabelBinarizer分别对训练、测试、验证集执行了fit_transform,不同子集的类别编码规则可能不一致,容易导致标签维度异常,正确做法是仅在训练集执行fit确定编码规则,测试、验证集直接调用transform即可 - 接口弃用问题:Keras的
fit_generator已经是废弃接口,当前版本的fit方法原生支持传入ImageDataGenerator生成的迭代器,不需要调用旧接口
修正代码片段
预处理部分修正
label_as_binary = LabelBinarizer() # 仅在训练集上拟合编码规则 y_train_binary = label_as_binary.fit_transform(y_train) # 测试、验证集直接复用训练集的编码规则转换 y_test_binary = label_as_binary.transform(y_test) y_val_binary = label_as_binary.transform(y_val)
训练部分修正
model2.compile(loss='categorical_crossentropy', optimizer=Adadelta(learning_rate=0.01), metrics=['accuracy']) # 修正验证集配对,替换废弃接口 history = model2.fit(datagen.flow(x_train,y_train_binary, batch_size=batch_size), epochs = 10, validation_data = (x_val, y_val_binary), verbose = 1)
额外排查项
如果修改后仍然报错,可检查两点:
- 确认Fashion_MNIST标签为0-9的10分类取值,没有异常标签值
- 确认代码其他位置没有修改过
x_val、y_val_binary的原始形状
内容的提问来源于stack exchange,提问作者eneko valero
相关产品推荐
相关产品推荐

