2017-09-06 1 views
0

무엇보다 이론적 인 질문이 많습니다. 마지막 레이어가 softmax이고 입력 레이어가 LSTM 인 바이너리 분류에서 거의 제로 크로스 엔트로피 손실이있는 경우 열차 세트의 정확도가 54 %를 넘는다는 것이 맞습니까? 나는 그것이 데이터를 초과 구현할 것이라고 추정했을 것입니다. 그런 낮은 손실이 있다면 고도의 정확성으로 극도로 과부하 기능을 갖게 될 것입니다.케라 (Kera) RNN에서 오류는 매우 낮지 만 정확도는 낮음

다른 학습 속도, 0.01, 0.001, 0.0001을 모두 똑같은 결과로 시도했습니다. 또한 첫 번째 LSTM 아래에 두 번째 LSTM 레이어를 추가하여 의도적으로 모델을 오버 파이팅하도록 모델 복잡성을 높이었지만 아무 것도하지 않았습니다.

내가 누락 된 이론적 개념은 무엇입니까?

model.add(LSTM(64, input_shape=(100000,26), return_sequences = True, activation = 'relu')) 
model.add(Dropout(0.3)) 
model.add(LSTM(32, return_sequences = True, activation = 'relu')) 
model.add(Dense(2)) 
model.add(Activation('softmax')) 
opt1 = keras.optimizers.RMSprop(lr=0.01, rho=0.9, epsilon=1e-08, decay=0.0) 
model.compile(loss='categorical_crossentropy', optimizer=opt1, metrics=['accuracy']) 

filepath="model_check-{epoch:02d}-{loss:.4f}.hdf5" 
checkpoint = ModelCheckpoint(filepath, monitor='loss', verbose=1, 
          save_best_only=True, mode='min') 
callbacks_list = [checkpoint] 

model.fit(df_matrix2, y_matrix2, epochs=5, batch_size=2, verbose=2) 

처음부터 행렬을 설정합니다. 다른 것들을 먼저 테스트 할 때 약간의 오버랩이 있습니다.

df_matrix = df_model.as_matrix() 
df_matrix = np.reshape(df_matrix,(-1,588425,26)) 
y_matrix = y.as_matrix() 
y_matrix = np.reshape(y_matrix,(-1,588425,1)) 
df_matrix2 = df_matrix[:,0:100000,:] 
df_matrix2 = np.reshape(df_matrix2, (-1,100000,26)) 
y_matrix2 = y_matrix[:,0:100000,:] 
y_matrix2 = np.reshape(y_matrix2,(-1,100000,1)) 
y_matrix2 = keras.utils.np_utils.to_categorical(y_matrix2,2) 
y_matrix2 = np.reshape(y_matrix2,(-1,100000,2)) 

이 주식 데이터이지만 그래서 나는 분류를 만들어 단지 0 또는 1이 60 분에서 높거나 낮은 여부에 따라. 그래서 우선 많은 무작위성이 있습니다. 나는 LSTM이 과장되어 높은 정확도를 얻을 것이라고 생각했습니다.

Epoch 1/5 
194s - loss: 0.0571 - acc: 0.5436 
Epoch 2/5 
193s - loss: 1.1921e-07 - acc: 0.5440 
Epoch 3/5 
192s - loss: 1.1921e-07 - acc: 0.5440 
Epoch 4/5 

이는 저의 손실과 정확성입니다.

+0

사실 내 데이터를 보았습니다. 0의 빈도가 0.54403이므로 매번 0을 예측할 수 있도록 훈련되었습니다. – a1letterword

+0

문제를 발견했다고 생각합니다. 나는 거의 충분한 신기원을 위해 그것을 훈련하지 않고 있었다. 입력 크기를 1000 timesteps로 줄이고 2000 개 에포크를 실행했을 때 나는 90 % 이상의 정확도 점수를 얻었습니다. – a1letterword

답변

0

50 %는 동전 던지기만큼 정확성이 없음을 의미합니다. 일반적으로 말하면 54 %의 정확성을 갖게되면 완전히 무작위 적입니다. 신경망을 가진 "동전 던지기"무작위성을 보는 것은 매우 어렵습니다. 그 곳이 4 %입니다. 최소한 Keras에서 Tensorflow 백엔드를 사용하면 이진 예측을 할 수 있습니다.

이 결과를 얻는 것은 모델이 작동하지 않음을 나타내는 명확한 지표입니다. 이에 대한 일반적인 이유 중 하나는 기능 (종속 변수 또는 결과 변수)입니다. 모델을 게시하고 데이터를 변형하는 데 사용하는 코드와 데이터의 머리 부분을 사람들이 쉽게 도울 수 있습니다.