Keras多输入模型疑问:输入拼接合理性及predict调用报错问题
问题解答
1. 输入拼接方式的正确性
你的输入拼接方式是正确的,Concatenate(axis=1)会把两个形状为(None,1)的输入张量拼接成(None,2)的张量,网络会将这两个位置的特征视为不同的输入维度,完全可以学习到它们和输出之间的关联。
如果想要更明确地区分两个输入,也可以给每个输入单独加一层Dense再合并,但当前的拼接方式已经能满足需求,不需要额外修改。
另外注意你代码里开头定义的Sequential模型model = tf.keras.Sequential([l0])被后面的多输入模型覆盖了,属于冗余代码,可以直接删除。
2. model.predict()调用错误的解决
报错的核心原因是输入格式不符合多输入模型的要求:
- 你的模型是双输入结构,需要传入一个包含两个输入数据的列表,且每个输入的形状要和训练时一致(训练时输入是形状为
(N,1)的数组,预测时每个输入也要是(1,1)的二维数组,不能直接传单个整数)。 - 修正后的调用代码如下:
# 把输入转换成符合要求的二维数组格式 input_data1 = np.array([[11]]) input_data2 = np.array([[2]]) print(model.predict([input_data1, input_data2]))
或者更简洁的写法:
print(model.predict([np.array([[11]]), np.array([[2]])]))
另外,训练时你的样本量只有5个,batch_size=16会导致每个epoch只处理一次批量(因为样本数小于batch size),可以把batch_size调小到5或者直接去掉,让模型每次处理所有样本。
内容的提问来源于stack exchange,提问作者tree.3
相关产品推荐
相关产品推荐

