Keras/TensorFlow预测输入形状不兼容报错及模型方案合理性咨询
问题1:形状不兼容报错解决方案
报错核心原因是你输入的单样本向量形状为(20,),而模型要求的输入维度是(batch_size, 20),缺少了batch维度,仅需要调整输入向量的形状即可解决:
- 方法1:用
np.expand_dims新增batch维度
lol = np.expand_dims(lol, axis=0) res = model.predict(lol)
- 方法2:用reshape调整形状
lol = lol.reshape(1, -1) res = model.predict(lol)
注意不要把数组套在列表里传入predict,直接传递调整形状后的数组即可。
问题2:模型方案合理性及优化建议
你当前的单隐层全连接网络作为基线方案是合理的,已经实现了余弦相似度从0.5到0.66的提升,符合简单基线优先的迭代逻辑。可优化的方向包括:
- 数据预处理:先对所有初始、最终向量做L2归一化,消除向量模长对余弦相似度计算的干扰,让模型聚焦学习向量方向的变化规律
- 模型结构调整:可以尝试加深/加宽网络,比如
20维输入 -> 32维relu隐层 -> 20维输出,或者把激活函数替换为tanh,更适配余弦相似度的方向学习需求 - 损失函数优化:如果向量的模长也有业务意义,可以使用混合损失,比如
损失 = 0.7*负余弦相似度 + 0.3*MSE,同时兼顾方向和数值的拟合效果 - 正则化优化:4000条样本量不大,可以在全连接层增加L2正则,或者加入Dropout层,避免模型过拟合
- 训练策略调整:降低Adam优化器的初始学习率到
1e-4,增加训练轮次到50-100轮,配合早停回调(EarlyStopping)在验证集效果不提升时提前终止训练
内容的提问来源于stack exchange,提问作者mariusr
相关产品推荐
相关产品推荐

