TensorFlow自定义LSTM模型训练出现Shapes mismatch形状不匹配报错求助
问题根因
报错来自评估指标配置和模型输出维度不匹配:
- 你的模型最后一层是
Dense(1, activation='sigmoid'),属于单输出二分类配置,每个样本仅输出1个0~1区间的概率值,对应正类概率,和你当前train_y的形状(52499,)适配 - 模型编译时传入的
tfa.metrics.F1Score(num_classes=2)是针对双输出二分类/多分类场景的配置,要求模型最后一层输出2个值(对应两类的概率),计算指标时就会出现形状[2]和[1]不匹配的错误。
解决方案
方案1:保留单输出二分类配置,修改F1指标参数
仅修改编译时的metrics配置即可,无需改动模型结构和标签格式:
model.compile( loss=tf.keras.losses.BinaryCrossentropy(), optimizer=opt, metrics=[tfa.metrics.F1Score(num_classes=1, threshold=0.5)] )
方案2:保留num_classes=2的配置,修改模型输出和标签格式
如果需要保留两类输出的配置,做两处调整:
- 修改模型最后一层为2输出,激活函数替换为softmax:
layers = Dense(2, activation='softmax', bias_initializer=output_bias)(layers)
- 对标签做one-hot编码,适配2输出的格式:
train_y = tf.one_hot(train_y, depth=2) val_y = tf.one_hot(val_y, depth=2)
内容的提问来源于stack exchange,提问作者Shlomi Schwartz
相关产品推荐
相关产品推荐

