- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当在训练过程中遇到困难时( nan
s 、 loss does not converge 等),有时通过设置 debug_info: true
查看更详细的训练日志会很有用。在 'solver.prototxt'
文件中。
训练日志看起来像这样:
I1109 ...] [Forward] Layer data, top blob data data: 0.343971
I1109 ...] [Forward] Layer conv1, top blob conv1 data: 0.0645037
I1109 ...] [Forward] Layer conv1, param blob 0 data: 0.00899114
I1109 ...] [Forward] Layer conv1, param blob 1 data: 0
I1109 ...] [Forward] Layer relu1, top blob conv1 data: 0.0337982
I1109 ...] [Forward] Layer conv2, top blob conv2 data: 0.0249297
I1109 ...] [Forward] Layer conv2, param blob 0 data: 0.00875855
I1109 ...] [Forward] Layer conv2, param blob 1 data: 0
I1109 ...] [Forward] Layer relu2, top blob conv2 data: 0.0128249
.
.
.
I1109 ...] [Forward] Layer fc1, top blob fc1 data: 0.00728743
I1109 ...] [Forward] Layer fc1, param blob 0 data: 0.00876866
I1109 ...] [Forward] Layer fc1, param blob 1 data: 0
I1109 ...] [Forward] Layer loss, top blob loss data: 2031.85
I1109 ...] [Backward] Layer loss, bottom blob fc1 diff: 0.124506
I1109 ...] [Backward] Layer fc1, bottom blob conv6 diff: 0.00107067
I1109 ...] [Backward] Layer fc1, param blob 0 diff: 0.483772
I1109 ...] [Backward] Layer fc1, param blob 1 diff: 4079.72
.
.
.
I1109 ...] [Backward] Layer conv2, bottom blob conv1 diff: 5.99449e-06
I1109 ...] [Backward] Layer conv2, param blob 0 diff: 0.00661093
I1109 ...] [Backward] Layer conv2, param blob 1 diff: 0.10995
I1109 ...] [Backward] Layer relu1, bottom blob conv1 diff: 2.87345e-06
I1109 ...] [Backward] Layer conv1, param blob 0 diff: 0.0220984
I1109 ...] [Backward] Layer conv1, param blob 1 diff: 0.0429201
E1109 ...] [Backward] All net params (data, diff): L1 norm = (2711.42, 7086.66); L2 norm = (6.11659, 4085.07)
这是什么意思?
最佳答案
乍一看,您可以看到此日志部分分为两部分:[Forward]
和[Backward]
。回想一下,神经网络训练是通过前向-后向传播完成的:
训练示例(批处理)被馈送到网络,前向传递输出当前预测。
根据该预测计算损失。然后导出损失,并使用chain rule估计梯度并向后传播。 .
咖啡 Blob
数据结构
只是快速回顾一下。 Caffe 使用Blob
存储数据/权重/参数等的数据结构。对于此讨论,重要的是要注意 Blob
有两个“部分”:data
和diff
。 Blob
的值存储在data
中部分。 diff
部分用于存储反向传播步骤的逐元素梯度。
前传
您将看到日志的这一部分中从下到上列出的所有层。对于每一层,您将看到:
I1109 ...] [Forward] Layer conv1, top blob conv1 data: 0.0645037
I1109 ...] [Forward] Layer conv1, param blob 0 data: 0.00899114
I1109 ...] [Forward] Layer conv1, param blob 1 data: 0
图层"conv1"
是一个具有 2 个参数 blob 的卷积层:滤波器和偏差。因此,日志有三行。过滤器 blob ( param blob 0
) 有 data
I1109 ...] [Forward] Layer conv1, param blob 0 data: 0.00899114
即当前卷积滤波器权重的L2范数为0.00899。
当前偏置( param blob 1
):
I1109 ...] [Forward] Layer conv1, param blob 1 data: 0
表示当前偏差设置为 0。
最后但并非最不重要的一点是,"conv1"
层有一个输出,"top"
命名"conv1"
(多么原始......)。输出的L2范数为
I1109 ...] [Forward] Layer conv1, top blob conv1 data: 0.0645037
请注意 [Forward]
的所有 L2 值通过报告data
相关 Blob 的一部分。
损失和梯度
结束[Forward]
通过损失层:
I1109 ...] [Forward] Layer loss, top blob loss data: 2031.85
I1109 ...] [Backward] Layer loss, bottom blob fc1 diff: 0.124506
在此示例中,批量损失为 2031.85,即损失相对于 2031.85 的梯度。 fc1
计算并传递给 diff
fc1
的一部分 Blob 。梯度的 L2 大小为 0.1245。
向后传递
所有其余层均在本部分中从上到下列出。您可以看到现在报告的 L2 震级为 diff
Blob 的一部分(参数和层的输入)。
终于
本次迭代的最后一个日志行:
[Backward] All net params (data, diff): L1 norm = (2711.42, 7086.66); L2 norm = (6.11659, 4085.07)
报告数据和梯度的总 L1 和 L2 大小。
我应该寻找什么?
如果您有 nan
s in your loss ,看看你的数据或差异在什么时候变成 nan
: 在哪一层?在哪一次迭代?
看看梯度大小,它们应该是合理的。如果您开始看到 e+8
的值你的数据/梯度开始爆炸。降低你的学习率!
请参阅 diff
s 不为零。零差异意味着没有梯度=没有更新=没有学习。如果您从随机权重开始,请考虑生成具有更高方差的随机权重。
寻找趋于零的激活(而不是梯度)。如果您使用 "ReLU"
这意味着您的输入/权重会将您引导至 ReLU 门“未激活”的区域,从而导致 "dead neurons" 。考虑将输入标准化为均值为零,添加 "BatchNorm"
图层,设置negative_slope
在 ReLU 中。
关于machine-learning - 如何用debug_info解释caffe日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40510706/
这是真的: log(A) + log(B) = log(A * B) [0] 这也是真的吗? O(log(A)) + O(log(B)) = O(log(A * B)) [1] 据我了解 O(f
0 引言 我常以为 配置 INFO 日志级别时, 应用程序代码中日志器(logger) debug 级的日志代码,不会被执行(比如,实验1中的printTestLog函数)。但今天线上的问题,
日志 日志是构建工具的主要界面。如果日志太多,真正的警告和问题容易被隐藏。另一方面,如果出了错,你需要找出相关的信息。Gradle 定义了6个日志级别,如表 18.1,“日志级别”所示。除了那些您通
日志 关键进程日志如下…(将 替换为启动服务的用户,将 替换为计算机名称) NameNode: $ HADOOP_HOME / logs / hadoop- -namenode- .log Da
我正在探索项目的 git 历史 FFMpeg .我在提交之间对每个文件执行了更改 517573a67088b5c7a25c18373434e3448892ee93和 80bb65fafab1d2f5f
我不知道如何在 loggly 中使用正则表达式进行搜索。例如,使用表达式 /24nonstop.+7554/ 记录我想查找的内容. { "level_name": "WARNING", "ex
有没有办法为 API 调用打开日志记录? 我们有一个第三方应用程序在使用我们的商店时遇到问题,希望获得一些调试信息。 ~我已经搜索了 bt 一无所获。 我正在使用 1.7 最佳答案 在一段受控的时间内
我正在尝试获取 SVN 中所有副本/移动/等的固定路径的日志历史记录(如果可能的话,递归地)。实际上,我试图避免 peg revisions ,并将日志应用于路径而不是对象。 svn 手册提出了这个问
如何在命令行中运行 NAnt 脚本并在日志文件中获取每个任务的时间? using nant task or NAnt -buildfile:testscript.build testnanttarg
是否有任何默认方式来记录哪些用户代理访问了您的服务器?我需要编制一份访问我们网站的浏览器列表,以便我们知道我们最能支持什么。 谢谢! 最佳答案 日志CGI.HTTP_USER_AGENT ,也许在 A
我在我的应用程序中使用 Spring 发送电子邮件。 我想在发送电子邮件时记录 imap 服务器操作。 我尝试按如下方式在我的 applicationContext.xml 中实现日志:
我已经运行一个 pod 一个多星期了,从开始到现在没有重启过。但是,我仍然无法查看自它启动以来的日志,它只提供最近两天的日志。容器是否有任何日志轮换策略以及如何根据大小或日期控制轮换? 我尝试了以下命
背景: 我正在设置我的第一个 flex 堆栈,尽管我将开始简单,但是我想确保我从良好的体系结构开始。我最终希望有以下解决方案:托管指标,服务器日志(expressjs APM),单页应用程序监视(AP
常规的 hg log 命令给出每个变更集至少 4 行的输出。例如 changeset: 238:03a214f2a1cf user: My Name date: Th
我在我的项目中使用 Spring iBatis 框架。然后使用 logback 进行记录。然后,在检查日志文件时,我可以看到系统正在使用的数据库...出于安全目的我想隐藏它 这是示例日志.. 12:2
我想使用 hg log 生成一个简短的变更日志,涵盖最新版本的变更。发行版标有“v”前缀,例如“v0.9.1”或“v1.0”。是否可以使用 revsets 选择以“v”开头的最后两个标签之间的范围,不
我是 PHP 的新手,所以如果有一个简单的答案,请原谅我。我在 stackoverflow 中搜索过任何类似的问题,但找不到任何帮助。 我正在开发一个现有的基于 php 的应用程序,我只需要能够将对象
我有一个名为 Radius 的程序可以验证用户登录。运行在CentOS服务器上 日志在/var/log/radius.log 中 它们如下 Mon Jul 24 22:17:08 2017 : Aut
我最近从使用“日志”切换到“日志”。 到目前为止,还不错,但我缺少一项关键功能——在运行时更改最低级别的能力。 在“logging',我可以调用 myLogger.setLevel(logging.I
假设我们有速度关键的系统(例如统计/分析、套接字编程等),我们如何设计跟踪和日志。 更具体地说,日志和跟踪通常会降低性能(即使我们有关闭机制或冗长的扩展机制)。在这种情况下,是否有任何关于如何“放置”
我是一名优秀的程序员,十分优秀!