用 Java 训练深度学习模型,原来能这么简单( 二 )

准备数据MNIST(Modified National Institute of Standards and Technology)数据库包含大量手写数字的图,通常被用来训练图像处理系统 。DJL 已经将 MNIST 的数据集收录到了 basicdataset 数据集里,每个 MNIST 的图的大小是 28 x 28 。如果你有自己的数据集,你也可以通过 DJL 数据集导入教程来导入数据集到你的训练任务中 。
int batchSize = 32; // 批大小Mnist trainingDataset = Mnist.builder()        .optUsage(Usage.TRAIN) // 训练集        .setSampling(batchSize, true)        .build();Mnist validationDataset = Mnist.builder()        .optUsage(Usage.TEST) // 验证集        .setSampling(batchSize, true)        .build();这段代码分别制作出了训练和验证集 。同时我们也随机排列了数据集从而更好的训练 。除了这些配置以外,你也可以添加对于图片的进一步处理,比如设置图片大小,对图片进行归一化等处理 。
制作 model(建立 Block)当你的数据集准备就绪后,我们就可以构建神经网络了 。在 DJL 中,神经网络是由 Block(代码块)构成的 。一个 Block 是一个具备多种神经网络特性的结构 。它们可以代表 一个操作, 神经网络的一部分,甚至是一个完整的神经网络 。然后 Block 可以顺序执行或者并行 。同时 Block 本身也可以带参数和子 Block 。这种嵌套结构可以帮助我们构造一个复杂但又不失维护性的神经网络 。在训练过程中,每个 Block 中附带的参数会被实时更新,同时也包括它们的各个子 Block 。这种递归更新的过程可以确保整个神经网络得到充分训练 。
 
当我们构建这些 Block 的过程中,最简单的方式就是将它们一个一个的嵌套起来 。直接使用准备好 DJL 的 Block 种类,我们就可以快速制作出各类神经网络 。
 
根据几种基本的神经网络工作模式,我们提供了几种 Block 的变体 。SequentialBlock 是为了应对顺序执行每一个子 Block 构造而成的 。它会将前一个子 Block 的输出作为下一个 Block 的输入 继续执行到底 。与之对应的,是 ParallelBlock 它用于将一个输入并行输入到每一个子 Block 中,同时将输出结果根据特定的合并方程合并起来 。最后我们说一下 LambdaBlock,它是帮助用户进行快速操作的一个 Block,其中并不具备任何参数,所以也没有任何部分在训练过程中更新 。

用 Java 训练深度学习模型,原来能这么简单

文章插图
 
我们来尝试创建一个基本的 多层感知机(MLP)神经网络吧 。多层感知机是一个简单的前向型神经网络,它只包含了几个全连接层 (LinearBlock) 。那么构建这个网络,我们可以直接使用 SequentialBlock 。
int input = 28 * 28; // 输入层大小int output = 10; // 输出层大小int[] hidden = new int[] {128, 64}; // 隐藏层大小SequentialBlock sequentialBlock = new SequentialBlock();sequentialBlock.add(Blocks.batchFlattenBlock(input));for (int hiddenSize : hidden) {    // 全连接层    sequentialBlock.add(Linear.builder().setUnits(hiddenSize).build());    // 激活函数    sequentialBlock.add(activation);}sequentialBlock.add(Linear.builder().setUnits(output).build());当然 DJL 也提供了直接就可以拿来用的 MLP Block :
Block block = new Mlp(        Mnist.IMAGE_HEIGHT * Mnist.IMAGE_WIDTH,        Mnist.NUM_CLASSES,        new int[] {128, 64});训练当我们准备好数据集和神经网络之后,就可以开始训练模型了 。在深度学习中,一般会由下面几步来完成一个训练过程:
用 Java 训练深度学习模型,原来能这么简单

文章插图