MNIST是一个手写数字图像的数据集,每幅图像都由一个整数标记。它主要用于机器学习算法的性能对标。深度学习算法处理MNIST的效果相当好,准确率可达到99.7%以上。
我们将用MNIST来训练一个神经网络,使之能读取每幅图像并预测其中的数字。首先需要安装Deeplearning4j。
MNIST数据集包含一个有6万个样例的训练集和一个有1万个样例的测试集。训练集用于让算法学习如何准确地预测出图像的整数标签,而测试集则用于检查已训练网络的预测有多准确。
这在机器学习领域中被称为有监督学习,因为我们已经知道图像预测所应该得出的正确答案。训练集能起到监督和指导的作用,在神经网络预测错误时予以纠正。
我们将在这个文件中配置神经网络,训练模型,评估结果。建议您结合其中的代码来学习本教程。
设置变量
final int numRows = 28; // 矩阵的行数。
final int numColumns = 28; // 矩阵的列数。
int outputNum = 10; // 潜在结果(比如0到9的整数标签)的数量。
int batchSize = 128; // 每一步抓取的样例数量。
int rngSeed = 123; // 这个随机数生成器用一个随机种子来确保训练时使用的初始权重维持一致。下文将会说明这一点的重要性。
int numEpochs = 15; // 一个epoch指将给定数据集全部处理一遍的周期。
在我们的示例中,每一幅MNIST图像的大小是28x28像素,这意味着输入数据是2 8 numRows x 28 numColumns 的矩阵(矩阵是深度学习的基本数据结构)。其次,MNIST包含10种可能出现的结果(0到9的数字标签),即o utputNum。
batchSize 和 numEpochs必须根据经验选择,而经验则需要通过实验来积累。每批次处理的数据越多,训练速度越快;epoch的数量越多,遍历数据集的次数越多,准确率就越高。