TensorFlow搭建Sequential模型时输入形状与层不兼容错误如何解决
问题解决方案
你遇到的报错由多维度不匹配、代码笔误、损失函数与任务不匹配三类问题导致,按以下步骤修复即可:
1. 统一输入输出维度
你同时存在两处维度数值矛盾:
- 代码里模型输入层写的是
shape=(786,),但你明确输入向量长度为768,且报错显示传入的输入最后一维为768,首先将输入层修改为:
model.add(keras.Input(shape=(768,)))
- 后续所有Dense层的输出维度需和标签维度对齐,如果你输出的向量长度为768,把所有输出维度为786的Dense层参数同步修改为768即可。
2. 删除输入多余维度
报错显示传入的输入形状为(1, 1, 768),正常batch_size=1的输入形状应为(1, 768),你误用了np.expand_dims()增加了多余维度,改为用np.squeeze()删除多余的空维度:
xtrain, ytrain = get_dataset() # 新增两行删除多余维度 xtrain = np.squeeze(xtrain) ytrain = np.squeeze(ytrain)
3. 修复代码笔误
你加载数据集得到的变量名为xtrain、ytrain,但model.fit()中传入的是x_train、y_train,变量名不统一会直接报变量未定义错误,修改fit参数为:
history = model.fit( xtrain, ytrain, batch_size=1, epochs=5, )
4. 匹配损失函数与任务类型
你当前的任务是输入向量输出同维度向量,属于回归任务,误用了分类任务的交叉熵损失与分类准确率指标,改为适配回归的配置:
# 输出层如果是输出0-1范围的数值,把激活改为sigmoid,符合你数据集归一化的取值范围 model.add(layers.Dense(768, activation="sigmoid", name="output")) model.compile( optimizer=tf.optimizers.Adam(), loss=tf.keras.losses.MeanSquaredError(), metrics=[tf.keras.metrics.MeanAbsoluteError()], )
内容的提问来源于stack exchange,提问作者PixelAim
相关产品推荐
相关产品推荐

