2017-12-11 5 views
1

하나의 그래픽 카드에서 여러 모델을 병렬로 교육하려고합니다. 그것을 달성하기 위해 나는 문제가 아닌 저장된 무게로부터 모델의 훈련을 재개 할 필요가있다. model.fit() 메서드는로드 된 모델이 켜져있는시기를 모델에 알려주는 initial_epoch 매개 변수도 있습니다. 그러나 TensorBoard 콜백을 모델의 교육을 모니터링하기 위해 fit() 메서드로 전달하면 Tensorboard에서 모든 데이터가 x = 0에 표시됩니다.Keras의 TensorBoard 콜백이 initial_epoch 적합성을 준수하지 않습니까?

이것을 극복하고 tensorboard에서 신기원을 조정하는 방법이 있습니까?

그건 그렇고 : 나는 Keras 2.0.6 및 Tensorflow 1.3.0을 실행 중입니다.

는 Tensorboard의 결과 그래프하지 않은 다음과 같습니다
self.callbacks = [TensorBoardCallback(log_dir='./../logs/'+self.model_name, histogram_freq=0, write_graph=True, write_images=False, start_epoch=self.step_num)] 
self.model.fit(x=self.data['X_train'], y=self.data['y_train'], batch_size=self.input_params[-1]['batch_size'], epochs=1, validation_data=(self.data['X_test'], self.data['y_test']), verbose=verbose, callbacks=self.callbacks, shuffle=self.hyperparameters['shuffle_data'], initial_epoch=self.step_num) 
self.model.save_weights('./weights/%s.hdf5'%(self.model_name)) 
self.model.load_weights('./weights/%s.hdf5'%(self.model_name)) 
self.model.fit(x=self.data['X_train'], y=self.data['y_train'], batch_size=self.input_params[-1]['batch_size'], epochs=1, validation_data=(self.data['X_test'], self.data['y_test']), verbose=verbose, callbacks=self.callbacks, shuffle=self.hyperparameters['shuffle_data'], initial_epoch=self.step_num) 
self.model.save_weights('./weights/%s.hdf5'%(self.model_name)) 

무엇 내가 기대했다 : enter image description here

업데이트 :

model.fit() 10에 epochs=10 전달 에포크 결과가 TensorBoard에 표시됩니다 (그림 참조).

그러나 모델을 다시로드하고 동일한 콜백이 연결된 상태로 실행하면 on_epoch_end 콜백 메소드가 호출되지 않습니다.

enter image description here

+0

실행중인 케라의 버전은 무엇입니까? 나는 [master 's branch] (https://github.com/fchollet/keras/blob/master/keras/callbacks.py#L748)를보고 있으며 Tensorboard 콜백은 start_epoch 매개 변수가 아닙니다 (대신, 호출자에 의해'Tensorboard # on_epoch_end'에 전달됩니다. – ldavid

+0

Keras 2.0.6을 실행 중이지만 게시물에서 언급했듯이 initial_epoch 매개 변수는 콜백이 아니라 케라의 model.fit() 메소드 – Raspel

+1

에 전달됩니다. 나는'initial_epoch'가 적합하다는 것을 알고 있지만 코드 스 니펫의 첫 번째 줄은'self.callbacks = [TensorBoardCallback (... start_epoch = self.step_num)]'입니다. 이 병렬 교육에 대한 또 다른 질문 : – ldavid

답변

1

내가 에피소드의 수를 통과 할 때 model.fit 것을 밝혀() 훈련 할 시간을 이야기하기 위해서는 지정된 initial_epoch FROM 수 있어야한다. 그래서 initial_epoch = self.step_num이라면, epochs = self.step_num + 10, 10 개의 에피소드를 훈련시키고 싶을 때.