tensorboard 平滑损失曲线代码

tensorboard 平滑损失曲线代码

标签(空格分隔): tensorflow 源码


咱们写论文,或者工作汇报的时候,希望展现非常漂亮的深度学习损失函数曲线图

在tensorflow中集成了很实用的tensorboard可视化工具,能够实时观测训练过程中的损失函数曲线图,以及建立的图模型,甚至在tensorboard可以可视化一些图像的分割或者分类结果,非常方面。但是,深度学习往往需要迭代很多次而且有时候会做数据扩充,导致损失函数浮动很大,比如说如下图所示曲线。

image_1cdp09ggc1s2l1f9f1b5todgi969.png-252.9kB

当然,tensorboard提供了我们平滑参数(Smoothing)如下图所示。

image_1cdp0blb918ao1qcu25lv0b15sdm.png-302.5kB

我们可以调节toolbar,可以画出非常漂亮的曲线下降或者上升曲线图。
image_1cdp0g84l4f61g8g181p1qg8cfi9.png-201.5kB
image_1cdp0ii8krrfpjv1opp16ot6b7m.png-157.7kB

怎么样是不是非常漂亮的训练图呢?但是,有个问题是,我们想通过orignal等专业的画图软件,画出非常完美的曲线图,这样可以放在paper和工作汇报上面。

tensorboard提供了下载借口,可以下载没有经过平滑后的数据,但是之前说了,没有平滑的曲线非常的不好看,现在我们需要做的是将下载下来的原始数据在本地进行平滑。笔者自己写了一个简单的平滑代码

import pandas as pd
import numpy as np
import os
def smooth(csv_path,weight=0.85):
    data = pd.read_csv(filepath_or_buffer=csv_path,header=0,names=['Step','Value'],dtype={'Step':np.int,'Value':np.float})
    scalar = data['Value'].values
    last = scalar[0]
    smoothed = []
    for point in scalar:
        smoothed_val = last * weight + (1 - weight) * point
        smoothed.append(smoothed_val)
        last = smoothed_val


    save = pd.DataFrame({'Step':data['Step'].values,'Value':smoothed})
    save.to_csv('smooth_'+csv_path)


if __name__=='__main__':
    smooth('test.csv')

测试:
tensorboard:

image_1cdp1alu8e7ns91ie81h556mn2j.png-165.9kB

本地平滑:

image_1cdp1c6n9158f17cjlkqvc51ar730.png-99.8kB

### 如何在 TensorBoard 中可视化或配置损失函数 #### 配置损失函数的日志记录 为了能够在 TensorBoard 中查看损失函数的变化情况,在训练过程中需要定期将损失值写入日志文件。对于 TensorFlow 来说,这通常通过 `tf.summary` API 实现[^1]。 ```python import tensorflow as tf log_dir = 'path/to/logs/' # 日志目录位置 writer = tf.summary.create_file_writer(log_dir) with writer.as_default(): for epoch in range(num_epochs): loss_value, grads = compute_loss_and_gradients() optimizer.apply_gradients(zip(grads, model.trainable_variables)) tf.summary.scalar('loss', loss_value, step=epoch) ``` 这段代码展示了如何创建一个 SummaryWriter 并将其默认作用域设置为当前上下文中,从而使得所有的 summary 调用都会被自动关联到这个 writer 上。每当完成一次迭代更新后,就调用 `tf.summary.scalar()` 方法来记录下该次迭代中的损失值以及对应的步数(即轮次数)。这样做的目的是为了让 TensorBoard 可以读取这些信息并绘制出随时间变化的趋势图[^2]。 #### 启动 TensorBoard 查看损失曲线 一旦完成了上述操作并将日志保存到了指定路径,则可以启动 TensorBoard 进行查看: ```bash # 假设 Python 环境位于 D:\MiniConda3\envs\tf\ D:\MiniConda3\envs\tf\Scripts\tensorboard --logdir=path/to/logs/ ``` 打开浏览器输入 http://localhost:6006 即可浏览包括损失在内的各种指标图表。这里假设本地运行,默认情况下 TensorBoard 将监听 6006 端口;如果指定了其他端口则需相应调整 URL 地址[^4]。 #### 损失函数的具体展示形式 当访问 TensorBoard 的时候,选择Scalars标签页就可以看到之前定义好的损失名称所对应的数据序列。每条线代表了一个特定类型的度量标准随着时间推移的表现状况。用户能够直观地观察到算法收敛的速度、是否存在过拟合等问题,进而帮助优化超参数的选择和改进网络架构设计[^3]。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值