PyTorch实战:搭建并训练深度学习模型的方法
深度学习-Pytorch如何构建和训练模型
用pytorch如何构建模型,如何训练模型,如何测试模型?
pytorch 目前在深度学习具有重要的地位,比起早先的caffe,tensorflow,keras越来越受到欢迎,其他的深度学习框架越来越显得小众。
数据分析
数据分析-Pandas如何转换产生新列
数据分析-Pandas如何统计数据概况
数据分析-Pandas如何轻松处理时间序列数据
数据分析-Pandas如何选择数据子集
数据分析-Pandas如何重塑数据表-****博客
经典算法
经典算法-遗传算法的python实现
经典算法-模拟退火算法的python实现
经典算法-粒子群算法的python实现-****博客
LLM应用
大模型查询工具助手之股票免费查询接口
Python技巧-终端屏幕打印光标和文字控制
如何构建深度学习模型
在pytorch里构建模型,继承现有的模块比较方便——这就是nn.Module 模块。通过模型的初始化 _init_ 函数,定义网络层,指定数据是如何通过网络的前进流向。
同时,最重要的是提升训练和预测的速度,加速训练就免不了把模型放在GPU或者CPU里面,这就需要模型配置硬件部署位置。
# 模型配置到cpu还是GPU,或者多处理器.
device = (
"cuda"
if torch.cuda.is_available()
else "mps"
if torch.backends.mps.is_available()
else "cpu"
)
print(f"Using {device} device")
# 定义模型
class NeuralNetwork(nn.Module):
def __init__(self):
super().__init__()
self.flatten = nn.Flatten()
self.linear_relu_stack = nn.Sequential(
nn.Linear(28*28, 512),
nn.ReLU(),
nn.Linear(512, 512),
nn.ReLU(),
nn.Linear(512, 10)
)
def forward(self, x):
x = self.flatten(x)
logits = self.linear_relu_stack(x)
return logits
model = NeuralNetwork().to(device)
print(model)
此处用一个简单的神经网络模型解释深度学习网络的构建,麻雀虽小五脏俱全。
模型网络有6层:Flatten层,顺序网络里,构建1个28 X 28像素到512的线性连接层,接着是ReLU激活层 ,随后又是512 X 512的线性连接层,随后激活层ReLU层,最后是一个512 X 10线性连接层,输出10个结果值。
Using cuda device
NeuralNetwork(
(flatten): Flatten(start_dim=1, end_dim=-1)
(linear_relu_stack): Sequential(
(0): Linear(in_features=784, out_features=512, bias=True)
(1): ReLU()
(2): Linear(in_features=512, out_features=512, bias=True)
(3): ReLU()
(4): Linear(in_features=512, out_features=10, bias=True)
)
)
如何训练并优化模型
构建好模型后,如何优化模型,提升识别精确度呢?
其实也很简单,pytorch已经封装好了很多处理,只需要调用损失函数和优化函数即可。
此处损失函数采用交叉熵函数CrossEntropyLoss,优化函数采用SGD函数,你也可以用别的函数。
loss_fn = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=1e-3)
当然,上篇说道,训练数据集较多,GPU显存又有限,只好分批次进行加载。如此,便需要结合上篇文章分批次加载模型,不再赘述,详见:
[深度学习-Pytorch数据集构造和分批加载-****博客]
在每个训练循环中,模型都在训练数据集计算,并计算损失函数,然后再反向传播,叠加优化器对模型进行优化处理。不断循环叠加,使得模型预测能力逐渐提升。
def train(dataloader, model, loss_fn, optimizer):
size = len(dataloader.dataset)
model.train()
for batch, (X, y) in enumerate(dataloader):
X, y = X.to(device), y.to(device)
# Compute prediction error
pred = model(X)
loss = loss_fn(pred, y)
# Backpropagation
loss.backward()
optimizer.step()
optimizer.zero_grad()
if batch % 100 == 0:
loss, current = loss.item(), (batch + 1) * len(X)
print(f"loss: {loss:>7f} [{current:>5d}/{size:>5d}]")
如何测试模型效果
当要测试模型性能效果时,是不能再使用训练数据来测的。就像是考试不能提前知道考卷题目,否则漏题就不能获得真正的能力。模型测试也一样,因此在模型加载前先把数据集按比例分了,或三七分,或二八分。把一部分测试集进行测试,观察效果如何。
依旧加载测试的数据集,告知模型是做测试,不再训练 model.eval(),因此也不再把残差反向传播,torch.no_grad()。当然,依旧把数据和模型加载到加速设备上,如果有GPU的话。
监控数据主要有两个:平均损失值,准确度。
def test(dataloader, model, loss_fn):
size = len(dataloader.dataset)
num_batches = len(dataloader)
model.eval()
test_loss, correct = 0, 0
with torch.no_grad():
for X, y in dataloader:
X, y = X.to(device), y.to(device)
pred = model(X)
test_loss += loss_fn(pred, y).item()
correct += (pred.argmax(1) == y).type(torch.float).sum().item()
test_loss /= num_batches
correct /= size
print(f"Test Error: \n Accuracy: {(100*correct):>0.1f}%, Avg loss: {test_loss:>8f} \n")
有了监测数据后,每个轮次都想查看训练效果是否朝着好的方向前进,如果好的就继续不断迭代,直到满足模型设计的预测精度等指标要求,如果不是就提前终止了。
epochs = 5
for t in range(epochs):
print(f"Epoch {t+1}\n-------------------------------")
train(train_dataloader, model, loss_fn, optimizer)
test(test_dataloader, model, loss_fn)
print("Done!")
很简单吧,这里面把训练5个轮次,就结束。也就是示意一下深度学习的流程。
以上代码只是一个简单示例,示例代码中的表达式可以根据实际问题进行修改。
觉得有用 收藏 收藏 收藏
点个赞 点个赞 点个赞
End
DeepLearning文章:
深度学习-Pytorch数据集构造和分批加载-****博客
GPT专栏文章:
GPT实战系列-ChatGLM3本地部署CUDA11+1080Ti+显卡24G实战方案
GPT实战系列-LangChain + ChatGLM3构建天气查询助手
大模型查询工具助手之股票免费查询接口
GPT实战系列-简单聊聊LangChain
GPT实战系列-大模型为我所用之借用ChatGLM3构建查询助手
GPT实战系列-P-Tuning本地化训练ChatGLM2等LLM模型,到底做了什么?(二)
GPT实战系列-P-Tuning本地化训练ChatGLM2等LLM模型,到底做了什么?(一)
GPT实战系列-ChatGLM2模型的微调训练参数解读
GPT实战系列-如何用自己数据微调ChatGLM2模型训练
GPT实战系列-ChatGLM2部署Ubuntu+Cuda11+显存24G实战方案
GPT实战系列-Baichuan2本地化部署实战方案
GPT实战系列-Baichuan2等大模型的计算精度与量化
GPT实战系列-GPT训练的Pretraining,SFT,Reward Modeling,RLHF
GPT实战系列-探究GPT等大模型的文本生成-****博客
下一篇: 如何手动执行IDEA打包操作并跳过测试?
推荐阅读
-
[姿势估计] 实践记录:使用 Dlib 和 mediapipe 进行人脸姿势估计 - 本文重点介绍方法 2):方法 1:基于深度学习的方法:。 基于深度学习的方法:基于深度学习的方法利用深度学习模型,如卷积神经网络(CNN)或递归神经网络(RNN),直接从人脸图像中学习姿势估计。这些方法能够学习更复杂的特征表征,并在大规模数据集上取得优异的性能。方法二:基于二维校准信息估计三维姿态信息(计算机视觉 PnP 问题)。 特征点定位:人脸姿态估计的第一步是通过特征点定位来检测和定位人脸的关键点,如眼睛、鼻子和嘴巴。这些关键点提供了人脸的局部结构信息,可用于后续的姿势估计。 旋转表示:常见的旋转表示方法包括欧拉角和旋转矩阵。欧拉角通过三个旋转角度(通常是俯仰、偏航和滚动)描述头部的旋转姿态。旋转矩阵是一个 3x3 矩阵,表示头部从一个坐标系到另一个坐标系的变换。 三维模型重建:根据特征点的定位结果,三维人脸模型可用于姿势估计。通过将人脸的二维图像映射到三维模型上,可以估算出人脸的旋转和平移信息。这就需要建立人脸的三维模型,然后通过优化方法将模型与特征点对齐,从而获得姿势估计结果。 特征点定位 特征点定位是用于检测人脸关键部位的五官基础部分,还有其他更多的特征点表示方法,大家可以参考我上一篇文章中介绍的特征点检测方案实践:人脸校正二次定位操作来解决人脸校正的问题,客户在检测关键点的代码上略有修改,坐标转换部分客户见上图 def get_face_info(image). img_copy = image.copy image.flags.writeable = False image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) results = face_detection.process(image) # 在图像上绘制人脸检测注释。 image.flags.writeable = True image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) box_info, facial = None, None if results.detections: for detection in results. for detection in results.detections: mp_drawing.Drawing.detection = 无 mp_drawing.draw_detection(image, detection) 面部 = detection.location_data.relative_keypoints 返回面部 在上述代码中,返回的数据是五官(6 个关键点的坐标),这是用 mediapipe 库实现的,下面我们可以尝试用另一个库:dlib 来实现。 使用 dlib 使用 Dlib 库在 Python 中实现人脸关键点检测的步骤如下: 确保已安装 Dlib 库,可使用以下命令: pip install dlib 导入必要的库: 加载 Dlib 的人脸检测器和关键点检测器模型: 读取图像并将其灰度化: 使用人脸检测器检测图像中的人脸: 对检测到的人脸进行遍历,并使用关键点检测器检测人脸关键点: 显示绘制了关键点的图像: 以下代码将参数 landmarks_part 添加到要返回的关键点坐标中。
-
轻松掌握深度学习小贴士(1):TF模型训练的保存与重启方法
-
PyTorch实战:搭建线性回归模型的深度学习之旅(第6期)
-
在线编程比赛平台指南:网友观点各异,洛谷有人力挺对零基础友好,且提供Uva、Spoj、Atcoder、Codeforces等外联。特别推荐洛谷网校助力省选预备生,注意其特殊处理字符输入及字符串的方法。P1388题目数据存疑,受限于版权问题无法修正。还有其他如编程魔法师、新华算法赛训、HydroOJ、AtCoder、Vijos、OpenJudge、NOI、LOJ、HUSTOJ以及由热心家长创办的MYOJ等,后者定期为初学者设赛,是菜鸟们的实战练兵地。而牛客竞赛网作为专注算法训练的平台,每周都有竞赛并附带奖励,是算法选手的理想学习场所。
-
PyTorch实战:搭建并训练深度学习模型的方法