【tensorflow入门】11、tensorboard可视化--绘制直方图histogram+标量信息scalas

本文介绍了在TensorFlow中使用TensorBoard进行直方图和标量信息的可视化过程中遇到的问题及解决办法,包括函数更新、图形冲突和显示异常。关键代码展示了如何创建scalar和histogram,并使用`tf.summary.merge_all()`和`tf.summary.FileWriter`进行数据写入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文为tensorboard的进一步使用,tensorboard的安装及最初使用方法见【tensorflow入门】10、可视化--Tensorboard的安装、使用、排雷

代码见文章最后。

一、踩雷!

本人跟着莫烦教程学习,莫烦教程视频中的tensorflow代码现在已不适用,我改了好久!

1、几个函数更新:

  • tf.train.SummaryWriter         改为:tf.summary.FileWriter
  • tf.merge_all_summaries()    改为:summary_op = tf.summary.merge_all()
  • tf.histogram_summary()       改为:tf.summary.histogram()
  • tf.scalar_summary()              改为:tf.summary.scalar()

否则会报错!

2、tensorboard的图好像每次只能使用一个,不然会报奇怪的错误:

错误特别长,报错的具体内容:

InvalidArgumentError: You must feed a value for placeholder tensor 'inputs/x_input' with dtype f
<think>嗯,用户让我示范如何使用TensorBoardTensorFlow架构下可视化Swin-Transformer模型训练过程中的权重分布。首先,我需要确认用户对Swin-Transformer和TensorBoard的了解程度。可能用户已经有一定的模型训练经验,但不太清楚如何集成可视化部分。 首先,我应该回忆一下Swin-Transformer的结构。Swin-Transformer通常包含多个块,每个块里有窗口多头自注意力和MLP层。每个层都有相应的权重,比如查询、键、值的矩阵,还有MLP中的全连接权重。这些权重需要被记录下来,才能在TensorBoard中查看它们的分布。 接下来,TensorBoard的权重分布通常通过tf.summary.histogram来实现。所以,用户需要在训练循环中,在每个步骤或每个epoch结束时,记录各个层的权重。但具体如何将这些钩子函数集成到模型中呢?特别是如果用户使用的是自定义模型或Keras API,可能需要重写call方法,或者在模型构建时添加跟踪权重的逻辑。 然后,用户可能需要一个完整的步骤示例,包括模型构建、回调函数的设置、训练循环以及启动TensorBoard的命令。需要注意的是,如果用户使用的是TensorFlow 2.x,那么他们可能更倾向于使用Keras的高层API,所以示例代码需要符合这种风格。 另外,要考虑到Swin-Transformer的实现可能有不同的变体,用户可能使用的是第三方库或者自己实现的模型。因此,示例代码需要足够通用,或者指导用户如何根据他们的模型结构添加跟踪代码。 可能遇到的问题包括:如何访问模型中的各个层,特别是如果模型有嵌套结构(比如多个Swin块,每个块里又有多个子层)。这时候可能需要递归遍历模型的所有层,找到特定的层类型(比如Dense或Conv2D),然后记录它们的权重。 还要提醒用户,记录所有层的权重可能会增加计算和存储的开销,尤其是在模型很大时。因此,可能需要根据实际情况调整记录的频率,比如每个epoch而不是每个batch。 最后,确保示例代码中的路径正确,用户需要知道如何指定日志目录,并在训练后启动TensorBoard服务。可能还需要解释TensorBoard中如何查看直方图,并解读分布的变化,比如权重是否出现梯度消失或爆炸的情况。</think>以下是在TensorFlow中使用TensorBoard可视化Swin-Transformer权重分布的示范步骤: $$ \begin{aligned} &\text{Swin-Transformer权重直方图记录流程} \\ &1.\text{ 模型构建} \rightarrow 2.\text{ 回调函数配置} \rightarrow 3.\text{ 训练循环} \rightarrow 4.\text{ 可视化分析} \end{aligned} $$ --- **步骤1:模型构建(含权重跟踪)** ```python import tensorflow as tf from tensorflow.keras.layers import Layer class SwinBlock(Layer): def __init__(self, **kwargs): super().__init__(**kwargs) # 窗口多头注意力层 self.w_msa = tf.keras.layers.MultiHeadAttention( num_heads=4, key_dim=64) # MLP层 self.mlp = tf.keras.Sequential([ tf.keras.layers.Dense(256, activation='gelu'), tf.keras.layers.Dense(64) ]) def call(self, inputs): # 前向传播时记录权重 for w in self.w_msa.weights: # 记录注意力权重 tf.summary.histogram(f"{self.name}/W-MSA/{w.name}", w) for w in self.mlp.weights: # 记录MLP权重 tf.summary.histogram(f"{self.name}/MLP/{w.name}", w) return self.mlp(self.w_msa(inputs, inputs)) ``` --- **步骤2:配置回调函数** ```python log_dir = "logs/swin_weights" # 创建TensorBoard回调 tb_callback = tf.keras.callbacks.TensorBoard( log_dir=log_dir, histogram_freq=1, # 每个epoch记录直方图 update_freq='epoch' ) ``` --- **步骤3:模型训练** ```python # 构建示例模型 model = tf.keras.Sequential([ SwinBlock(name='swin_block1'), SwinBlock(name='swin_block2') ]) model.compile(optimizer='adam', loss='mse') # 假设有虚拟训练数据 X_train = tf.random.normal((100, 64)) y_train = tf.random.normal((100, 64)) # 开始训练并记录 model.fit(X_train, y_train, epochs=5, callbacks=[tb_callback]) ``` --- **步骤4:启动TensorBoard** ```bash tensorboard --logdir logs/swin_weights ``` --- **可视化分析要点:** 1. 访问 `http://localhost:6006` 查看直方图 2. 在`HISTOGRAMS`标签页中: - 检查权重分布是否呈现钟型(理想情况) - 监测梯度消失/爆炸(分布极端偏移) - 对比不同层权重范围差异 3. 典型权重分布示例: $$ \text{理想分布:} \mathcal{N}(\mu \approx 0, \sigma \approx 0.05) $$ $$ \text{梯度爆炸:} \mathcal{N}(\mu=1.2, \sigma=3.8) $$ --- **注意事项:** 1. 对于大型模型,建议设置`histogram_freq`为较大的间隔值 2. 使用`layer.name`确保权重标签唯一性 3. 可结合`tf.summary.scalar`记录标量统计量(均值/方差)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值