为什么此模型给我一个“值错误”

时间:2019-06-14 20:38:52

标签: numpy keras

这给了我一个我不明白的值错误。就是这样:

  

检查模型输入时出错:传递给模型的Numpy数组列表不是模型期望的大小。预计会看到2个数组,但得到了以下1个数组的列表”,我的数据有8列,而我试图预测输出的最后2个列。

这是一种排名算法,我正在尝试使用自己的数据:

import pandas as pd
import keras
import numpy as np

import pandas as pd
from sklearn.model_selection import train_test_split


from keras import backend

from keras.layers import Activation, Dense, Input, Subtract

from keras.models import Model



INPUT_DIM = 7



# Model.

h_1 = Dense(128, activation="relu")

h_2 = Dense(64, activation="relu")

h_3 = Dense(32, activation="relu")

s = Dense(1)



# Relevant document score.

rel_doc = Input(shape=(INPUT_DIM,), dtype="float32")

h_1_rel = h_1(rel_doc)

h_2_rel = h_2(h_1_rel)

h_3_rel = h_3(h_2_rel)

rel_score = s(h_3_rel)



 # Irrelevant document score.

irr_doc = Input(shape=(INPUT_DIM,), dtype="float32")

h_1_irr = h_1(irr_doc)

h_2_irr = h_2(h_1_irr)

h_3_irr = h_3(h_2_irr)

irr_score = s(h_3_irr)



# Subtract scores.

diff = Subtract()([rel_score, irr_score])



# Pass difference through sigmoid function.

prob = Activation("sigmoid")(diff)



# Build model.

model = Model(inputs=[rel_doc, irr_doc], outputs=prob)

model.compile(optimizer="adadelta", loss="binary_crossentropy")



#  data.
data=pd.read_csv('ranking_dataset_remastered.csv')
print (data.head())
X = data.iloc[:, 1:7]
y = data.iloc[:, 6:7]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 
 0.2)
)

 # Train model.

 NUM_EPOCHS = 20

BATCH_SIZE = 512

history = model.fit(X_train, y_train, batch_size=BATCH_SIZE, 
 epochs=NUM_EPOCHS, verbose=1)



# Generate scores from document/query features.

get_score = backend.function([rel_doc], [rel_score])

get_score([X_train])

get_score([y_train])

1 个答案:

答案 0 :(得分:0)

使用此行定义模型时:

model = Model(inputs=[rel_doc, irr_doc], outputs=prob)

您创建了keras称为multi-input model的内容,这实际上意味着您的模型期望一个以上的输入(在您的示例2中:rel_doc和{{ 1}})。

但是,在训练过程中,您仅传递了1个输入irr_doc

X_train

要进行工作,您需要做的是两个数组,一个数组代表相关文档,一个不相关文档,并在训练过程中将它们都输入到模型中,如下所示:

history = model.fit(X_train, y_train, batch_size=BATCH_SIZE, 
                    epochs=NUM_EPOCHS, verbose=1)