2017-08-07 16 views
0

Kerasで複数クラスの分類器を作成しようとしていますが、高密度レイヤーにディメンションの不一致があります。Keras高密度レイヤーの形状の不一致

MAX_SENT_LENGTH = 100 
MAX_SENTS = 15 
EMBEDDING_DIM = 100 

x_train = data[:-nb_validation_samples] 
y_train = labels[:-nb_validation_samples] 
x_val = data[-nb_validation_samples:] 
y_val = labels[-nb_validation_samples:] 

embedding_layer = Embedding(len(word_index) + 1, 
          EMBEDDING_DIM, 
          weights=[embedding_matrix], 
          input_length=MAX_SENT_LENGTH, 
          trainable=True) 

sentence_input = Input(shape=(MAX_SENT_LENGTH,), dtype='int32') 
embedded_sequences = embedding_layer(sentence_input) 
l_lstm = Bidirectional(LSTM(100))(embedded_sequences) 
sentEncoder = Model(sentence_input, l_lstm) 

review_input = Input(shape=(MAX_SENTS,MAX_SENT_LENGTH), dtype='int32') 
review_encoder = TimeDistributed(sentEncoder)(review_input) 
l_lstm_sent = Bidirectional(LSTM(100))(review_encoder) 
preds = Dense(7, activation='softmax')(l_lstm_sent) 
model = Model(review_input, preds) 

model.compile(loss='sparse_categorical_crossentropy', 
       optimizer='rmsprop', 
       metrics=['acc']) 

model.fit(x_train, y_train, validation_data=(x_val, y_val), 
      epochs=10, batch_size=50) 

クラスラベルが正しく1-ホットベクトルに変換されますが、モデルに合うようにしようとしたとき、私はこの不一致エラー取得しています:このません

('Shape of data tensor:', (5327, 15, 100)) 
('Shape of label tensor:', (5327, 7)) 
_________________________________________________________________ 
Layer (type)     Output Shape    Param # 
================================================================= 
input_2 (InputLayer)   (None, 15, 100)   0   
_________________________________________________________________ 
time_distributed_1 (TimeDist (None, 15, 200)   351500  
_________________________________________________________________ 
bidirectional_2 (Bidirection (None, 200)    240800  
_________________________________________________________________ 
dense_1 (Dense)    (None, 7)     1407  
================================================================= 
Total params: 592,501 
Trainable params: 592,501 
Non-trainable params: 0 
_________________________________________________________________ 
None 
ValueError: Error when checking target: expected dense_1 to have 
       shape (None, 1) but got array with shape (4262, 7) 

(なし、1)このエラーを解決するにはどうすればよいですか?

答えて

1

ラベルがワンホットエンコードの場合は、loss='sparse_categorical_crossentropy'の代わりにloss='categorical_crossentropy'を使用してください。 'sparse_categorical_crossentropy'は整数ラベルを取るため、(None,1)ディメンションが必要です。

関連する問題