Keras (Python)를 사용하여 LSTM-RNN에 대한 하이퍼 파라미터 검색


18

Keras RNN Tutorial : " RNN 은 까다 롭습니다. 배치 크기 선택이 중요하고, 손실 및 최적화 선택이 중요합니다. 일부 구성은 수렴되지 않습니다."

따라서 이것은 Keras에서 LSTM-RNN의 하이퍼 파라미터를 튜닝하는 것에 대한 일반적인 질문입니다. RNN에 가장 적합한 매개 변수를 찾는 방법에 대해 알고 싶습니다.

Keras 'Github 에서 IMDB 예제로 시작했습니다 .

기본 모델은 다음과 같습니다.

(X_train, y_train), (X_test, y_test) = imdb.load_data(nb_words=max_features,
                                                      test_split=0.2)

max_features = 20000
maxlen = 100  # cut texts after this number of words (among top max_features most common words)
batch_size = 32

model = Sequential()
model.add(Embedding(max_features, 128, input_length=maxlen))
model.add(LSTM(128))  
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))

# try using different optimizers and different optimizer configs
model.compile(loss='binary_crossentropy',
          optimizer='adam',
          class_mode="binary")

print("Train...")
model.fit(X_train, y_train, batch_size=batch_size, nb_epoch=3,
      validation_data=(X_test, y_test), show_accuracy=True)
score, acc = model.evaluate(X_test, y_test,
                        batch_size=batch_size,
                        show_accuracy=True)

print('Test accuracy:', acc)
Test accuracy:81.54321846

81.5는 공정한 점수이며 더 중요한 것은 모델이 완전히 최적화되지는 않았지만 작동한다는 것을 의미합니다.

내 데이터는 시계열이고 작업은 예제와 같은 이진 예측입니다. 이제 내 문제는 다음과 같습니다.

#Training Data
train = genfromtxt(os.getcwd() + "/Data/trainMatrix.csv", delimiter=',', skip_header=1)
validation = genfromtxt(os.getcwd() + "/Data/validationMatrix.csv", delimiter=',', skip_header=1)

#Targets
miniTrainTargets = [int(x) for x in genfromtxt(os.getcwd() + "/Data/trainTarget.csv", delimiter=',', skip_header=1)]
validationTargets = [int(x) for x in genfromtxt(os.getcwd() + "/Data/validationTarget.csv", delimiter=',', skip_header=1)]

#LSTM
model = Sequential()
model.add(Embedding(train.shape[0], 64, input_length=train.shape[1]))
model.add(LSTM(64)) 
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))

# try using different optimizers and different optimizer configs
model.compile(loss='binary_crossentropy',
          optimizer='adam',
          class_mode="binary")

model.fit(train, miniTrainTargets, batch_size=batch_size, nb_epoch=5,
      validation_data=(validation, validationTargets), show_accuracy=True)
valid_preds = model.predict_proba(validation, verbose=0)
roc = metrics.roc_auc_score(validationTargets, valid_preds)
print("ROC:", roc)
ROC:0.5006526

모델은 기본적으로 IMDB 모델과 동일합니다. 결과는 아무것도 배우지 않는다는 것을 의미합니다. 그러나 바닐라 MLP-NN을 사용할 때 동일한 문제가 없으며 모델이 배우고 점수가 증가합니다. 에포크 수를 늘리고 LTSM 단위 수를 줄이려고 시도했지만 점수는 증가하지 않습니다.

이론적으로 알고리즘이이 시계열 데이터에 대해 멀티 레이어 퍼셉트론 네트워크보다 성능이 우수해야하므로 네트워크 튜닝에 대한 표준 접근 방식을 알고 싶습니다.


1
얼마나 많은 데이터가 있습니까? 시퀀스 길이는 얼마입니까? LSTM은 많은 양의 데이터와 장기적인 종속성 문제에만 유용합니다.
pir

랜덤 검색 또는 베이지안 최적화는 하이퍼 파라미터를 찾는 표준 방법입니다. :)
pir

1
임베드 레이어가 필요합니까? 많은 시계열 데이터 셋에는 필요하지 않습니다.
pir

IMDB 예제보다 거의 100 만 개의 데이터 포인트와 2 배 많은 기능이 있으므로 이것이 문제라고 생각하지 않습니다. 임베드 레이어는 LSTM 레이어를 입력에 정확히 어떻게 연결합니까? 설명서 keras.io/layers/recurrent/#lstm 에 따르면 Keras 의 LSTM은 초기화, 활성화 및 output_dim 만 인수로 사용합니다. 그것이 오류의 원인이라면, 임베딩 레이어를 제거하는 방법을 설명하는 코드는 크게 감사하겠습니다.
wacax

내 대답을 참조하십시오. 임베드 레이어가 필요하지 않은 것 같습니다.
pir

답변:


5

임베드 레이어는 양의 정수 (인덱스)를 고정 된 크기의 밀도가 높은 벡터로 바꿉니다. 예를 들어 [[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]]. 이 표현 변환은 Keras의 임베드 레이어를 사용하여 자동으로 학습됩니다 ( 문서 참조 ).

그러나 데이터를 변환하는 데 포함 레이어가 필요하지 않은 것 같습니다. 불필요한 임베딩 레이어가 있으면 LSTM이 제대로 작동하지 않을 수 있습니다. 이 경우 포함 레이어를 제거하면됩니다.

그런 다음 네트워크의 첫 번째 계층에는 input_shape데이터의 차원에 대한 정보와 함께 인수가 추가 되어야 합니다 ( 참조 ). 이 인수는 모든 계층에 추가 할 수 있습니다. 특정 계층에 대한 설명서에는 포함되어 있지 않습니다.


그런데 하이퍼 파라미터는 종종 임의 검색 또는 베이지안 최적화를 사용하여 조정됩니다. RMSProp을 사용하여 배치 크기 (32, 64, 128, 256 및 512와 같은 크기), 그라디언트 클리핑 (0.1-10 간격) 및 드롭 아웃 (0.1-0.6 간격) 조정에 중점을 둡니다. 물론 세부 사항은 데이터 및 모델 아키텍처에 따라 다릅니다.


임베딩 레이어를 대체하기 위해 무엇을 제안합니까? 포함 레이어를 단순히 제거하려고 시도했지만 작동하지 않습니다.
wacax

1
다른 예를보십시오-예를 들어 밀도 층으로 직접 시작하십시오. input_shape 매개 변수를 설정해야합니다.
pir



2

Talos 는 바로 당신이 찾고있는 것입니다. Keras 모델의 하이퍼 파라미터 조합을 검색하기위한 자동화 된 솔루션. 필자는 저자로서 객관적이지 않을 수 있지만, Keras 기능을 완전히 공개하면서 가능한 가장 낮은 학습 곡선을 대안으로 제공하는 것이 목적이었습니다.

이미 언급 한대로 또는, 당신은으로 볼 수 Hyperas 후, 또는 SKlearn 또는 AutoKeras을 . 필자가 아는 한, 작성 당시 Keras 사용자를위한이 4 가지 옵션이 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.