2016-09-19 7 views
1

나는 keras를 가진 nn를 train_on_batch 기능 훈련하는 것을 시도하고있다. 39 개 기능이 있고 32 개 샘플을 포함하는 배치가 필요합니다. 따라서 모든 교육 반복마다 32 개의 numpy 배열 목록이 있습니다. 그래서 여기훈련을위한 기능의 Keras 모양

내 코드입니다 (여기 모든 batch_x 32 NumPy와 배열의 목록이 각각 포함 39 개 기능입니다) :

input_shape = (39,) 

model = Sequential() 
model.add(Dense(39, input_shape=input_shape)) # show you is only first layer 
... 

for batch_x, batch_y in train_gen: 
    model.train_on_batch(batch_x, batch_y) 

는하지만 갑자기 오류가있어 : 난

Exception: Error when checking model input: the list of Numpy arrays 
that you are passing to your model is not the size the model expected. 
Expected to see 1 arrays but instead got the following list of 32 arrays: 

을 뭐가 잘못 됐는지 잘 모르겠다.

P. 나는 또한 (32, 39), (39, 32)와 같은 다른 input_shape을 시도했다.

답변

4

크기가 32 인 배열을 원하지 않는다. 하나의 크기 배열 (32, 39)을 원한다.

그래서 input_shape를 (None, 39)로 변경하고 None을 사용하면 batch_size를 동적으로 변경할 수 있고 batch_x를 모양이 매끄러운 배열 (32, 39)로 변경할 수 있습니다.

1

Keras의 경우 출력이이 아니고 입력 치수가 첫 번째 인수입니다. 그 예를 조정

model.add(Dense(output_dim=64, input_dim=100)) 

나는 당신의 요구 사항은 어떻게 됐을까 일치 : :이 Keras docs 프론트 페이지의 예는 매우 분명하다 코드에서

model.add(Dense(output_dim=39, input_dim=39)) 

, 당신의 Dense 레이어의 첫 번째 위치 인수는 39입니다 이는 예상대로 입력이 아닌 출력을으로 39-D로 설정합니다. 39 개의 입력 기능이 있다고하셨습니다. 첫 번째 레이어 (의도 한 것을 복제하려는 시도)는 39 차원 입력 기능 벡터에서 압축 또는 피쳐 추출을 수행하지 않습니다.

각 레이어에 대한 입력 및 출력 배열의 크기를 설정하고 (입력 예와 같이) 입력 _ 모양을 그대로두면 어떨까요? 기본 가정과 일치하도록 입력 (및 레이블)을 변경하면됩니까? 또한 입력 데이터 세트 (또는 그 중 일부)에서 기본 fit 메소드를 실행 한 다음, 이전처럼 일괄 처리를 수동으로 수행하는 것과 같은 더 복잡한 방법으로 이동해보십시오.

from keras.models import Sequential 
from keras.layers import Dense, Activation 
from keras.regularizers import l1l2 

X = np.random.randn(1000, 39) 
y = np.array([X[i,7:13].sum() for i in range(X.shape[0])]) 

nn = Sequential() 
nn.add(Dense(output_dim=1, input_dim=39)) 
nn.compile('sgd', 'mse') 
nn.fit(X, y, nb_epoch=10) 

제공 :

Epoch 1/10 
1000/1000 [==============================] - 0s - loss: 4.6266  
...  
Epoch 10/10 
1000/1000 [==============================] - 0s - loss: 1.4048e-04 
다음

는 기능 치수 장난감 문제에 대한 예입니다