2017-11-14 2 views
0

다음 모양의 신경망 입력을 공급하고 싶습니다. 각 교육 항목은 치수가 700x10 인 2D 배열입니다. 총 204 개의 교육 항목이 있습니다.사용자 지정 치수로 입력 텐서 흐름 또는 케라 신경망 입력

model = Sequential() 
model.add(Dense(300, activation='relu', input_shape=(700, 10))) 
model.add(Dense(1, activation='sigmoid')) 

그러나 그때 얻고 다음 오류 (제 층 input_shape 관련되지 : 라벨 I 시도

크기 204 (이진 출력)의 단지 1 차원 배열 단지 밀도 층을 사용 출력의 유효성 검사 도중) :

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

204 - 학습 데이터의 양.

스택 트레이스 :

그것은 교육 전에 확인하는 동안 실패 Keras 코드를 디버깅하는 동안 내가 발견 무엇

model.fit(xTrain, yTrain, epochs=4, batch_size=6) 
    File "keras\models.py", line 867, in fit 
    initial_epoch=initial_epoch) 
    File "keras\engine\training.py", line 1522, in fit 
    batch_size=batch_size) 
    File "keras\engine\training.py", line 1382, in _standardize_user_data 
    exception_prefix='target') 
    File "keras\engine\training.py", line 132, in _standardize_input_data 

. 출력 배열의 유효성을 검사합니다.

신경망 구조에 따르면, 첫 번째 밀도 레이어는 700, 1 차원 출력을 생성하며 이후 출력은 내 출력이 204 개의 1 차원 배열이기 때문에 실패합니다.

이 문제를 어떻게 극복합니까? 나는 Dense() 레이어 다음에 Flatten()을 추가하려고 시도했으나 잘못된 방법으로 정확도에 영향을 미쳤습니다. 700 개 배열의 한 점에 대한 정보를 그룹화하여 유지하려고합니다.

답변

3

Dense 레이어는 하나의 차원에서만 작동합니다.

(700,10)을 입력하는 경우 (700,units)을 출력합니다. 확인하려면 model.summary()을 확인하십시오.

간단한 해결책은 고밀도 적용하기 전에 데이터를 평평하게하는 것입니다

model.add(Flatten(input_shape=(700,10))) 
model.add(Dense(300,...)) 
model.add(Dense(1,...)) 

이 방법은 조밀 한 층이 간단한 (7000,) 입력을 볼 수 있습니다.


이제 모델이 2 차원을 개별적으로 이해하기를 원한다면 더 정교한 구조를 시도해야합니다. 수행 할 작업은 데이터가 무엇인지, 무엇을하고 싶은지, 모델이 모델을 이해하기를 원하는 방식 등에 달려 있습니다.

+0

좋습니다. model.summary() tip! 감사합니다. Keras에 대한 추가 조사를 시도 할 것이며 Keras가 더 철저하게 제공해야 할 것이 무엇입니까 – Twisty

+0

데이터를 설명해 주시겠습니까? 예를 들어 700 개의 벡터가 시간 단계 인 경우 GRU 및 LSTM과 같은 순환 네트워크를 사용할 수 있습니다. 물리적 길이라면 1D 컨볼 루션을 사용하는 것이 흥미로울 것입니다. –