首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >训练精度提高,测试精度稳定。

训练精度提高,测试精度稳定。
EN

Stack Overflow用户
提问于 2017-09-14 10:44:24
回答 1查看 1.9K关注 0票数 2

文章中训练卷积神经网络时,当测试集的精度稳定时,训练集的精度提高了很多。

下面是一个有6400个训练示例的示例,在每个时代随机选择(因此在前几个时期可能会看到一些示例,有些可能是新的),以及6400 相同的测试示例。

对于较大的数据集(64000或100000个训练例子),训练精度的提高更为突然,在第三个时代达到98。

我也尝试使用--同样的6400个训练例子--每个时代都有,只是随机地混在一起。正如预期的那样,结果更糟。

代码语言:javascript
复制
epoch 3  loss 0.54871 acc 79.01 
learning rate 0.1
nr_test_examples 6400    
TEST epoch 3  loss 0.60812 acc 68.48 
nr_training_examples 6400
tb 91
epoch 4  loss 0.51283 acc 83.52 
learning rate 0.1
nr_test_examples 6400
TEST epoch 4  loss 0.60494 acc 68.68 
nr_training_examples 6400
tb 91
epoch 5  loss 0.47531 acc 86.91 
learning rate 0.05
nr_test_examples 6400
TEST epoch 5  loss 0.59846 acc 68.98 
nr_training_examples 6400
tb 91
epoch 6  loss 0.42325 acc 92.17 
learning rate 0.05
nr_test_examples 6400
TEST epoch 6  loss 0.60667 acc 68.10 
nr_training_examples 6400
tb 91
epoch 7  loss 0.38460 acc 95.84 
learning rate 0.05
nr_test_examples 6400
TEST epoch 7  loss 0.59695 acc 69.92 
nr_training_examples 6400
tb 91
epoch 8  loss 0.35238 acc 97.58 
learning rate 0.05
nr_test_examples 6400
TEST epoch 8  loss 0.60952 acc 68.21

这是我的模型(每次卷积后使用RELU激活):

代码语言:javascript
复制
conv 5x5 (1, 64)
max-pooling 2x2
dropout
conv 3x3 (64, 128)
max-pooling 2x2
dropout
conv 3x3 (128, 256)
max-pooling 2x2
dropout
conv 3x3 (256, 128)
dropout
fully_connected(18*18*128, 128)
dropout
output(128, 128)

可能是什么原因?

我使用动量优化器和学习速率衰减:

代码语言:javascript
复制
    batch = tf.Variable(0, trainable=False)

    train_size = 6400

    learning_rate = tf.train.exponential_decay(
      0.1,                # Base learning rate.
      batch * batch_size,  # Current index into the dataset.
      train_size*5,          # Decay step.
      0.5,                # Decay rate.
      staircase=True)
    # Use simple momentum for the optimization.
    optimizer = tf.train.MomentumOptimizer(learning_rate,
                                         0.9).minimize(cost, global_step=batch)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-14 12:45:03

这是意料之中的事。这个问题被称为过度拟合.这是当您的模型开始“记忆”培训示例,而没有真正学习任何有用的测试集。事实上,这正是我们首先使用测试集的原因。因为如果我们有一个足够复杂的模型,我们总是可以很好地拟合数据,即使不是很有意义。测试集告诉我们模型实际学到了什么。

使用类似于测试集的验证集也很有用,但是您可以使用它来确定何时停止训练。当验证错误停止降低时,您将停止培训。为什么不使用测试集呢?测试集是为了知道您的模型在现实世界中的表现如何。如果您开始使用来自测试集的信息来选择关于您的培训过程的内容,而不是您的作弊,那么您将受到不再代表您真实世界错误的测试错误的惩罚。

最后,卷积神经网络因其过拟合的能力而臭名昭著.已经证明,即使你洗牌标签,甚至随机像素,Conv-网也能得到零训练误差。这意味着,对于Conv来说,不必有真正的模式来学习表示它。这意味着必须对conv-net进行正则化。也就是说,您必须使用诸如Dropout批处理规范化早期停止之类的东西。

如果你想读更多,我会留下几个链接:

过度拟合,验证,早期停止https://elitedatascience.com/overfitting-in-machine-learning

配置随机标签的Conv-网:https://arxiv.org/pdf/1611.03530.pdf (本文有点先进,但它的交互作用是浏览)。

为了真正提高你的测试精度,你需要改变你的模型或训练数据增强。你可能也想尝试转移学习。

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

https://stackoverflow.com/questions/46216981

复制
相关文章

相似问题

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