了解 TensorBoard(权重)直方图

2023-12-01

在 TensorBoard 中查看和理解标量值非常简单。然而,目前尚不清楚如何理解直方图。

例如,它们是我的网络权重的直方图。

enter image description here

(After fixing a bug thanks to sunside) enter image description here What is the best way to interpret these? Layer 1 weights look mostly flat, what does this mean?

我在这里添加了网络构建代码。

X = tf.placeholder(tf.float32, [None, input_size], name="input_x")
x_image = tf.reshape(X, [-1, 6, 10, 1])
tf.summary.image('input', x_image, 4)

# First layer of weights
with tf.name_scope("layer1"):
    W1 = tf.get_variable("W1", shape=[input_size, hidden_layer_neurons],
                         initializer=tf.contrib.layers.xavier_initializer())
    layer1 = tf.matmul(X, W1)
    layer1_act = tf.nn.tanh(layer1)
    tf.summary.histogram("weights", W1)
    tf.summary.histogram("layer", layer1)
    tf.summary.histogram("activations", layer1_act)

# Second layer of weights
with tf.name_scope("layer2"):
    W2 = tf.get_variable("W2", shape=[hidden_layer_neurons, hidden_layer_neurons],
                         initializer=tf.contrib.layers.xavier_initializer())
    layer2 = tf.matmul(layer1_act, W2)
    layer2_act = tf.nn.tanh(layer2)
    tf.summary.histogram("weights", W2)
    tf.summary.histogram("layer", layer2)
    tf.summary.histogram("activations", layer2_act)

# Third layer of weights
with tf.name_scope("layer3"):
    W3 = tf.get_variable("W3", shape=[hidden_layer_neurons, hidden_layer_neurons],
                         initializer=tf.contrib.layers.xavier_initializer())
    layer3 = tf.matmul(layer2_act, W3)
    layer3_act = tf.nn.tanh(layer3)

    tf.summary.histogram("weights", W3)
    tf.summary.histogram("layer", layer3)
    tf.summary.histogram("activations", layer3_act)

# Fourth layer of weights
with tf.name_scope("layer4"):
    W4 = tf.get_variable("W4", shape=[hidden_layer_neurons, output_size],
                         initializer=tf.contrib.layers.xavier_initializer())
    Qpred = tf.nn.softmax(tf.matmul(layer3_act, W4)) # Bug fixed: Qpred = tf.nn.softmax(tf.matmul(layer3, W4))
    tf.summary.histogram("weights", W4)
    tf.summary.histogram("Qpred", Qpred)

# We need to define the parts of the network needed for learning a policy
Y = tf.placeholder(tf.float32, [None, output_size], name="input_y")
advantages = tf.placeholder(tf.float32, name="reward_signal")

# Loss function
# Sum (Ai*logp(yi|xi))
log_lik = -Y * tf.log(Qpred)
loss = tf.reduce_mean(tf.reduce_sum(log_lik * advantages, axis=1))
tf.summary.scalar("Q", tf.reduce_mean(Qpred))
tf.summary.scalar("Y", tf.reduce_mean(Y))
tf.summary.scalar("log_likelihood", tf.reduce_mean(log_lik))
tf.summary.scalar("loss", loss)

# Learning
train = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss)

看起来网络在第一层到第三层中没有学到任何东西。最后一层确实发生了变化,因此这意味着梯度可能有问题(如果您手动篡改它们),您通过仅优化其权重来限制对最后一层的学习,或者实际上最后一层'吃掉所有错误。也可能只学到了偏见。虽然网络似乎学到了一些东西,但它可能没有充分发挥其潜力。这里需要更多的背景信息,但是调整学习率(例如使用较小的学习率)可能值得一试。

一般来说,直方图显示某个值相对于其他值出现的次数。简单来说,如果可能的值在一个范围内0..9你会看到金额激增10关于价值0,这意味着 10 个输入假设值0;相反,如果直方图显示稳定期1对于所有值0..9,这意味着对于 10 个输入,每个可能的值0..9 occurs exactly一次。 当您通过总和对所有直方图值进行归一化时,您还可以使用直方图来可视化概率分布;如果这样做,您将直观地获得某个值(在 x 轴上)出现的可能性(与其他输入相比)。

Now for layer1/weights,平台期意味着:

  • 大多数权重在-0.15到0.15范围内
  • 权重具有这些值中的任何一个的可能性(大部分)相同,即它们(几乎)均匀分布

换句话说,几乎相同数量的权重具有这些值-0.15, 0.0, 0.15以及介于两者之间的一切。有些权重的值稍小或稍高。 简而言之,这看起来就像使用均值和值范围为零的均匀分布来初始化权重-0.15..0.15...给予或索取。如果您确实使用统一初始化,那么当网络尚未经过训练时,这是典型的情况。

相比下,layer1/activations形成类似钟形曲线(高斯)的形状:在本例中,值以特定值为中心0,但它们也可能大于或小于该值(同样可能,因为它是对称的)。大多数值都接近平均值0,但值的范围确实是-0.8 to 0.8。 我假设layer1/activations被视为批次中所有层输出的分布。您可以看到这些值确实随着时间的推移而变化。

第 4 层直方图没有告诉我任何具体信息。从形状来看,它只是显示了一些重量值-0.1, 0.05 and 0.25发生的概率较高;一个原因could也就是说,每个神经元的不同部分实际上获取相同的信息并且基本上是冗余的。这可能意味着您实际上可以使用较小的网络,或者您的网络有可能学习更多的区别特征以防止过度拟合。但这些只是假设。

另外,正如下面的评论中已经指出的,请添加偏差单位。通过忽略它们,您将强制将您的网络限制为可能无效的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解 TensorBoard(权重)直方图 的相关文章

  • 打印出网络架构中每一层的形状

    在 Keras 中 我们可以如下定义网络 有什么办法可以输出每层之后的形状 例如 我想打印出以下形状inputs在定义行之后inputs 然后打印出形状conv1在定义行之后conv1 etc inputs Input 1 img rows
  • 如何使用 keras.backend.gradients() 获取梯度值

    我试图获得 Keras 模型的输出相对于模型输入 x 而不是权重 的导数 似乎最简单的方法是使用 keras backend 中的 梯度 它返回梯度张量 https keras io backend https keras io backe
  • 我的训练和验证代码(张量流)是否正确以及模型是否过度拟合?

    这是我的代码 for it in range EPOCH 24410 BATCH SIZE tr pa tr sp sess run tr para tr spec train loss sess run loss fw op feed d
  • 在 keras 中使用条件实现自定义损失函数

    我需要一些有关 keras 损失函数的帮助 我一直在使用 Tensorflow 后端在 keras 上实现自定义损失函数 我已经在 numpy 中实现了自定义损失函数 但如果它可以转换为 keras 损失函数 那就太好了 损失函数采用数据帧
  • 监控培训课程如何运作?

    我试图理解使用之间的区别tf Session and tf train MonitoredTrainingSession 以及我可能更喜欢其中之一 似乎当我使用后者时 我可以避免许多 杂务 例如初始化变量 启动队列运行程序或设置文件编写器以
  • Keras 中的条件批量归一化

    我正在尝试在 Keras 中实现条件批量标准化 我假设我必须创建一个自定义层 因此 我从正常化 https github com keras team keras blob master keras layers normalization
  • 如何访问 tf.layers.conv2d 中的内核变量?

    我想可视化卷积层中的权重以观察它们如何变化 但我找不到一种方法来访问卷积层中的权重tf layers conv2d 谢谢 您可以通过名称访问该变量 weights sess run
  • 如何在带有 LSTM 层的 TensorFlow Hub 中使用嵌入模型?

    我正在学习 TensorFlow 2 通过 TF Hub 教程进行文本分类 它使用了 TF hub 的嵌入模块 我想知道是否可以修改模型以包含 LSTM 层 这是我尝试过的 train data validation data test d
  • 如何使用 Keras 中的 Conv2D 在 5D 张量的最后三个维度上应用卷积?

    通常的输入张量Conv2DKeras 中是一个 4D 张量 其维度为batch size n n channel size 现在我有一个 5D 张量 其尺寸为batch size N n n channel size我想对中的每个 i 应用
  • 如何在nodejs(tensorflow.js)中训练模型?

    我想做一个图像分类器 但我不会python Tensorflow js 使用我熟悉的 javascript 可以用它来训练模型吗 训练步骤是什么 坦白说 我不知道从哪里开始 我唯一想到的是如何加载 mobilenet 它显然是一组预先训练的
  • Tensorflow GPU 设置:PyCharm 上的 CUDA 错误

    我在 Python3 MacOSX El Capitan 上安装了 TF 0 8 当为 TF 运行简单的测试代码时 我收到以下消息 ImportError dlopen Library Frameworks Python framework
  • Tensorflow图像读取空

    这个问题是基于 Tensorflow图像读取与显示 https stackoverflow com questions 33648322 tensorflow image reading display 根据他们的代码 我们得到以下内容 s
  • tf.gfile 在 TensorFlow 中起什么作用?

    我见过人们使用以下几个函数tf gfile例如tf gfile GFile or tf gfile Exists 我有一个想法tf gfile处理文件 但是 我无法找到官方文档来了解它还提供了什么 如果你能帮我的话那就太好了 对于登陆这里的
  • 使用 Keras 时,验证集中未见的类别会出现错误

    我有由数值变量和分类变量组成的数据 分类变量有很多类别 因此我使用嵌入来表示这些类别 我的模型是一个简单的神经网络 我知道当你定义嵌入层时你需要通过input dim number of categories 1为了解释训练中看不见的类别
  • Tensorflow新Op CUDA内核内存管理

    我已经使用 GPU CUDA 内核在 Tensorflow 中实现了一个相当复杂的新 Op 该操作需要大量动态内存分配 这些变量不是张量 并且在操作完成后被释放 更具体地说 它涉及使用哈希表 现在我正在使用cudaMalloc and cu
  • 如何强制tensorflow使用所有可用的GPU?

    我有一个 8 GPU 集群 当我运行Kaggle 的一段 Tensorflow 代码 https www kaggle com keegil keras u net starter lb 0 277 scriptVersionId 2164
  • 如何将两个 keras 模型连接成一个模型?

    假设我有一个 ResNet50 模型 我希望将该模型的输出层连接到 VGG 模型的输入层 这是 ResNet 模型和 ResNet50 的输出张量 img shape 164 164 3 resnet50 model ResNet50 in
  • Tensorflow 到 ONNX 的转换

    我目前正在尝试转换我使用本教程创建的已保存 且正在工作 的 pb 文件 https github com thtrieu darkflow https github com thtrieu darkflow 到 onnx 文件中 我目前正在
  • 交换keras中的张量轴

    我想将图像批次的张量轴从 batch size row col ch 交换为 批次大小 通道 行 列 在 numpy 中 这可以通过以下方式完成 X batch np moveaxis X batch 3 1 我该如何在 Keras 中做到
  • 如何在 Tensorflow Keras 中规范化我的图像数据

    如前所述 我正在尝试在训练模型之前标准化我的数据集 我正在使用tf keras preprocessing image ImageDataGenerator之前执行此操作 train data tf cast train data tf f

随机推荐

  • 圆形 UIButton

    我想知道是否可以绘制圆形 UIButton 不是圆角矩形 当我在自定义类型的 UIButton 中添加圆形图像时 它看起来像一个圆形按钮 但在单击按钮时 按钮的边界变得可见 因此它看起来像一个方形按钮 然后当单击结束时 它又看起来像一个圆形
  • Selenium 代理服务器参数 - 未知错误:net::ERR_TUNNEL_CONNECTION_FAILED

    希望你一切都好 我在尝试设置 chrome webdriver 时遇到了一些问题 我正在尝试更改网络驱动程序的参数以轮换用户代理和 IP 我将其用于抓取目的并且不想获得具有相同 IP 和 UA 的位置 当我通过 UA 参数时 一切正常 但是
  • 如何使div可拖动

    如何使元素可以在两个 div 之间拖动 这似乎是可拖动的应该做的事情 但我无法使用我拥有的代码 在这个 jsfiddle 中 我有两个带有可拖动元素的 div 我想让一个元素从第一个 div 转到第二个 div 许多网站上都必须存在该功能
  • jQuery DOM 对象的 x y 文档坐标

    我需要获取 DOM 元素的 X Y 坐标 相对于文档的顶部 左侧 我找不到任何可以为我提供这些的插件或 jQuery 属性或方法 我可以获得 DOM 元素的顶部和左侧 但这可以相对于其当前容器 父级或文档 你可以使用方面插件 已弃用 包含在
  • React Native {NativeModules} 未在 M1/Silicon mac 上导入 - 返回空对象 {}

    我试图在一个开发的项目中创建一个 React native 本机模块 BankedSdk M1MacBook 但是 任何初始化模块的尝试都会返回一个空对象 这是适用于我的示例 2020 存储库intel机器 https github com
  • Java 中的 PHP strtotime() ?

    我正在寻找一种简单的方法来从用户可能输入的任何类型的时间输入生成MySQL DATETIME PHP 的 strtotime 函数使这一切变得简单 它可以执行以下操作 strtotime 2004 02 12T15 19 21 00 00
  • Oracle:将字段标准化为 CSV 字符串

    我有一些一对多标准化数据 如下所示 a x a y a z b i b j b k 什么查询将返回数据 使得 多 端表示为 CSV 字符串 a x y z b i j k Mark 如果您使用的是版本 11gR2 而谁不是 那么您可以使用
  • 在VBA中重复随机变量

    如何使用 randomize 和 rnd 来获取随机变量的重复列表 通过重复列表 我的意思是 如果您运行循环来获取 10 个随机数 则列表中的每个随机数都将是唯一的 此外 如果再次运行该序列 您将获得与之前相同的 10 个随机数 来自微软自
  • Python 自定义比较器如何工作?

    我有以下 Python 字典 2 3 4 5 3 1 0 0 0 1 4 1 10 1 2 3 现在我想根据字典值的值之和对它们进行排序 因此对于第一个键 值之和为 3 4 5 12 我编写了以下代码来完成这项工作 def myCompar
  • Qt:制作不同颜色的堆叠条形图[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在尝试在 Qt 中制作一个时间线 其中不同的颜色代表不同的任务 最终 它应该看起来有点像这样 但只有一行 现在有人知道如何在不安装额外库的情况下仅使用 QPaint 来做到这一点
  • Matplotlib:使用 twinx 叠加时箱线图和条形图会发生变化

    当我创建条形图并使用 twin x 覆盖条形图时 与条形相比 框看起来向右移动了一位 这个问题之前已经被识别过 Python pandas 绘制如果孪生两个 y 轴则移动 x 轴 但该解决方案似乎不再有效 我使用的是Matplotlib 3
  • ““void (exeCallback::*)(int)”类型的值不能分配给“void (*)(int)”类型的实体”[重复]

    这个问题在这里已经有答案了 可能的重复 禁用 错误的函数转换 警告 我试图让我的大脑围绕 C 函数指针 为了保持我的学习经验基础 我创建了一个测试函数指针示例 最终 我想通过引用传递所有就绪的实例化对象 以便我可以回调该对象的方法 然而 为
  • 使用 AWK/Grep/Bash 从 HTML 中提取数据

    我正在尝试编写一个 Bash 脚本来从 HTML 页面中提取结果 我用Curl实现了获取页面内容 但下一步是解析输出 这是有问题的 该页面有趣的内容如下所示 div class result div class item div class
  • 如何修复使用 zxing 2.1 生成的不清晰的二维码图像?

    我使用zxing 2 1库生成了二维码图像 但图像非常模糊且不清晰 我可能哪里出错了 生成发生在较低级别 然后根据宽度和高度请求进行缩放 您可以请求生成更高的宽度和高度 ZXing 在查看器中公开了您可以设置的 BarcodeOptions
  • MySQL 按两个值排序

    简而言之 我有一个游戏 它的计分板显示了玩家最后的分数 他们花了多长时间才达到这个分数 我需要对 MySQL 结果进行排序 以便最快时间的最高分数排在第一位 最慢时间的最低分数排在最后 并且两者之间的所有内容都以相同的方式排名 但我不知道该
  • collectingAndThen方法足够高效吗?

    我最近开始使用collectingAndThen 发现与我用来执行类似任务的其他编码程序相比 它花费的时间有点长 这是我的代码 System out println CollectingAndThen Long t System curre
  • 分割逗号分隔的字符串,但忽略逗号后跟空格

    公共静态无效主 字符串 args String title Today and tomorrow 2 1 2 5 0 String titleSep title split System out println Arrays toStrin
  • 用户控件的数据上下文

    我正在创建一个UserControl我想用这样的东西
  • 如何防止在 boost::fast_pool_allocator 管理的对象上调用析构函数?

    我想利用以下广告功能boost fast pool allocator see Boost Pool 的 Boost 文档 例如 您可能会遇到这样的情况 您想要分配一个 一堆小物体在一个点上 然后到达你的一个点 不再需要它们的程序 使用池接
  • 了解 TensorBoard(权重)直方图

    在 TensorBoard 中查看和理解标量值非常简单 然而 目前尚不清楚如何理解直方图 例如 它们是我的网络权重的直方图 After fixing a bug thanks to sunside What is the best way