AI应用基于DJL构建训练需要的块和模型------AI
AI应用基于DJL构建训练需要的块和模型------AI
·
package com.alatus.djl.web; import ai.djl.Model; import ai.djl.ndarray.NDArray; import ai.djl.ndarray.NDManager; import ai.djl.ndarray.types.Shape; import ai.djl.nn.Activation; import ai.djl.nn.Blocks; import ai.djl.nn.SequentialBlock; import ai.djl.nn.core.Linear; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; /** * author: Alatus * date: 2025/2/2 * email: alatuslee@qq.com * description:使用DJL训练大模型 */ @RestController public class DJL { // 机器学习最基本的,我们要把我们需要处理的数据给转为一个N维向量 // 只有转为一个向量了,才能继续向下处理 @GetMapping("/test01") public String test01() { try(NDManager manager = NDManager.newBaseManager()){ // 我们通过这个manager创建向量 // 这里的Shape就是N维数组的形状 // 我们这里创建的是一个2乘以3的矩阵(N维向量) // 这里的ones指的是内容都是1填充的 // 输出的1.代表这是一个1的float值 NDArray ones = manager.ones(new Shape(2, 3)); System.out.println(ones); // 这里,我们同样可以自己创建一个矩阵 // 通过创建对应的数组和给予我们需要的形状来创建一个矩阵 NDArray array = manager.create(new float[]{1.14F, 5.14F, 1.9F, 1.9F, 8.10F, 1.14f}, new Shape(2, 3)); System.out.println(array); // 矩阵计算 // 如矩阵转质,这里我们的矩阵二乘三的矩阵就变成了三乘二 NDArray transpose = array.transpose(); System.out.println(transpose); return "矩阵"+ones+"和"+array+"的转置为"+transpose; } } // 我们这里的这些矩阵你可以模拟为从数据集中加载的 // 数据集是用于训练机器学习模型的数据集合 // 机器学习通常使用三个数据集,训练集,验证集和测试集 // 训练集是我们用来训练的实际数据集,模型从这些数据中学习权重和参数 // 验证集用来在训练过程中评估给定模型,它帮助机器学习工程师在模型开发阶段微调超参数 // 模型不从验证数据集学习,验证数据集是可选的 // 测试数据集提供了用于评估模型性能的黄金标准,它只在模型完全训练完成后使用 // 测试数据集应该更准确的评估模型将如何在新数据上执行 // 当我们有了数据集以后 // 数据集加载为N维向量,我们需要通过Translator来转换数据集 @GetMapping("/test02") public String test02() { // 输入的图片像素 long inputSize = 28 * 28; // 输出的图片类型 long outputSize = 10; // 整一个批量扁平块,把二维图像输入转为一维特征向量 SequentialBlock block = new SequentialBlock(); // 添加扁平块 block.add(Blocks.batchFlattenBlock(inputSize)); // 添加一个隐藏层,线性变化大小为128 block.add(Linear.builder().setUnits(128).build()); // 添加相应的激活函数 block.add(Activation::relu); // 第二个隐藏层的激活函数,这一层是大小为64的变化 block.add(Linear.builder().setUnits(64).build()); block.add(Activation::relu); // 我试着添加一个32的隐藏层激活函数 block.add(Linear.builder().setUnits(32).build()); block.add(Activation::relu); // 最后输出10大小的特征向量 block.add(Linear.builder().setUnits(outputSize).build()); // 这些大小是在实验过程中选择的 // 围绕块,可以构建我们的模型,添加一些重要的元数据,如可以在训练和推理时使用的超参数 Model model = Model.newInstance("mlp"); model.setBlock(block); // 现在就拥有了块和模型了,剩下的就是如何进行训练的部分 return "构建块和模型"; } }package com.alatus.djl.web; import ai.djl.Model; import ai.djl.ndarray.NDArray; import ai.djl.ndarray.NDManager; import ai.djl.ndarray.types.Shape; import ai.djl.nn.Activation; import ai.djl.nn.Blocks; import ai.djl.nn.SequentialBlock; import ai.djl.nn.core.Linear; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; /** * author: Alatus * date: 2025/2/2 * email: alatuslee@qq.com * description:使用DJL训练大模型 */ @RestController public class DJL { // 机器学习最基本的,我们要把我们需要处理的数据给转为一个N维向量 // 只有转为一个向量了,才能继续向下处理 @GetMapping("/test01") public String test01() { try(NDManager manager = NDManager.newBaseManager()){ // 我们通过这个manager创建向量 // 这里的Shape就是N维数组的形状 // 我们这里创建的是一个2乘以3的矩阵(N维向量) // 这里的ones指的是内容都是1填充的 // 输出的1.代表这是一个1的float值 NDArray ones = manager.ones(new Shape(2, 3)); System.out.println(ones); // 这里,我们同样可以自己创建一个矩阵 // 通过创建对应的数组和给予我们需要的形状来创建一个矩阵 NDArray array = manager.create(new float[]{1.14F, 5.14F, 1.9F, 1.9F, 8.10F, 1.14f}, new Shape(2, 3)); System.out.println(array); // 矩阵计算 // 如矩阵转质,这里我们的矩阵二乘三的矩阵就变成了三乘二 NDArray transpose = array.transpose(); System.out.println(transpose); return "矩阵"+ones+"和"+array+"的转置为"+transpose; } } // 我们这里的这些矩阵你可以模拟为从数据集中加载的 // 数据集是用于训练机器学习模型的数据集合 // 机器学习通常使用三个数据集,训练集,验证集和测试集 // 训练集是我们用来训练的实际数据集,模型从这些数据中学习权重和参数 // 验证集用来在训练过程中评估给定模型,它帮助机器学习工程师在模型开发阶段微调超参数 // 模型不从验证数据集学习,验证数据集是可选的 // 测试数据集提供了用于评估模型性能的黄金标准,它只在模型完全训练完成后使用 // 测试数据集应该更准确的评估模型将如何在新数据上执行 // 当我们有了数据集以后 // 数据集加载为N维向量,我们需要通过Translator来转换数据集 @GetMapping("/test02") public String test02() { // 输入的图片像素 long inputSize = 28 * 28; // 输出的图片类型 long outputSize = 10; // 整一个批量扁平块,把二维图像输入转为一维特征向量 SequentialBlock block = new SequentialBlock(); // 添加扁平块 block.add(Blocks.batchFlattenBlock(inputSize)); // 添加一个隐藏层,线性变化大小为128 block.add(Linear.builder().setUnits(128).build()); // 添加相应的激活函数 block.add(Activation::relu); // 第二个隐藏层的激活函数,这一层是大小为64的变化 block.add(Linear.builder().setUnits(64).build()); block.add(Activation::relu); // 我试着添加一个32的隐藏层激活函数 block.add(Linear.builder().setUnits(32).build()); block.add(Activation::relu); // 最后输出10大小的特征向量 block.add(Linear.builder().setUnits(outputSize).build()); // 这些大小是在实验过程中选择的 // 围绕块,可以构建我们的模型,添加一些重要的元数据,如可以在训练和推理时使用的超参数 Model model = Model.newInstance("mlp"); model.setBlock(block); // 现在就拥有了块和模型了,剩下的就是如何进行训练的部分 return "构建块和模型"; } }
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐

所有评论(0)