TensorFlow/Keras训练报错expected dense_3 shape (1,) 实得(10,)求助
错误根因
代码存在损失函数与标签格式不匹配的问题:
- 编译模型时使用的
sparse_categorical_crossentropy损失,要求输入标签为单值整数类别索引,对应标签shape为(样本数, 1) - 调用
flow_from_directory时未指定class_mode参数,默认使用class_mode="categorical",会自动生成10类的one-hot编码标签,shape为(样本数, 10),和损失要求的维度不符,触发报错。
修复方案(二选一即可)
- 方案1(推荐):修改数据生成器参数,输出整数标签匹配现有损失
修改数据生成器的代码片段:
train_generator = datagen.flow_from_directory( TRAINING_DATA_DIR, shuffle=True, target_size=IMAGE_SHAPE, class_mode='sparse' # 新增该参数 ) valid_generator = datagen.flow_from_directory( VALID_DATA_DIR, shuffle=False, target_size=IMAGE_SHAPE, class_mode='sparse' # 新增该参数 )
- 方案2:修改损失函数匹配默认的one-hot标签
修改模型编译的代码片段:
model.compile(optimizer='adam', loss='categorical_crossentropy', # 替换原有sparse_categorical_crossentropy metrics=['accuracy'])
修改完成后即可正常启动训练。
内容的提问来源于stack exchange,提问作者user16995817
相关产品推荐
相关产品推荐

