Ошибка при проверке ввода: ожидалось, что lstm_1_input будет иметь форму (43, 768), но получил массив с формой (41, 768) - PullRequest
0 голосов
/ 10 февраля 2020

Я получил ValueErrors при попытке предсказать значения из обученной модели в Керасе, используя spacy.

Вот моя форма ввода: ((36189, 43, 768), (36189, 344)) для обучения Модель и ниже - код модели:

checkpoint = ModelCheckpoint('model-{epoch:03d}-{acc:03f}-{val_acc:03f}.h5', verbose=1, monitor='val_loss',save_best_only=True, mode='auto')  

data_dim = 768
timesteps = X.shape[1]
num_classes = 10

# # expected input data shape: (batch_size, timesteps, data_dim)
model = Sequential()

model.add(LSTM(320, return_sequences=True, input_shape=(timesteps, data_dim))) 
model.add(LSTM(64, return_sequences=True))  
model.add(LSTM(128))

model.add(Dense(344, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer='rmsprop',  metrics=['accuracy'])


# print("X:" , X)
# print("Y:", Y)


model.fit(X, Y, batch_size=64, epochs=20, validation_split=0.1)

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

Для прогноза у меня есть номера текста описание. Так. я преобразовал их в вектор, используя следующий код:

dataFrac_p=data_p.sample(frac=1.00) # data_p is my prediction set. That have items in text format.

is_using_gpu = spacy.prefer_gpu()
if is_using_gpu:
    torch.set_default_tensor_type("torch.cuda.FloatTensor")

nlp = spacy.load("en_trf_xlnetbasecased_lg")

x=[]

for index,row in tqdm(dataFrac_p.iterrows(), total=dataFrac_p.shape[0],ascii=True):
    txt = row["ITEM_DESCRIPTION"]
    x.append(nlp(txt)._.trf_last_hidden_state)


x2_p=[cupy.asnumpy(a) for a in x]

X_p=pad_sequences(x2_p)
# Y_p=to_categorical(np.array(y))
X_p.shape  =====>> It gives shape of (30590, 41, 768) to predict.
model.predict(X_p) ## getting Exceptions here

Теперь я делаю model.predict (X_p) ==>, который дает ValueError: Ошибка при проверке ввода: ожидается, что lstm_1_input будет иметь форму (43, 768), но получил массив с формой (41, 768).

Здесь я заметил, что модель обучена ((36189, 43, 768), (36189, 344)) форме, и я предсказываю новое значение набора данных с (30590, 41, 768).

Есть ли решение?

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...