2017-04-10 1 views
1

Keras를 사용하여 간단한 시계열 회귀 문제를 해결하고 있습니다. 지난 20 일 종가를 사용하여 다음 마감 가격을 예측하고 싶습니다. 몇 가지 예에 따르면 다음 코드가 있습니다. 내가 발견 : 나는 모델 작성자 기능과 원하는 맞춤 매개 변수를 통과하는 KerasRegressor 개체를 만들Python : Keras의 회귀 및 예측에 대한 교육을 수행합니다.

def modelcreator(): 
    model = Sequential() 
    model.add(Dense(500, input_shape = (20,),activation='relu')) 
    model.add(Dropout(0.25)) 
    model.add(Dense(250,activation='relu')) 
    model.add(Dense(1,activation='linear')) 

    model.compile(optimizer=optimizers.Adam(), 
       loss=losses.mean_squared_error) 

    return model 

:

"build_fn"매개 변수에 의해 필요에 따라

내가, 분리 된 함수 내 순차적 모델을 쓰기
estimator = KerasRegressor(build_fn=modelcreator,nb_epoch=100, batch_size=32) 

Epoch 1/10 
592/592 [==============================] - 0s - loss: 6.9555e-05  
Epoch 2/10 
592/592 [==============================] - 0s - loss: 1.2777e-05  
Epoch 3/10 
592/592 [==============================] - 0s - loss: 1.0596e-05  
Epoch 4/10 
592/592 [==============================] - 0s - loss: 8.8115e-06  
Epoch 5/10 
592/592 [==============================] - 0s - loss: 7.4438e-06  
Epoch 6/10 
592/592 [==============================] - 0s - loss: 8.4615e-06  
Epoch 7/10 
592/592 [==============================] - 0s - loss: 6.4859e-06  
Epoch 8/10 
592/592 [==============================] - 0s - loss: 6.9010e-06  
Epoch 9/10 
592/592 [==============================] - 0s - loss: 5.8951e-06  
Epoch 10/10 
592/592 [==============================] - 0s - loss: 7.2253e-06 

: nb_epoch = 100 내 모델이 10 시대에 대한 훈련 있지만, 표시 할

self.estimator.fit(X_train, Y_train) 

그리고 문제가 시작 :

나는 모델이 592 개 샘플로 KerasRegressor 개체 물마루 훈련 데이터 샘플을 사용하여 예측을 시도합니다.

prediction = self.estimator.predict(test) 

예상 값은 0.02-0.04 범위에 가깝습니다. 하지만 인쇄 할 때 나는 0.000980315962806344

Q1 : 어떻게 교육 에포크를 원하는 값으로 설정할 수 있습니까?

질문 2 : 내 NN을 사용하여 예상 검색어를 생성하려면 어떻게해야합니까?

답변

2

가장 먼저 Keras 2.0을 사용할 가능성이 높으며 해당 버전에서 nb_epochs 매개 변수의 이름이 epoch로 변경되었습니다.

두 번째로 입력 및 출력을 [0, 1] 범위로 정규화해야합니다. 정상화하지 않으면 작동하지 않습니다. 또한 정규화 된 출력과 네트워크 범위를 일치 시키려면 출력 레이어에서 시그 모이 드 활성화를 사용하는 것이 가장 좋습니다.

+0

nb_epochs를 다음과 같이 변경했습니다. 매력 ... 데이터 정보 : 내 입력과 출력은 이미 [0,1] 범위에 있습니다 활성화 기능에 대해 : 나는 그것을 변경했고 여전히 낮은 예측 결과를 얻었습니다 결과 : 0.003018886549398303 선형 활성화를 사용하여 내 첫 번째 시도보다 약 0.03 방법이 있지만 꽤 아직, 내 생각 엔 네트워크의 아키텍처에 문제가 있고 더 이상 구문 및 변수 이름에 문제가 없습니다 ... 도움을 주셔서 감사합니다. –

+0

@ AndrésRangel [0, 1]에 데이터가있을 수 있지만 [0, 1]의 전체 범위를 포괄해야하므로 교육에 도움이됩니다. –

1

네트워크가 수렴하지 않습니다. 매개 변수를 변경해보십시오. 손실은 지속적으로 감소해야합니다. 또한 매개 변수를 올바르게 초기화하십시오.

+0

변경해야 할 매개 변수는 무엇입니까? 동일한 프레임 워크를 사용하는 다른 신경망과 함께 작업 해왔고 손실 값이 각 반복마다 줄이거 나 적어도 수렴한다는 것을 이해하지만 단 10 번의 반복으로 손실 경향을 확인할 수는 없습니다 ... –

관련 문제