2

Keras를 사용하여 RNN을 구축했습니다. RNN은 회귀 문제를 해결하는 데 사용됩니다.Keras RNN 손실이 신기원 이상으로 감소하지 않습니다.

def RNN_keras(feat_num, timestep_num=100): 
    model = Sequential() 
    model.add(BatchNormalization(input_shape=(timestep_num, feat_num))) 
    model.add(LSTM(input_shape=(timestep_num, feat_num), output_dim=512, activation='relu', return_sequences=True)) 
    model.add(BatchNormalization()) 
    model.add(LSTM(output_dim=128, activation='relu', return_sequences=True)) 
    model.add(BatchNormalization()) 
    model.add(TimeDistributed(Dense(output_dim=1, activation='relu'))) # sequence labeling 

    rmsprop = RMSprop(lr=0.00001, rho=0.9, epsilon=1e-08) 
    model.compile(loss='mean_squared_error', 
        optimizer=rmsprop, 
        metrics=['mean_squared_error']) 
    return model 

전체 프로세스가 정상적으로 보입니다. 그러나 손실은 신기원들 사이에서 똑같이 유지됩니다.

61267 in the training set 
6808 in the test set 

Building training input vectors ... 
888 unique feature names 
The length of each vector will be 888 
Using TensorFlow backend. 

Build model... 

# Each batch has 1280 examples 
# The training data are shuffled at the beginning of each epoch. 

****** Iterating over each batch of the training data ****** 
Epoch 1/3 : Batch 1/48 | loss = 11011073.000000 | root_mean_squared_error = 3318.232910 
Epoch 1/3 : Batch 2/48 | loss = 620.271667 | root_mean_squared_error = 24.904161 
Epoch 1/3 : Batch 3/48 | loss = 620.068665 | root_mean_squared_error = 24.900017 
...... 
Epoch 1/3 : Batch 47/48 | loss = 618.046448 | root_mean_squared_error = 24.859678 
Epoch 1/3 : Batch 48/48 | loss = 652.977051 | root_mean_squared_error = 25.552946 
****** Epoch 1: RMSD(training) = 24.897174 

Epoch 2/3 : Batch 1/48 | loss = 607.372620 | root_mean_squared_error = 24.644049 
Epoch 2/3 : Batch 2/48 | loss = 599.667786 | root_mean_squared_error = 24.487448 
Epoch 2/3 : Batch 3/48 | loss = 621.368103 | root_mean_squared_error = 24.926300 
...... 
Epoch 2/3 : Batch 47/48 | loss = 620.133667 | root_mean_squared_error = 24.901398 
Epoch 2/3 : Batch 48/48 | loss = 639.971924 | root_mean_squared_error = 25.297264 
****** Epoch 2: RMSD(training) = 24.897174 

Epoch 3/3 : Batch 1/48 | loss = 651.519836 | root_mean_squared_error = 25.523636 
Epoch 3/3 : Batch 2/48 | loss = 673.582581 | root_mean_squared_error = 25.952084 
Epoch 3/3 : Batch 3/48 | loss = 613.930054 | root_mean_squared_error = 24.776562 
...... 
Epoch 3/3 : Batch 47/48 | loss = 624.460327 | root_mean_squared_error = 24.988203 
Epoch 3/3 : Batch 48/48 | loss = 629.544250 | root_mean_squared_error = 25.090448 
****** Epoch 3: RMSD(training) = 24.897174 

나는 정상이라고 생각하지 않습니다. 내가 놓친 게 있니?


UPDATE : 나는 모든 예측이 항상 0 모든 시대 이후를 것을 찾을 수 있습니다. 예측이 모두 동일하기 때문에 모든 RMSD가 모두 같은 이유입니다. 즉 0입니다. 나는 훈련 y를 확인했습니다. 단지 몇 개의 0 만 포함합니다. 데이터 불균형 때문이 아닙니다.

그래서 지금 내가 사용하고있는 레이어 및 활성화로 인해 생각하고 있습니다.

답변

0

RNN 기능이 정상인 것 같습니다.

손실 감소 속도는 최적화 및 학습 속도에 따라 다릅니다.

감쇠율 0.9을 어떻게 사용하고 있는지. 더 큰 학습 속도로 시도해보십시오. 0.9 속도로 어떻게 감소 할 것인가.

이 keras와 다른 최적화 가능한 다른 학습 속도와 다른 옵티 마이저를 사용 해보세요 : 어떤 일에 실패하면서 https://keras.io/optimizers/

많은 시간을 일부 최적화는 일부 데이터 세트에서 잘 작동합니다.

1

정품 인증 기능을 relu에서 softmax로 변경해 보셨습니까?

Relu 활성화는 발산하는 경향이있다. 그러나 고유 메트릭스로 가중치를 초기화하면 더 나은 수렴이 발생할 수 있습니다.

0

회귀 문제 (분류 제외)에 RNN을 사용하고 있으므로 마지막 레이어에서 '선형'활성화를 사용해야합니다. 코드에서

,

model.add(TimeDistributed(Dense(output_dim=1, activation='relu'))) # sequence labeling 

변화 activation='linear' 대신 'relu'합니다.

작동하지 않는 경우 두 번째 레이어에서 activation='relu'을 제거하십시오.

또한 rmsprop의 학습 속도는 일반적으로 0.1에서 0.0001까지입니다.

관련 문제