Tensorflow训练脑肿瘤MRI检测模型报No gradients provided错误
错误原因
- 核心触发原因:你在
model.compile时将loss参数设置为了None,模型没有损失函数用来计算预测值和真实标签的误差,自然无法生成梯度更新网络参数,直接触发了当前报错。 - 潜在不兼容问题:你的模型最后一层
dense_1输出维度是2,属于多分类输出逻辑,但你给flow_from_directory设置的class_mode='binary'会生成单值的0/1标签,和输出维度不匹配,即使补上损失函数后续也会报错。
解决方法
根据你的需求二选一即可:
方案1:适配二分类设置
如果要沿用class_mode='binary'的二分类配置,做两处修改:
- 调整最后一层全连接层的输出维度和激活函数:
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))
- 编译时指定对应二分类损失函数:
model.compile( optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'], )
方案2:适配多分类输出
如果要保持最后一层输出维度为2,做两处修改:
- 调整
flow_from_directory的class_mode参数:
train_generator = datagen.flow_from_directory( TRAIN_DIR, target_size=(150, 150), batch_size=32, class_mode='sparse', subset='training' ) # val_generator做相同的class_mode修改
- 给最后一层加softmax激活,同时指定对应多分类损失函数:
# 最后一层修改 model.add(tf.keras.layers.Dense(2, activation='softmax')) # 编译参数修改 model.compile( optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'], )
内容的提问来源于stack exchange,提问作者listout
相关产品推荐
相关产品推荐

