数据结构论坛

首页 » 分类 » 问答 » DJLDJL如何正确打开深度学习
TUhjnbcbe - 2023/7/6 19:25:00
北京白斑病医院 https://myyk.familydoctor.com.cn/2831/

Hi!我是小小,今天带来本周的第三篇,关于一个深度学习框架,基于Java的DJL框架。

前言

很长时间,Java都是一个相当受欢迎的企业编程语言,其框架丰富,生态完善。Java拥有庞大的开发者社区,尽管深度学习应用不断推进和演化,但是相关的深度学习框架对于Java来说相当的稀少,现如今,主要模型都是Python编译和训练,对于Java开发者来说,如果想要学习深度学习,就需要接受一门新的语言的洗礼。为了减少Java开发者学习深度学习的成本,AWS构建了一个DeepJavaLibrary(DJL),一个为Java开发者定制的开源深度学习框架,其为开发者对接主流深度学习框架,提供了一个接口。

什么是深度学习

在开始之前,先了解机器学习和深度学习基础概念。机器学习是一个利用统计学知识,把数据输入到计算机中进行训练并完成特定目标任务的过程,这种归纳学习方法可以让计算机学习一些特征并进行一系列复杂的任务,比如识别照片中的物体。深度学习是机器学习的一个分支,主要侧重于对于人工神经网络的开发,人工神经网络是通过研究人脑如何学习和实现目标的过程中,归纳出的一套计算逻辑。通过模拟部分人脑神经间信息传递的过程,从而实现各种复杂的任务,深度学习中的深度来源于会在人工神经网络中编制出,构建出许多层,从而进一步对数据信息进行更为深层次的传导。

训练MNIST手写数字识别

项目配置

利用gradle配置引入依赖包,用DJL的api包和basicdataset包来构建神经网络和数据集,这个案例,使用MXNet作为深度学习引擎,所以引入mxnet-engine和mxnet-native-auto两个包,依赖如下

plugins{idjava}repositories{jcenter()}dependencies{implementationplatform(ai.djl:bom:0.8.0)implementationai.djl:apiimplementationai.djl:basicdataset//MXNetruntimeOnlyai.djl.mxnet:mxnet-engineruntimeOnlyai.djl.mxnet:mxnet-native-auto}NDArry和NDManager

NDArray是DJL存储数据结构和数学运算的基本结构,一个NDArry表达了一个定长的多维数组,NDArry的使用方法,类似于Python的numpy.ndarry。NDManager是NDArry的管理者,其负责管理NDArry的产生和回收过程,这样可以帮助我们更好的对Java内存进行优化,每一个NDArry都会由一个NDManager创造出来,同时他们会在NDManager关闭时一同关闭,

Model

在DJL中,训练和推理都是从Modelclass开始构建的,我们在这里主要训练过程中的构建方法,下面我们为Model创建一个新的目标,因为Model也是继承了AutoClosable结构体,用一个tryblock实现。

try(Modelmodel=Model.newInstance()){...//主体训练代码...}准备数据

MNIST数据库包含大量的手写数字的图,通常用来训练图像处理系统,DJL已经把MNIST的数据收集到了basicdataset数据里,每个MNIST的图的大小是28*28,如果有自己的数据集,同样可以使用同理来收集数据。

数据集导入教程

1
查看完整版本: DJLDJL如何正确打开深度学习