首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Convnet训练错误没有减少

Convnet训练错误没有减少
EN

Data Science用户
提问于 2017-06-11 18:31:58
回答 1查看 1.8K关注 0票数 6

我正在训练一个复杂的神经网络来驾驶玩具车,不管我做了什么,训练的准确性不会超过30-35%,这是当convnet被随机初始化时的起点。奇怪的是,一个简单得多的模型,一个只有一个隐层,没有卷积的神经网络,做得更好,一直保持在65-75%的精度。我已经在这个项目上工作了一年多了,我觉得我已经尽了一切努力使convnet变得更好。我做错了什么?

备注:

  • Dataset包含15万条记录,但是由于我的视频提要每秒生成20帧,而且帧从第二帧到第二帧之间变化不大,所以它更像是15万/ 20 =7500个唯一记录。
  • 三个同等比例的班级:左转,直走,右转
  • convnet和简单NN都使用Tensorflow的AdamOptimizer。简单的网络在1e-5和1e-4上做得很好,但是convnet在任何值上都做得不好,我一直试过1e-2到1e-6。
  • 简单NN使用sigmoid激活函数,convnet是所有relu激活。
  • 两个模型读取相同的数据。我有一个在所有模型中共享的采样和数据增强类,所以我的数据并不坏,因为简单的网络在相同的输入上运行得很好
  • 在我看来,我的convnet甚至不适合训练数据,所以不是数据大小的问题。
  • 在这两种模式中,过度拟合似乎都不是问题:培训和验证集往往具有相似的性能,给予或接受5%。
  • 我使用initial = tf.truncated_normal(shape, stddev=0.1)初始化所有权重
  • 我使用initial = tf.constant(0.1, shape=shape)初始化所有偏差
  • 具体而言,卷积可能是问题所在,因为浅层单隐层convnet的性能很差,但是没有卷积的两个隐层完全连接的神经网络的准确率约为65%。

Convnet Notes (均产生相同的不良结果):

  • 批归一化
  • 最大池
  • 50%的退出概率
  • 不同步幅
  • 不同深度的层:我尝试了2-5个修道院层,多个2-4个完全连接的层。我只有3层和9层。Convnet层有32到64个神经元,完全连接的层有32到512个神经元。
  • 3D卷积(占用了太多内存,导致GPU崩溃)
  • 1x1卷积
  • 有一件事我没有尝试过,那就是转移学习,我只希望把它作为最后的手段,因为简单的网络很好

代码:

EN

回答 1

Data Science用户

回答已采纳

发布于 2017-06-18 15:48:37

在convnet代码中,手动计算交叉熵:

代码语言:javascript
复制
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y_conv), reduction_indices=[1]))
train_step = tf.train.AdamOptimizer(1e-5).minimize(cross_entropy)

如果你这样做,你可能会遇到数值稳定性问题。相反,您应该使用

代码语言:javascript
复制
tf.nn.softmax_cross_entropy_with_logits()

如果使用tensorflow版本1.8或更高版本,请使用

代码语言:javascript
复制
tf.nn.softmax_cross_entropy_with_logits_v2()

为tensorflow的API而哭泣。

有关更多信息,请参见此问题:https://github.com/tensorflow/tensorflow/issues/2462

票数 7
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/19630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档