2017-10-17 10 views
1

단일 출력 회귀 모델을 구축하기 위해 노력하지만, 마지막 층에 문제가있을 것 같습니다오류 점검 대상 : 예상 time_distributed_5은 3 개 차원을 가지고 있지만 모양으로 배열을 가지고하는 (14724, 1)

inputs = Input(shape=(48, 1)) 
lstm = CuDNNLSTM(256,return_sequences=True)(inputs) 
lstm = Dropout(dropouts[0])(lstm) 

#aux_input 
auxiliary_inputs = Input(shape=(48, 7)) 
auxiliary_outputs = TimeDistributed(Dense(4))(auxiliary_inputs) 
auxiliary_outputs = TimeDistributed(Dense(7))(auxiliary_outputs) 

#concatenate 
output = keras.layers.concatenate([lstm, auxiliary_outputs]) 

output = TimeDistributed(Dense(64, activation='linear'))(output) 
output = TimeDistributed(Dense(64, activation='linear'))(output) 
output = TimeDistributed(Dense(1, activation='linear'))(output) 

model = Model(inputs=[inputs, auxiliary_inputs], outputs=[output]) 
내가 keras ... 새로운 오전

나는

ValueError: Error when checking target: expected time_distributed_5 to have 3 dimensions, but got array with shape (14724, 1)

답변

0

그래, 얘들 아, 내가 수정을 찾은 것 같아 - https://keras.io/layers/wrappers/에 따르면 우리는 타임 스텝마다 밀도가 높은 레이어를 적용한다고합니다 (제 경우에는 48 개의 타임 스텝이 있습니다). 그래서, 내 최종 층의 출력에 대해 아래 (BATCH_SIZE, 시간 단계, 측정) 될 것이다 :

output = TimeDistributed(Dense(1, activation='linear'))(output) 

될 것이다 따라서 치수 불일치 (48,1?).

output = Flatten()(output) 
output = (Dense(1, activation='linear'))(output) 

그래서 지금 timedistributed 층 49 평평 : 나는 하나의 회귀 출력이를 변환 할 경우, 우리는

그래서 난 그것을 해결하기 위해 다음 줄을 추가 한 최종 TimeDistributed 층을 평평하게해야합니다 최종 밀집 층에 대한 입력 (바이어스 입력과 같은 모양)을 단일 출력으로 만듭니다.

코드가 정상적으로 작동하고 적절한 결과가 표시됩니다 (모델에서 알 수 있음). 내 유일한 의심의 여지가 수학적으로 괜찮아요 TimeDistributed 레이어를 간단한 조밀 한 레이어로 위에서 설명한 것처럼 내 결과를 얻을 수 있습니까?

0

당신이 문제의 맥락에 더 제공 할 수있는 다음과 같은 오류는 무엇입니까? 데이터 또는 적어도 하나 이상의 코드를 테스트하십시오. 왜이 아키텍처를 처음부터 선택하고 있습니까? 더 단순한 아키텍처 (LSTM 만)가 그 트릭을 수행할까요? 너 뭐하니? 선형 활성화 함수가있는 여러 TimeDistributed Dense 레이어를 스택하면 아마도 모델에 많이 추가되지 않습니다.

+0

예, 아마도 맞을 것입니다. LSTM을 사용할 수는 있지만 만족스런 결과를 얻지 못합니다. lstm의 입력은 48 타임 스텝 시퀀스이며 다음 타임 스텝 (49 번째)을 예측하고 싶습니다. 각 시간 단계에는 보조 입력을 통해 추가 데이터 (48, 7) (7 개 기능)가 제공됩니다. lstm의 출력을 보조 출력과 연결하려고합니다. – mojo1643