почему эта модель дает мне «Ошибка значения» - PullRequest
1 голос
/ 14 июня 2019

Это дает мне ошибку, которую я не понимаю.Вот что он говорит:

Ошибка при проверке ввода модели: список массивов 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 голосов
/ 15 июня 2019

Когда вы определили свою модель с помощью этой строки:

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

Вы создали то, что keras называет моделью с несколькими входами , что по сути означает, что ваша модель ожидает более одного входа (в вашем случае 2: ​​rel_doc и irr_doc).

Однако во время обучения вы просто пропускаете 1 вход, X_train:

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

То, что вы должны сделать, чтобы работать, - это иметь два массива , один представляющий релевантные и один не относящиеся к делу документы, и подавать их оба на модель во время обучения следующим образом:

history = model.fit([X_rel_train, X_irr_train], y_train, batch_size=BATCH_SIZE, 
                    epochs=NUM_EPOCHS, verbose=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...