2017-05-15 5 views
1

죄송합니다. RNN을 처음 사용합니다. TimeDistributed 레이어에서 this post을 읽었습니다.Keras의 LSTM에 대한 TimeDistributed 레이어 및 반환 시퀀스 등

나는 Kerac에 내 데이터를 재구성했습니다. [samples, time_steps, features] : [140*50*19] 즉, 데이터 포인트가 140 개이며, 각각 50 개의 타임 스텝과 19 개의 피쳐가 있습니다. 내 출력은 [140*50*1]입니다. 마지막 데이터 포인트의 정확성에 대해 더 신경을 썼습니다. 이것은 회귀 문제입니다.

내 현재 코드는 다음과 같습니다

  1. 내 경우는 다 대다, 그래서 return_sequences=True를 사용해야합니다 :

    x = Input((None, X_train.shape[-1]) , name='input') 
    lstm_kwargs = { 'dropout_W': 0.25, 'return_sequences': True, 'consume_less': 'gpu'} 
    lstm1 = LSTM(64, name='lstm1', **lstm_kwargs)(x) 
    output = Dense(1, activation='relu', name='output')(lstm1) 
    model = Model(input=x, output=output) 
    sgd = SGD(lr=0.00006, momentum=0.8, decay=0, nesterov=False) 
    optimizer = sgd 
    model.compile(optimizer=optimizer, loss='mean_squared_error') 
    

    내 질문은? 어쩌면 지난 시간 단계의 예측 만 필요하면 다 대일이 될 것입니다. 따라서 출력이 [140*1*1]이고 return_sequences=False이되어야합니까?

  2. many-to-many를 사용하면 마지막 시점 정확도를 향상시킬 수 있습니까? 나는 다른 점의 정확도보다 더 신경 써.
  3. 나는

    output = TimeDistributed(Dense(1, activation='relu'), name='output')(lstm1) 
    

    성능이 TimeDistributed 층을 사용하지 않고보다 더 나쁜 것으로 보인다 TimeDistributed 층을 사용하는 것을 시도했다. 이게 왜 그렇게?

  4. optimizer=RMSprop(lr=0.001)을 사용해 보았습니다. 나는이 NN을 안정화 시키기로되어 있다고 생각했습니다. 하지만 나는 결코 RMSprop을 사용하여 좋은 결과를 얻을 수 없었습니다.
  5. 에 대해 좋은 lr과 기세를 어떻게 선택합니까? 나는 다양한 조합을 수동으로 테스트 해왔다. 케라에 교차 검증 방법이 있습니까?
+0

왜 [140, 50, 19] 대신 [140 * 50 * 19]를 써야합니까? 모양이 실제로'[133000]입니까? – sietschie

+0

감사합니다. 나는 [140, 50, 19] – Echo

답변

1

그래서 :

  1. 예 - return_sequences=False는 출력 시퀀스 예측의 마지막 요소를 네트워크를합니다.
  2. Lambda 레이어를 사용하여 출력 분할을 정의 할 수 있습니다. Here이 작업을 수행하는 방법에 대한 예를 찾을 수 있습니다. 출력을 슬라이스하면 최종 타임 스텝의 값을 입력 할 추가 출력을 제공 할 수 있습니다.
  3. 계산 측면에서 볼 때이 두 가지 방법은 동일합니다. 문제는 가중치 샘플링에 의해 도입 된 임의성에있을 수 있습니다.
  4. 사실 - RNN의 첫 번째 선택 사항으로 RMSProp을 사용하는 것이 경험 법칙입니다. 일반적인 입증 된 법은 아닙니다. 또한 매개 변수를 변경하지 않는 것이 좋습니다. 그래서 이것은 문제를 일으킬 수 있습니다. 또 다른 한가지는 LSTM은 안정화하는데 많은 시간이 필요하다는 것입니다. 어쩌면 당신은 더 많은 신기원을 위해 그것을 남겨 둘 필요가있을 것입니다. 마지막으로, 데이터가 다른 활성화 기능을 선호 할 수 있습니다.
  5. keras.sklearnWrapper을 사용할 수 있습니다.