在前面的文章中,老牛同学介绍了不少大语言模型的部署、推理和微调,也通过大模型演示了我们的日常的工作需求场景。我们通过大语言模型,实实在在的感受到了它强大的功能,同时也从中受益颇多。
今天,老牛同学想和大家一起来训练一个自定义的、但是功能齐全的简单的神经网络模型。这个模型虽然在参数规模、训练数据集、应用场景等方面均无法与大语言模型相媲美,但是我们旨在通过这个模型的训练过程,一窥神经网络模型的训练全貌。正所谓“麻雀虽小,五脏俱全”,同时老牛同学也希望能通过本文,与大家一起学习加深对训练神经网络的理解,逐步做到“肚里有货,从容不迫”!
由于模型训练过程的代码可能会反复调试和修改,老牛同学强烈建议大家使用Jupyter Lab来编写和调试代码。如果还没有配置好Jupyter Lab环境,请先移步老牛同学之前的文章,首先完成大模型研发的基础环境配置:大模型应用研发基础环境配置(Miniconda、Python、Jupyter Lab、Ollama 等)
定义神经网络模型
本文重在演示训练过程,因此为了方便我们训练,我们模型定义如下:
- 它是一个简单的线性计算模型
- 它只有3 个权重参数
- 它输出一个数值结果
根据以上定义,我们的模型的线性运算公式定义为:y = W1*x1 + W2*x2 + W3*x3 + b
y为模型输出,在训练时,则代表模型的目标训练数据集x为模型输入,在训练时,则代表模型的输入训练数据集W为模型权重,是模型训练的最终结果b为调整线性运算结果的偏置向量
我们将根据 y 和 x 训练数据集,逐步训练得出模型权重 W 和 b 值。
本文的源码地址,老牛同学放到评论区。如果大家不想一步一步地跟着老牛同学进行模型训练,也可以直接看源代码,一步到位看完整代码(源代码中还有 1 个权重的样例)。
准备训练数据集
首先,打开 Jupyter Lab 编辑器:
conda activate PY3.12
jupyter-lab .
为了后面创建数据集、创建模型、模型训练等操作,我们直接引入所有的依赖包:
import torch
import torch.nn as nn
import random
import torch.optim as optim
import numpy as np
为了方便构建数据集,我们先假设W的内容(偏置向量b值初始化为0):
# 随便写几个数字
weights = [1.3, 2.9, 3.7]
w_count = len(weights)
大家可能会有疑问,既然我们都已经知道模型权重了,那我们还训练个啥呢?
别着急,老牛同学提前定义它,有 2 个目的,后面在实际训练时不会使用它:
- 方便构造我们的训练数据集:因为我们已经确定了模型的线性运算公式,那么我们只需要随机一些
x,就可以容易得到训练数据集y了 - 模型训练结束之后,方便后面做个比对,看下我们训练结果我们预期值是否符合我们预期
我们先构建我们输入数据集,即线性运算公式x的内容,我们通过随机函数构建了 100 个随机数字,并转换模型训练时 PyTorch 张量类型:
x_list = []
for _ in range(100):
x_list

最低0.47元/天 解锁文章
3332

被折叠的 条评论
为什么被折叠?



