2017-11-10 7 views
2

Keras에 아주 간단한 FFNN이 있습니다.Keras : softmax 출력의 정수 레이블을 허용합니다.

model = Sequential() 
shared_embedding = Embedding(vocab_size, word_emb_dim, input_length=1, name='embedding') 
model.add(shared_embedding) 
model.add(Dropout(emb_dropout)) 
model.add(Dense(hidden_size, name='hidden', 
kernel_constraint=max_norm(max_norm_size), activation='relu')) 
model.add(shared_embedding) 
model.add(Dense(vocab_size, name='output',    
kernel_constraint=max_norm(max_norm_size), activation='softmax')) 

model.compile(optimizer=optimizer, loss='sparse_categorical_crossentropy') 

이것은 바이 그램을 예측하는 매우 단순한 단어 모델입니다. 데이터에 단어가 주어지면 모델은 다음 단어를 예측합니다.

나는 50,000의 어휘 크기를 가지고 있으며, 나는 약 11 백만 개의 바이 그램을 가지고있다. 따라서 모든 하나의 핫 인코딩 된 매트릭스에 모든 타겟을 저장할 수 없다는 것은 말할 필요도 없습니다.

내가하고 싶은 일은 대상을 정수로 직접 사용하고 keras가이를 처리하도록 강제하는 것입니다. 나는 sparse_categorical_crossentropy으로 충분하다고 생각했지만 손실을 지정하는 것이 좋겠다고 생각했지만, 그렇지는 않았을 것입니다.

누구든지 무엇을 해야할지 알고 계십니까?

답변

1

밝혀졌습니다. 제대로 했어! 문제는 임베딩이 3 차원 (쓸데없는 input_length 크기로 인해)이라는 것입니다. Flatten() 전화를 사용해야했습니다. 그 후에 모든 것이 OK입니다!