2016-07-07 5 views
1

의 입력 모양 Keras의 단어 수준에서 언어 모델을 학습하려고합니다.Keras LSTM/GRU 언어 모델

Exception: Error when checking model input: 
expected gru_input_7 to have 3 dimensions, but got array with shape (90582L, 517L) 

:

print('Build model...') 
model = Sequential() 
model.add(GRU(512, return_sequences=True, input_shape=(90582, 517))) 
model.add(Dropout(0.2)) 
model.add(GRU(512, return_sequences=True)) 
model.add(Dropout(0.2)) 
model.add(TimeDistributedDense(1)) 
model.add(Activation('softmax')) 
model.compile(loss='categorical_crossentropy', optimizer='rmsprop') 
model.fit(x_pad, y_pad, batch_size=128, nb_epoch=2) 

다음과 같은 에러가 발생합니다

나는

나는이 모델에 맞게 시도 모두 모양 (90582L, 517L)로, 내 X와 Y가 입력 모양이 무엇인지에 대한 지침이 필요합니까? 나는 모든 종류의 조합에 시행 착오를했지만, 나는 근본적인 무언가를 오해하고있는 것처럼 보입니다.

Keras 텍스트 생성 예에서 X 행렬은 3 차원을가집니다. 나는 제 3의 차원이 무엇인지에 관해 잘 모른다.

답변

3

당신이하려는 일에 달려 있습니다. 나는 당신의 모양 데이터 (90582, 517)가 각각 517 단어를 가진 90582 샘플의 집합이라고 생각합니다. 그렇다면 단어를 의미있는 것으로 만들기 위해 단어를 단어 벡터 (= 포함)로 변환해야합니다. 그런 다음 GRU에서 처리 할 수있는 모양 (90582, 517, embedding_dim)을 갖게됩니다.

Keras Embedding layer을 사용할 수 있습니다. 첫 번째 GRU 레이어 앞에 Neural Network의 첫 번째 레이어로 추가하십시오.

vocabulary_size = XXXXX  # give your vocabulary size here (largest word ID in the input) 
embedding_dim = XXXX  # give your embedding dimension here (e.g. 100) 

print('Build model...') 
model = Sequential() 
model.add(Embedding(vocabulary_size, embedding_dim, input_shape=(90582, 517))) 
model.add(GRU(512, return_sequences=True)) 
model.add(Dropout(0.2)) 
model.add(GRU(512, return_sequences=True)) 
model.add(Dropout(0.2)) 
model.add(TimeDistributedDense(1)) 
model.add(Activation('softmax')) 
model.compile(loss='categorical_crossentropy', optimizer='rmsprop') 
model.fit(x_pad, y_pad, batch_size=128, nb_epoch=2)