2017-12-14 14 views
0

tensorflow 백엔드가있는 Keras를 사용하여 자동 인코딩을 시도하고 있습니다. 특히, n_components (즉, 200) 개의 샘플링 된 n_times (즉, 20000)의 벡터 데이터를 가지고 있습니다. 시간 t를 훈련 할 때 나는 그것을 시간 t와 만 비교하는 것이 중요합니다. 그것은 샘플링 시간을 뒤섞고있는 것으로 보입니다. 나는 병목 현상을 제거하고 네트워크가 n_components를 예측하는 것이 좋지 않다는 것을 알았습니다. 대신 각 구성 요소에 의해 조정 된 입력의 평균과 비슷한 것을 나타냅니다. 내가 행동, n_times의 두 번째 구성 요소를 셔플하고, model.fit (act.T, act_shuffled.T)로 전달 테스트 한병목 현상이없는 Keras autoencoder가 원본 데이터를 반환하지 않습니다.

model = keras.models.Sequential() 

# Make a 7-layer autoencoder network 
model.add(keras.layers.Dense(n_components, activation='relu', input_shape=(n_components,))) 
model.add(keras.layers.Dense(n_components, activation='relu')) 
# model.add(keras.layers.Dense(50, activation='relu')) 
# model.add(keras.layers.Dense(3, activation='relu')) 
# model.add(keras.layers.Dense(50, activation='relu')) 
model.add(keras.layers.Dense(n_components, activation='relu')) 
model.add(keras.layers.Dense(n_components, activation='relu')) 

model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['accuracy']) 

# act is a numpy matrix of size (n_components, n_times) 
model.fit(act.T, act.T, epochs=15, batch_size=100, shuffle=False) 
newact = model.predict(act.T).T 

과 : 여기

병목 내 네트워크는 주석 model.fit (act.T, act.T)와의 차이점을 확인하십시오. 내가 뭔가 잘못하고 있는거야? 특정 시간부터 배우기 위해 어떻게 강제 할 수 있습니까?

많은 감사, 아서

답변

0

나는이 문제를 해결했다고 생각하지만, Keras의 지식이 사용자는 저를 정정 할 수 있습니다. 나는 fit의 인수 batch_size에 대해 여러 가지 다른 값을 시도했지만 값 1을 시도하지 않았습니다. 값을 1로 변경하면 입력 데이터를 재현 할 수 있습니다.

shuffle을 False로 설정하더라도 배치 크기는 자동 입력기가 관련없는 입력 시간에 맞춰 하나의 입력 시간을 조정할 수 있다고 생각합니다.

model.fit(act.T, act.T, epochs=15, batch_size=1, shuffle=False) 
:

그래서, 난 내 코드를 ammended 한