weixin_45099845
weixin_45099845
采纳率63.6%
2019-07-25 20:24

如何防止过拟合?为何我的训练准确率高,但是测试准确率很低?

问题如标题
print('Training ------------')

training the model

model.fit(X_train, y_train, epochs=8, batch_size=32,)

Epoch 1/8
19578/19578 [==============================] - 334s 17ms/step - loss: 1.9936 - acc: 0.3272
Epoch 2/8
19578/19578 [==============================] - 325s 17ms/step - loss: 1.3145 - acc: 0.5698
Epoch 3/8
19578/19578 [==============================] - 325s 17ms/step - loss: 0.9667 - acc: 0.6897
Epoch 4/8
19578/19578 [==============================] - 325s 17ms/step - loss: 0.7580 - acc: 0.7557
Epoch 5/8
19578/19578 [==============================] - 325s 17ms/step - loss: 0.5882 - acc: 0.8095
Epoch 6/8
19578/19578 [==============================] - 325s 17ms/step - loss: 0.4548 - acc: 0.8510
Epoch 7/8
19578/19578 [==============================] - 325s 17ms/step - loss: 0.3471 - acc: 0.8839
Epoch 8/8
19578/19578 [==============================] - 325s 17ms/step - loss: 0.2524 - acc: 0.9176

print('\nTesting ------------')

Evaluate the model with the metrics we defined earlier

loss, accuracy = model.evaluate(X_test1, y_test1)

print('\ntest loss: ', loss)
print('\ntest accuracy: ', accuracy)

Testing ------------
3000/3000 [==============================] - 16s 5ms/step

test loss: 15.392780853271484

test accuracy: 0.045

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • b1044339259 b1044339259 2年前

    首先一点,我习惯讲问题,很啰嗦。因为我想把问题讲的连之前不知道的人都可以清楚明白。你不介意就继续看吧。
    第一个:我们训练模型其实在做什么。
    神经网络模型本质就是一个算法,一个组合的算法。我们训练神经网络其实是在调参,让这个算法符合我们想要的效果。
    第二个:什么是过拟合
    网络调参是依据样本去调整算法。当我们根据样本调参出来的算法太过符合样本时,就对新数据效果不好。比如我分辩是不是狗。我样本都是二哈,这样调整的网络参数都是二哈的。现在识别新数据——金毛,就会识别金毛不是狗。
    这就是过拟合。调出来的参数太符合样本了。
    第三个:解决方法
    过拟合就是参数调的太符合样本,所以解决的方法就有两方面
    1.样本。 原本样本只有二哈的,导致参数符合二哈,现在增加样本种类和大小,这样参数调整出来就符合更多狗的。
    2.参数。 让参数调整的没那么好。这就衍生出正则化、dropout等方法。正则化就是在loss函数加一项,这样出来的参数就有那一项的影响,不会太符合样本特征了。
    dropout就是在每次迭代训练时随机丢一些单元,这次不参与,这样每次模拟的就不是基于全部,出来的参数就不会太符合样本了。
    其实无论哪种方法都是基于参数调整方面出发。

    点赞 9 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2年前

    虽然正则化、dropout、重新设计模型、提前终止训练这些都可以一定程序避免过拟合,但是最根本的办法是增加训练样本,训练样本的大小太重要了。

    点赞 1 评论 复制链接分享

相关推荐