Я получил 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).
Есть ли решение?
Заранее спасибо.