Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python CNN在Keras:小批量产品的准确度意外下降_Python_Machine Learning_Neural Network_Keras_Conv Neural Network - Fatal编程技术网

Python CNN在Keras:小批量产品的准确度意外下降

Python CNN在Keras:小批量产品的准确度意外下降,python,machine-learning,neural-network,keras,conv-neural-network,Python,Machine Learning,Neural Network,Keras,Conv Neural Network,我对一个简单的CNN(基于KerasGithub repo的一个样本脚本)有一个问题,我试图(与Keras一起)复制迈克尔·尼尔森(Michael Nielsen)关于深度学习的在线书籍第6章中的一个实验(他在这本书中使用了plain Theano)。我使用了他的超参数,即batch\u size=10和nb\u epoch=60,但用relu代替sigmoid作为激活函数。他的实现达到了99.06%的准确率。令我惊讶的是,我的程序的准确率低于10%,更让我惊讶的是,当我使用batch_size

我对一个简单的CNN(基于
Keras
Github repo的一个样本脚本)有一个问题,我试图(与Keras一起)复制迈克尔·尼尔森(Michael Nielsen)关于深度学习的在线书籍第6章中的一个实验(他在这本书中使用了plain Theano)。我使用了他的超参数,即
batch\u size=10
nb\u epoch=60
,但用relu代替sigmoid作为激活函数。他的实现达到了99.06%的准确率。令我惊讶的是,我的程序的准确率低于10%,更让我惊讶的是,当我使用
batch_size=15
或更大时,准确率合理地>98%(我尝试了
Tensorflow
Theano
)。有关Python代码,请参见以下内容。
我的代码有问题吗?或者这是
Keras的“功能”

您使用的
批量大小非常小。此外,您没有使用任何额外的优化器功能(例如,
momentum
),在这种情况下,这可能会损害您的培训。要了解最可能发生的情况,请尝试了解在您的培训中实际发生的情况:

  • 每个训练过程都希望减少训练集上的错误X为了做到这一点,您需要计算数据集上的错误梯度w.r.t.到参数,然后-在使错误更小的方向上更改它们
  • 计算整个数据集上的梯度可能非常昂贵-因此,优化器会计算数据集部分(称为
    batch
    ,大小为
    batch\u size
    )上此梯度的近似值,并使用此值更改参数
  • 现在试着想象一下,你的样本中有一小部分被错误分类了,或者是非常奇怪的情况,这使得梯度指向与大多数样本不同的方向。在这种情况下,当批处理规模较小时,这可能会使异常值对您的培训产生更大的影响。如果批量较大,则正常样品可消除这种影响
  • 您的网络相对较浅-这是可信的,并且经验证明-这样的网络可能会遇到所谓的“差极小值”,即您的网络卡在某个区域-在该区域中,每次更改都会增加错误(这种情况下反向传播不起作用)-甚至随机化也无法将您的参数从该区域移动。如果你的训练更混乱的话,你最终达到最低限度的可能性会更大

  • 增加
    批量大小
    使您的网络变得更好,这并不奇怪。为了防止你的人际网络在小批量的情况下出现普通的梯度下降,你也可以尝试
    momentum
    (使用
    nesterov
    )或者将您的网络深度增加到
    大小>>5
    ,因为人们认为这样的网络受最低值影响较小。

    可能是一个有趣的阅读。我理解
    批量大小可能太小的观点。但是,我不理解分别使用
    Keras
    和纯
    Theano
    实现的结果之间的区别。您可以尝试重新启动几次培训。也许这是因为
    keras
    在训练期间正在洗牌数据集。