371|2

301

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

《大语言模型开发:用开源模型开发本地系统》分享2:深度学习框架:PyTorch [复制链接]

深度学习是人工智能领域中的非常重要的一个领域,深度学习框架中比较知名的有TransorFlow、Pytorch、Keras等。今天的分享就介绍Pytorch以及用Pytorch编码的神经网络代码。

PyTorch简介
在开始之前,让我们先来简单了解一下PyTorch。PyTorch是由Facebook的人工智能研究团队开发的一个开源机器学习库,它广泛用于计算机视觉和自然语言处理等应用。PyTorch以其动态计算图、易用性和灵活性而闻名,这使得它成为了许多研究者和开发者的首选工具。

PyTorch安装
在开始使用PyTorch之前,我们需要先进行安装。

Pytorch网址是https://pytorch.org/,提供了PyTotch框架的不同安装方式

 

安装PyTorch的过程非常简单,我们可以通过Python的包管理器pip来安装。在命令行中输入以下命令即可:

pip install torch torchvision


这样,PyTorch及其视觉库vision就安装完成了。安装完成后,我们可以通过简单的代码来测试是否安装成功:

import torch
print(torch.__version__)

如果输出了版本号,那么恭喜您,PyTorch已经成功安装在您的机器上了。

张量
在PyTorch中,张量(Tensor)是最基本的数据结构,类似于NumPy中的数组。张量可以包含标量、向量、矩阵或高维数据。PyTorch的张量操作非常灵活,支持各种数学运算,例如加法、乘法等。

 

# 创建一个张量
tensor = torch.tensor([1, 2, 3])
print(tensor)

# 张量运算
result = tensor + 2
print(result)


梯度计算
在深度学习中,梯度计算是一个核心概念。PyTorch提供了自动梯度计算的功能,这大大简化了我们对模型进行训练的过程。当我们需要计算某个张量的梯度时,只需调用.backward()方法。

 

# 需要计算梯度的张量
x = torch.tensor([1.0], requires_grad=True)

# 计算梯度
y = x ** 2
y.backward(torch.tensor([1.0]))

# 输出梯度
print(x.grad)


反向传播
反向传播是神经网络训练中的关键步骤,它通过计算损失函数关于模型参数的梯度来更新参数。在PyTorch中,我们通常不需要手动实现反向传播,因为框架会自动为我们处理。

 

# 定义一个简单的函数
def f(x):
    return x ** 2

# 计算梯度
x = torch.tensor([2.0], requires_grad=True)
f(x).backward()
print(x.grad)


torch.nn模块构建神经网络
torch.nn模块是PyTorch中用于构建神经网络的核心模块。它提供了一系列的类和函数,可以帮助我们快速构建各种类型的神经网络层。

 

import torch.nn as nn

# 定义一个简单的神经网络
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(10, 5)
        self.fc2 = nn.Linear(5, 2)

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

# 实例化网络
net = Net()


torch.optim优化器
在训练神经网络时,优化器是调整模型参数以最小化损失函数的关键组件。torch.optim模块提供了多种优化算法,如SGD、Adam等。

 

import torch.optim as optim

# 定义优化器
optimizer = optim.SGD(net.parameters(), lr=0.01)


训练、验证和测试过程
训练神经网络通常包括三个阶段:训练、验证和测试。在训练阶段,我们使用训练数据来更新模型参数;在验证阶段,我们使用验证数据来评估模型的性能;在测试阶段,我们使用测试数据来最终评估模型的泛化能力。

 

# 训练过程示例
for epoch in range(num_epochs):
    for data, target in train_loader:
        optimizer.zero_grad()
        output = net(data)
        loss = criterion(output, target)
        loss.backward()
        optimizer.step()


用Pytorch实现神经网络
通过上述的介绍,我们已经了解了PyTorch的基本组件和概念。现在,让我们来看一个简单的神经网络实现示例。

 

import torch
import torch.nn as nn
import torch.optim as optim
#定义神经网络模型

class CloudServiceUsageModel(nn.Module):
     def __init__(self,input size, hidden size, num classes):
          super(CloudServiceUsageModel, self).__init__()
          self.fcl =nn.Linear(input_size,hidden_size)
          self.relu = nn.ReLU()
          self.fc2 =nn.Linear(hidden size,num classes)
     def forward(self,x):
          out = self.fc1(x)out= self.relu(out)
          out = self.fc2(out)
          return out
#准备数据
input size = 10
hidden size =5
num classes=2
learning rate=0.001
num epochs=100
#随机生成一些示例数据
X= torch,randn(100,input size)
Y=torch.randint(0,num classes,(100,))
#划分训练集和测试集
train_size=int(0.8 *len(X))
train_X,test_x=X[:train size],X[train size:]
train_Y,test_Y=Y[:train size],Y[train size:]
#初始化模型、损失函数和优化器
model =CloudServiceUsageModel(input size, hidden size, num classes)
criterion =nn.CrossEntropyLoss()
optimizer =optim.Adam(model.parameters(),lr=learning rate)
#模型训练
for epoch in range(num epochs):
     #前向传播
     outputs = model(train X)
     loss =criterion(outputs,train Y)
     #反向传播和优化
     optimizer.zero grad()
     loss.backward()
     optimizer.step()
     #打印训练信息
     if(epoch+1)%10 == 0:
          print(f'Epoch {epoch+l}/{num epochs), Loss: {loss.item()}')

#模型评估
with torch.no grad():
     outputs =model(test X)
     _, predicted = torch.max(outputs.data,1)
     accuracy =(predicted ==test Y).sum().item()/ len(test Y)
     print(f'Test Accuracy:{accuracy}')

运行输出为

Epoch 10/100,  Loss:0.7254490852355957
Epoch 20/100,  Loss:0.7173128724098206
Epoch 30/100,Loss:0.7097707986831665
Epoch 40/100,Loss:0.7027563452720642
Epoch 50/100,   Loss:0.6960537433624268
Epoch 60/100,Loss:0.6897956728935242
Epoch 70/100,Loss:0.6836565732955933
Epoch 80/100,Loss:0.6769127249717712
Epoch 90/100,  Loss:0.6696738004684448
Epoch 100/100,Loss:0.6618732213973999
Test Accuracy:0.3


源代码常用模块

在实际开发中,我们还会用到PyTorch的许多其他模块,如nn.Parameter类,将需要被优化的张量(参数)标记为网络可训练的参数,方便进行参数更新和优化;typing模块提供了类型提示和类型注解的功能;logging模块用于记录和管理应用程序的日志信息,提供了灵活的配置选项,允许不同级别的日志过滤信息;torchvision模块用于图像处理,torch.utils.data用于数据加载和处理等。这些模块都极大地丰富了PyTorch的功能,使得我们能够更加便捷地进行深度学习项目的开发。

总结

今天的分享,希望大家能够对PyTorch有一个初步的了解,并激发起和大家进一步探索和学习的兴趣。深度学习是一个不断发展的领域,而PyTorch作为一个强大的工具,能够帮助我们更好地理解和实现深度学习模型。

最新回复

谢谢分享,期待后续!   详情 回复 发表于 昨天 20:02
点赞 关注

回复
举报

6700

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

训练神经网络通常包括三个阶段:训练、验证和测试,这是个重点

 
 

回复

7524

帖子

18

TA的资源

五彩晶圆(高级)

板凳
 

谢谢分享,期待后续!

 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表