Keras functional API: 拟合和测试接受多个输入的模型

我构建了一个Keras模型,它有两个分支,每个分支接受相同数据的不同特征表示。任务是将句子分类到6个类别之一。

我已经测试了我的代码,直到model.fit,它接受一个包含两个输入特征矩阵的列表作为X。一切正常。但在预测时,当我传递测试数据的两个输入特征矩阵时,会生成一个错误。

代码如下:

X_train_feature1 = ... # 形状:(2200, 100) 每行是一个句子,每列是一个特征
X_train_feature2 = ... # 形状:(2200, 13) 每行是一个句子,每列是一个特征
y_train= ... # 形状:(2200,6)
X_test_feature1 = ... # 形状:(587, 100) 每行是一个句子,每列是一个特征
X_test_feature2 = ... # 形状:(587, 13) 每行是一个句子,每列是一个特征
y_test= ... # 形状:(587,6)
model= ... # 创建一个有两个分支的模型,参见下图
model.fit([X_train_feature1, X_train_feature2],y_train,epochs=100, batch_size=10, verbose=2) # 模型训练正常
model.predict([X_test_feature1, X_test_feature2],y_test,epochs=100, batch_size=10, verbose=2) # 此处报错

模型看起来像这样: enter image description here

错误信息如下:

predictions = model.predict([X_test_feature1,X_test_feature2], y_test, verbose=2)
  File "/home/zz/Programs/anaconda3/lib/python3.6/site-packages/keras/engine/training.py", line 1748, in predict
    verbose=verbose, steps=steps)
  File "/home/zz/Programs/anaconda3/lib/python3.6/site-packages/keras/engine/training.py", line 1290, in _predict_loop
    batches = _make_batches(num_samples, batch_size)
  File "/home/zz/Programs/anaconda3/lib/python3.6/site-packages/keras/engine/training.py", line 384, in _make_batches
    num_batches = int(np.ceil(size / float(batch_size)))
TypeError: only length-1 arrays can be converted to Python scalars

我非常希望能得到一些帮助来理解这个错误以及如何修复它。


回答:

predict方法只接受数据(即x)和batch_size作为输入(设置这个参数不是必须的)。它不接受标签或epochs作为输入。

如果你想预测类别,那么你应该使用predict_classes方法,它会给你预测的类别标签(而不是predict方法给出的概率):

preds_prob = model.predict([X_test_feature1, X_test_feature2])
preds = model.predict_classes([X_test_feature1, X_test_feature2])

如果你想在测试数据上评估你的模型以找到损失和指标值,那么你应该使用evaluate方法:

loss_metrics = model.evaluate([X_test_feature1, X_test_feature2], y_test)

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注