- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我基本上是在玩复制 AlphaZero。它适用于一些小型游戏,但我正在尝试将其扩展到更复杂的游戏。然而,现在我的网络经过 2-1000 万次移动训练后将充满 NaN。不幸的是,由于它的不确定性以及故障点发生的范围如此之广,使用调试器的效果并不理想。当我让 tfdbg 检查“has_inf_or_nan”时,训练 12000 个 Action 大约需要 5 分钟。所以调试器没有为我做任何事情,因为需要很长时间才能出现错误。
在这篇文章的最底部,我将描述该模型的外观。
以下是我如何使用 NaN 常见来源的某些内容:
损失函数(具有 2 个输出的单个网络:策略(选择一步的几率)和值(value)(活跃玩家的棋盘位置的质量):
注意:move_result_placeholder 填充了一批作为蒙特卡洛树搜索输出的移动。由于大多数移动位置都是无效的,因此通常充满 0 和 5-10,这些 float 表示选择该移动的几率。我有一个断言来验证它们的总和为 1。在运行训练时,我也有一个断言来验证所有输入都不为 NaN。在填充批处理时,我从最后 1,000,000 个(棋盘状态、移动、奖励)的集合中统一随机选择。然后我将棋盘状态、 Action 和奖励输入到训练步骤中。
self.loss_policy = tf.losses.softmax_cross_entropy(self.move_result_placeholder, out_dense)
self.loss_value =
tf.losses.mean_squared_error(self.value_result_placeholder,
tf.reshape(self.out_value_layer, shape=[-1,]))
self.total_loss = self.loss_policy + self.loss_value
优化器(学习率 1e-4):
self.train_step = tf.train.AdamOptimizer(learning_rate=self.learning_rate_placeholder).minimize(self.total_loss, name="optimizer")
Softmax:
self.out_policy_layer = tf.nn.softmax(out_dense, name="out_policy_layer")
批量归一化(is_training 是一个占位符,训练时为 1,玩游戏时为 0)batch_norm_decay 为 .999:
input_bn = tf.contrib.layers.batch_norm(input_conv, center=True, scale=True, is_training=self.is_training, decay=self._config.batch_norm_decay)
正则化(层规模中所有权重的 L2 为 1e-4):
initializer=tf.contrib.layers.xavier_initializer()
if use_regularizer:
regularizer = tf.contrib.layers.l2_regularizer(scale=self._config.l2_regularizer_scale)
weights = tf.get_variable(name, shape=shape, initializer=initializer, regularizer=regularizer)
型号说明:
该模型是在 tensorflow 中创建的,由一个 4x8x3(批量大小 1024)的输入层组成。这捕获了 4x8 棋盘的状态、自玩家得分以来已进行的步数以及在特定游戏中该棋盘状态出现的次数。其输入到内核大小为 3x3 且步幅 = 1 的 conv2d 层。然后,我应用 BatchNormalization tf.contrib.layers.batch_norm(input_conv, center=True,scale=True, is_training=self.is_training, Decay=self._config.batch_norm_decay)
和 relu。输入 relu 末尾的大小为 4x8x64。
之后还有 5 个残差 block 。在残差 block 之后,它分成两部分。第一个是策略网络输出,它通过另一个内核大小为 1x1、步幅为 1 的卷积层以及批量归一化和 ReLU 来运行它。此时它是 4x8x2,它被展平并穿过一个密集层,然后到 softmax 输出 256 个输出,这些输出代表它选择任何给定移动的可能性。 256 个输出映射到 4x8 棋盘,并带有棋子移动方向的平面。因此,第一个 4x8 会告诉您选择一 block 并将其向西北移动的几率。第二个会告诉你选择一 block 棋子并将其移动到东北等的几率。
分割的另一边是值输出。在这一侧,它经过一个卷积层,然后被展平,经过一个致密层,最后经过一个 TanH,因此它输出一个值,告诉我们该板状态的质量。
所有层的权重都使用 L2 正则化 (1e-4)。
损失是策略方面的交叉熵和值(value)方面的均方误差,我使用的是 Adam 优化器。
最佳答案
如果我是你,我会研究张量板的 tensorflow 调试器插件。您会发现使用这个工具,可以很容易地通过图表追踪问题。
您可以在图表中逐步进行计算,还可以跟踪弹出的 NaN 值的出现情况。
https://github.com/tensorflow/tensorboard/tree/master/tensorboard/plugins/debugger
关于python - Tensorflow 模型在训练期间充满 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49702179/
我有一个 Storm 拓扑,其中一个 bolt 应该与ElasticSearch交互。 public static Client client; public static Settings sett
我目前正在开发 LIMS。我需要检索与需要使用某种准备方法准备的实验室 sample 相关的信息。 (我对此进行了相当多的简化,因此对任何错误表示歉意。)我需要在查询结果中生成的列是: Sample
我必须以下文件夹结构: main - server -- server-module-1 --- a --- b --- c -- server-module-2 --- d --- e --- f
Tomcat 和我的自定义 JAAS LoginModule 运行良好,但每次我输入错误的凭据时,整个 LoginException 都会写入日志。根据定义,LoginModule 必须在身份验证失败
我一直在关注有关 iOS 开发的教程 - 特别是向下钻取 UITableViews。我建立了自己的自定义 plist,但我似乎无法让 DetailViewController 填充我的 plist 信
我对 QT 比较陌生。在我的代码中,我创建了一个 QTableWidget,遍历行并将单元格设置为 QLineEdits 和 QCheckBoxes。我想这样做,以便更改任何 QLineEdits 中
我刚开始使用 Chrome 的分析器。所以这可能是对我得到的结果的误解。 如果我打开 Chrome 分析器并拍摄以下网页的堆快照,我会注意到 obj3 的保留大小是 obj1 和 obj2 的保留大小
我正在尝试使用 Python 2.7 中的 BeautifulSoup 4 解析 youtube 评论。当我尝试播放任何 YouTube 视频时,我会收到充满 BOM 的文本,而不仅仅是在文件开头:
我有此消息的完整系统日志: mysqld[963]: 2016-10-23 20:54:14 140708269390592 [警告] 拒绝用户 ''@'localhost' 访问(使用密码:NO)
我有一个数组,里面装满了NSDictionaries。我想找到其中一本字典的 index,但我对这本字典的了解只是键 @"name"的 value。我该怎么做 ? 最佳答案 在 theArray 中查
我想在之前的div内容满了文字的时候显示div,然后继续用剩下的文字填充这个新的div。 我不知道怎么办。事实上,在下面的代码中我写道,div 是在单击按钮时显示的。我也无法设置上面解释的“填充操作”
这是发生了什么: 内部数据库内容:一个类有一个字符串属性,用于存储电话号码。这个数字是使用代码设置的 CFBridgingRelease(ABMultiValueCopyValueAtIndex(AB
我的 logcat 中收到了数千条以下警告消息,它挤掉了我实际要查找的消息: W/ActivityManager﹕ Wtf, activity ActivityRecord{4338cd90 u0 u
我尝试使用 mongoimport 在 mongodb 中导入单个 csv 文件,使用 mongoimport -d mydb -c things --type csv --file location
我的 Rails 开发日志中有大量这样的行: Started GET "/assets/services.css?body=1" for 127.0.0.1 at 2012-11-26 02:27:4
我在 Xcode 8/iOS 10/Swift 3 中遇到 Firebase 问题。试图让 Firebase Analytics 全部设置好。但是在 iOS10 中,控制台会记录来自 Firebase
我的 logcat 中充满了以下消息 - E/UsDebuggingManager( 476): java.io.IOException: Connection refused E/UsDebugg
总结 我有各种单节点 Kubernetes 集群,这些集群在累积约 300 个已完成的作业后变得不稳定。 例如,在一个集群中,有 303 个已完成的作业: root@xxxx:/home/xxxx#
我是一名优秀的程序员,十分优秀!