我试图在一张显卡上并行训练多个模型。为了实现这一点,我需要从保存的权重中恢复模型的训练,这不是问题。 model.fit()
方法甚至还有一个参数initial_epoch,它允许我告诉模型加载的模型在哪个时期。但是,当我将TensorBoard回调传递给fit()
方法以监控模型的训练时,在Tensorboard上所有数据都显示在x = 0上。
有没有办法克服这个问题,并在张量板上调整时代?
顺便说一句:我正在运行Keras 2.0.6和Tensorflow 1.3.0。
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))
在Tensorboard上生成的图形看起来像这样,这不是我希望的:
更新
将epochs=10
传递给第一个model.fit()
时,TensorBoard中会显示10个纪元的结果(参见图片)。
然而,当重新加载模型并运行它时(附带相同的回调),回调的on_epoch_end
方法永远不会被调用。
答案 0 :(得分:2)
事实证明,当我将剧集的数量传递给model.fit()以告诉它需要多长时间训练时,它必须是指定的initial_epoch的数字。所以如果initial_epoch = self.step_num那么,epochs = self.step_num + 10,如果我想训练10集。