Построение языковой модели с использованием рекуррентных нейронных сетей

Я получаю эту ошибку, когда я запускаю свой код.

Исключение: входные массивы должны иметь то же количество выборок, что и целевые. Найдено 12196 входных образцов и 1 целевой образец.

Ниже модель, которую я тренирую.

from keras.models import Sequential
from keras.layers.core import Dense
from keras.utils import np_utils
from keras.layers.embeddings import Embedding
from keras.layers.recurrent import LSTM
from keras.regularizers import l2
from keras.layers.wrappers import TimeDistributed

n_in = x_train.shape[1]
n_hidden = 100
n_out = word_vecs.shape[0]
number_of_epochs = 10
batch_size = 35

model = Sequential()

model.add(Embedding(output_dim=word_vecs.shape[1],                 input_dim=word_vecs.shape[0],input_length=n_in,  weights=[word_vecs],  mask_zero=True))  

model.add(LSTM(n_hidden, W_regularizer=l2(0.0001), U_regularizer=l2(0.0001), return_sequences=True))

model.add(TimeDistributed(Dense(n_out, activation='softmax', W_regularizer=l2(0.0001))))


model.compile(loss='categorical_crossentropy', optimizer='rmsprop')

Я также закодировал один горячий вектор моих данных поезда.

ниже код

new_instance = []

for instance in train_y :
    new_vector = np.zeros(shape=(instance.shape[0],  word_vecs.shape[0]))

    print(instance.shape[0],  word_vecs.shape[0])

    new_vector[np.arange(new_vector.shape[0]), instance ] =1

new_instance.append(new_vector)
new_instance = np.array(new_instance)

и это мой вывод для одного горячего вектора

(260, 4075)
(260, 4075)
(260, 4075)
(260, 4075)
(260, 4075)
(260, 4075)
(260, 4075)
(260, 4075)
(260, 4075)
(260, 4075)
(260, 4075)
(260, 4075)
(260, 4075)
(260, 4075)
(260, 4075)

[[[ 1.  0.  0. ...,  0.  0.  0.]
  [ 1.  0.  0. ...,  0.  0.  0.]
  [ 1.  0.  0. ...,  0.  0.  0.]
  ..., 
  [ 0.  0.  0. ...,  0.  0.  0.]
  [ 0.  0.  0. ...,  0.  0.  0.]
  [ 0.  0.  1. ...,  0.  0.  0.]]]

и наконец

for epoch in range(number_of_epochs):    
        start_time = time.time()

        #Train for 1 epoch
        model.fit(train_x, new_instance, nb_epoch=1,  batch_size=batch_size, verbose=False, shuffle=True)   

        print("%.2f sec for training" % (time.time() - start_time))
        sys.stdout.flush()

Я новичок в этом, прошу прощения. Спасибо

1 ответ

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

ниже исправленный код

new_instance = []

for instance in train_y :
    new_vector = np.zeros(shape=(instance.shape[0],  word_vecs.shape[0]))

    print(instance.shape[0],  word_vecs.shape[0])

    new_vector[np.arange(new_vector.shape[0]), instance ] =1

    new_instance.append(new_vector)
new_instance = np.array(new_instance)
Другие вопросы по тегам