助力软件开发企业降本增效 PHP / java源码系统,只需一次付费,代码终身使用! 广告
`keras.callbacks.Callback` ~~~ on_epoch_begin #在每轮开始时被调用 on_epoch_end #在每轮结束时被调用   on_batch_begin #在处理每个批量之前被调用 on_batch_end #在处理每个批量之后被调用   on_train_begin #在训练开始时被调用 on_train_end #在训练结束时被调用 ~~~ 调函数中,那么可以编写你自己的回调函数。回调函数的实现方式是创建`keras.callbacks.Callback`类的子类。然后你可以实现下面这些方法(从名称中即可看出这些方法的作用),它们分别在训练过程中的不同时间点被调用。 ~~~ on_epoch_begin ←------ 在每轮开始时被调用 on_epoch_end ←------ 在每轮结束时被调用   on_batch_begin ←------ 在处理每个批量之前被调用 on_batch_end ←------ 在处理每个批量之后被调用   on_train_begin ←------ 在训练开始时被调用 on_train_end ←------ 在训练结束时被调用 ~~~ 这些方法被调用时都有一个`logs`参数,这个参数是一个字典,里面包含前一个批量、前一个轮次或前一次训练的信息,即训练指标和验证指标等。此外,回调函数还可以访问下列属性。 * `self.model`:调用回调函数的模型实例。 * `self.validation_data`:传入`fit`作为验证数据的值。 下面是一个自定义回调函数的简单示例,它可以在每轮结束后将模型每层的激活保存到硬盘(格式为 Numpy 数组),这个激活是对验证集的第一个样本计算得到的。 ~~~ import keras import numpy as np class ActivationLogger(keras.callbacks.Callback): def set_model(self, model): self.model = model #在训练之前由父模型调用,告诉回调函数是哪个模型在调用它 layer_outputs = [layer.output for layer in model.layers] self.activations_model = keras.models.Model(model.input, layer_outputs) #模型实例,返回每层的激活 def on_epoch_end(self, epoch, logs=None): if self.validation_data is None: raise RuntimeError('Requires validation_data.') validation_sample = self.validation_data[0][0:1] #获取验证数据的第一个输入样本 activations = self.activations_model.predict(validation_sample) f = open('activations_at_epoch_' + str(epoch) + '.npz', 'w') #(以下3行)将数组保存到硬盘 np.savez(f, activations) f.close() ~~~