2016-08-27 15 views
0

コードを実行するとこのエラーが発生します。リカレントニューラルネットワークを使用した言語モデルの構築

例外:入力配列は、ターゲット配列と同じ数のサンプルを持つ必要があります。 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') 

私は列車データの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) 

であり、これはpleseは私を許し、私はこれに新しいです1つのホットベクトル

(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() 

のための私の出力であります。ありがとうございました

答えて

0

いつか、私は問題がホットコードエンコーディングコードの間違ったインデントであることを知りました。また、データセットのサイズを縮小して、より高速に対応させました。以下

は修正されたコード

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) 
です
関連する問題