Keras多输入模型.fit()正常但.evaluate()出现数据基数不匹配错误
问题原因与解决方案
错误根源
报错提示的数据基数不匹配,核心问题是输入的两个张量样本数不一致:
x_train形状为(60, 577, 1),样本数是60dummy_mask形状为(577, 577, 1),样本数是577- 模型要求所有输入的样本数必须和标签
y_train的样本数(60)完全一致,evaluate方法会严格校验这一点,而fit可能因广播规则宽松暂时没触发错误。
同时,你的mask_input定义的形状是(sequence_size, sequence_size),但传入的dummy_mask多了一个最后维度(...,1),这也是冗余的。
解决方案
1. 调整掩码形状,匹配样本数
如果所有样本共用同一个(577,577)的掩码,需要将掩码扩展为和x_train相同的样本数:
import numpy as np # 先去掉掩码多余的最后一维,变成(577,577) dummy_mask = dummy_mask.squeeze(axis=-1) # 扩展样本维度,重复60次,得到(60,577,577) dummy_mask = np.repeat(dummy_mask[np.newaxis, ...], repeats=60, axis=0)
2. 验证模型输入形状匹配
确认模型中mask_input的定义和输入数据一致:
模型里mask_input = keras.Input(shape=(sequence_size, sequence_size), name="mask_input"),要求每个样本的掩码是(sequence_size, sequence_size),所以最终传入的掩码张量必须是(样本数, sequence_size, sequence_size),不能带额外的通道维度。
处理后再调用model.evaluate([x_train, dummy_mask], y_train)即可解决报错。
内容的提问来源于stack exchange,提问作者Henning
相关产品推荐
相关产品推荐

