这里我的想法就是先写一个回调函数读取每个batch中loss,然后读取History中存储的数值
这个方法很大众,不管可以读取loss,History中所有值都可以
每个batch记录损失函数(loss)
callbacks=[Mylosscallback(log_dir=’./tmp/log’)]
tensorboard 训练过工程可视化
tensorboard 查看训练过程
回调函数
keras.callbacks.Callback()
- log_dir: 用来保存被 TensorBoard 分析的日志文件的文件名。
- histogram_freq: 对于模型中各个层计算激活值和模型权重直方图的频率(训练轮数中)。 如果设置成 0 ,直方图不会被计算。对于直方图可视化的验证数据(或分离数据)一定要明确的指出。
- write_graph: 是否在 TensorBoard 中可视化图像。 如果 write_graph 被设置为 True。
- write_grads: 是否在 TensorBoard 中可视化梯度值直方图。 histogram_freq 必须要大于 0 。
- batch_size: 用以直方图计算的传入神经元网络输入批的大小。
- write_images: 是否在 TensorBoard 中将模型权重以图片可视化,如果设置为True,日志文件会变得非常大。
- embeddings_freq: 被选中的嵌入层会被保存的频率(在训练轮中)。
- embeddings_layer_names: 一个列表,会被监测层的名字。 如果是 None 或空列表,那么所有的嵌入层都会被监测。
- embeddings_metadata: 一个字典,对应层的名字到保存有这个嵌入层元数据文件的名字。 查看 详情 关于元数据的数据格式。 以防同样的元数据被用于所用的嵌入层,字符串可以被传入。
- embeddings_data: 要嵌入在 embeddings_layer_names 指定的层的数据。 Numpy 数组(如果模型有单个输入)或 Numpy 数组列表(如果模型有多个输入)。 Learn ore about embeddings。
- update_freq: ‘batch’ 或 ‘epoch’ 或 整数。当使用 ‘batch’ 时,在每个 batch 之后将损失和评估值写入到 TensorBoard 中。同样的情况应用到 ‘epoch’ 中。如果使用整数,例如 10000,这个回调会在每 10000 个样本之后将损失和评估值写入到 TensorBoard 中。注意,频繁地写入到 TensorBoard 会减缓你的训练。
编写自己的回调函数
on_epoch_begin # 在每轮开始时被调用
on_epoch_end # 在每轮结束时被调用
on_batch_begin # 在处理每个批量之前被调用
on_batch_end # 在处理每个批量之后被调用
on_train_begin # 在训练开始时被调用
on_train_end # 在训练结束时被调用
例子:在每轮结束后将模型每层激活保存到硬盘(格式为Numpy数组),这个激活是对验证集的第一个样本计算得到的
一点点小思考
其实不一定非要输出batch size用来更新参数,用时间也是一样的
利用时间记录模型
获取history中的东西
keras中的History对象