MNIST为深度学习之入门级数据集,该数据集来自美国国家标准与技术研究所, National Institute of Standards and Technology (NIST。训练集 (training set) 由来自 250 个不同人手写的数字构成,其中 50% 是高中学生,50% 来自人口普查局 (the Census Bureau) 的工作人员。测试集(test set) 也是同样比例的手写数字数据。MNIST 训练集为 60,000 个训练样本、测试集为 10,000 个,图像大小28*28。
本文暂时不对数据集进行训练,先创建一个简单的神经网络。
MLP
神经网络又称为MLP,它是最简单的神经网络。MLP有很多变种,如:误差反向传播(BP)、概率神经网络、卷积神经网络(CNN,适用于图像识别)、时间神经网络(LSTM,适用于语音识别)等。
MLP是分层来处理数据,第一层是包含要输入数据的输入层,最后一层是产生结果的输出层。当中的层称为隐藏层。
下面是一个MLP示例,包含大小为3的输入层、大小3的单个隐藏层和大小为2的输出层。
层与层之间都有一个线性操作(称为全连接操作,是个矩阵乘法运算),每个线性操作后面还要有非线性的激活功能。
顺序块(SequentialBlock)
块组成单个操作或神经网络,它可以表示单个操作、或作为神经网络的一部分,甚至用来拼成整个神经网络。
代码实现
//图像大小28*28
long inputSize = 28*28;
//10种分类结果
long outputSize = 10;
SequentialBlock block = new SequentialBlock();
//添加输入层
block.add(Blocks.batchFlattenBlock(inputSize));
block.add(Linear.builder().setUnits(128).build());
//使用常用的 ReLU 激活函数
block.add(Activation::relu);
block.add(Linear.builder().setUnits(64).build());
block.add(Activation::relu);
block.add(Linear.builder().setUnits(outputSize).build());
System.out.println(block.toString());
如是所示,我们可以通过DJL的提供的API,快速搭建一个神经网络。
关注公众号,我们慢慢解锁Java开发者动手学习深度学习各种知识点。
