2017-04-16 12 views
3

나는 NN에 상당히 익숙하며, 대신 LSTM에 뭔가를 복사하는 "Hello World"를하고 있습니다. 다음과 같이 간단한 로직을 선택했습니다 :LSTM 트레이닝 패턴

3 타임 스텝이있는 입력. 첫 번째는 1 또는 0이고 다른 두 개는 임의의 숫자입니다. 예상 출력은 입력의 첫 번째 타임 스텝과 동일합니다. (?)이 간단한 논리가 100 %의 정확성을 위해 훈련 할 수

_X0=[1,5,9] _Y0=[1] _X1=[0,5,9] _Y1=[0] ... 200 more records like this. 

: 데이터 피드는 것 같습니다. 나는 많은 테스트를했고, 가장 효율적인 모델은 3 개의 LSTM 레이어 였고, 각각 15 개의 숨겨진 유닛이있었습니다. 이것은 22 개의 신기원 이후에 100 %의 정확도를 보였다.

그러나 나는 이해하기 힘든 것을 알아 냈다 : 처음 12 개 에포크에서는 모델이 정확도 (0.5로 유지됨)와 범주 진상 증자 (0.69-0.65). 이후 신기원 12에서 신기원 22까지는 정확도 1.0까지 매우 빠르게 훈련합니다. 문제는 왜 이렇게 훈련이 일어나는 것입니까? 왜 처음 12 개 신기원이 진전을 보이지 않고 왜 12-22 신대륙이 훨씬 더 효율적인가? 그것은 여러 가지 요인에 따라 달라집니다로

from keras.models import Sequential 
from keras.layers import Input, Dense, Dropout, LSTM 
from keras.models import Model 
import helper 
from keras.utils.np_utils import to_categorical 

x_,y_ = helper.rnn_csv_toXY("LSTM_hello.csv",3,"target") 
y_binary = to_categorical(y_) 

model = Sequential() 
model.add(LSTM(15, input_shape=(3,1),return_sequences=True)) 
model.add(LSTM(15,return_sequences=True)) 
model.add(LSTM(15, return_sequences=False)) 
model.add(Dense(2, activation='softmax', kernel_initializer='RandomUniform')) 

model.compile(optimizer='adam', 
       loss='categorical_crossentropy', 
       metrics=['acc']) 
model.fit(x_, y_binary, epochs=100) 
+0

사용중인 Keras 버전은 무엇입니까? 훈련 기록을 게시 할 수 있습니까? – nemo

+0

Keras 2.0.3을 사용합니다. – Manngo

답변

1

이에 대한 구체적인 대답을하기 어렵다 :

여기 내 전체 코드입니다. 신경 네트워크를 학습 할 때 가장 중요한 요소 중 하나는 선택한 최적화 알고리즘의 학습 속도입니다.

코드에는 구체적인 학습률이 설정되어 있지 않습니다. Keras 2.0.3의 Adam 기본 학습 속도는 0.001입니다. 아담 beta_2beta_1의 값이 통상 각각 0.9990.9의 기본값을 남겨

lr_t = lr * (sqrt(1. - beta_2**t)/(1. - beta_1**t)) . 

정의 초기 학습 레이트 (0.001)과 현재 시간 단계에 기초하여 동적 학습율 lr_t을 사용한다. 이 학습 속도를 플롯 경우에 당신은 이런 식의 사진을 얻을 :

Adam dynamic learning rate for epoch 1 to 22

그냥이 (아마도 글로벌) 최소 지역을 찾기 위해 가중치를 업데이트하는 스위트 스폿 (sweet spot)이라고 할 수 있습니다. 학습률이 너무 높으면 오류를 낮추는 영역을 건너 뛰기 만하면되지만, 학습률이 낮을수록 오류가 줄어들고 오류가 적은 영역을 찾을 수 있습니다.

SGD (Stochastic Gradient descent)와 같은 가정이 적은 최적화 도구를 사용하고 낮은 학습 속도를 사용하여이 가설을 테스트하는 것이 좋습니다.