为使我的神经网络正常工作,我难以确定正确的参数。我想使用60.000 26x26图像的Mnist数据集实现数字识别。我还了解到将数据分为多个“块”是有意义的,但是我还有两个问题:每块多少个图像?如何设置学习率?每个块有多少个反向传播周期? 您是否知道有用的文章,可以从中获取此类信息?
答案 0 :(得分:1)
首先,如果这是您的第一个网络,我建议您使用Keras-它易于使用并具有网络的感觉。了解了原理之后,就可以使用pyTorch / Tensorflow(我个人使用PyTorch)。
现在您的问题是: 我假设您正在实现标准的神经网络(不是CNN)。
大块: 这些“块”通常称为批处理,它是将数据分成较小部分的一种方法-有很多优点/缺点,但是重要的是它减少了使用的内存。除非您有大量内存(!!),否则无法一次在5万张图像上训练网络,因此,您可能希望先解析前256个图像,然后解析接下来的256个图像,依此类推。批处理的大小主要由您的内存决定-批处理大小为256(应该随便增加)就可以了。
学习率:学习率取决于您的优化器。假设您使用的是SGD(随机梯度下降),PyTorch中的标准值为0.1,通常效果很好。如果您得到一些“奇数”结果(例如权重中的“ nan”),或者如果您遇到复杂的问题,则可以调整该参数,但是我建议您坚持使用标准,并尝试使用不同的值。您知道您的网络运作良好。如果它持续给您“ nan”,请尝试将其减小到例如0.01。
后置支撑:后置传播是指在训练一批后执行的重量更新操作,因此您将进行一次“后置传播”。批处理。
我建议您看一下“ threeblueonebrows”教程-https://www.youtube.com/watch?v=aircAruvnKk-它解释了网络的概念,也是使用pytorch的kaggle指南-https://www.kaggle.com/kanncaa1/pytorch-tutorial-for-deep-learning-lovers。