楼主: kaixin202212
115 0

Pytorch深度学习入门与实战(2024版) [推广有奖]

  • 0关注
  • 1粉丝

讲师

17%

还不是VIP/贵宾

-

威望
0
论坛币
380 个
通用积分
29.2918
学术水平
0 点
热心指数
3 点
信用等级
0 点
经验
5182 点
帖子
180
精华
0
在线时间
281 小时
注册时间
2022-11-10
最后登录
2024-4-30

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
参考资料1:https://pan.baidu.com/s/11CD2-dcDaZMCMVoOW99e3A 提取码:8akb
参考资料2:https://share.weiyun.com/nsgcbkza 密码:grban3

一、什么是pytorch
PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。PyTorch既可以看作加入了GPU支持的numpy,同时也可以看成一个拥有自动求导功能的强大的深度神经网络。除了Facebook外,它已经被Twitter、CMU和Salesforce等机构采用。

二、为什么使用 PyTorch?
机器学习研究人员喜欢使用 PyTorch。截至 2022 年 2 月,PyTorch 是Papers With Code 上最常用的深度学习框架, 该网站用于跟踪机器学习研究论文及其附带的代码存储库。
PyTorch 还有 GPU 加速,使代码运行得更快,你可以专注于操作数据和编写算法。

三、PyTorch库的优势
通过将模型应用到例证,深度学习允许我们执行很多复杂任务,如机器翻译、玩战略游戏以及在杂乱无章的场景中识别物体等。为了在实践中做到这一点,我们需要灵活且高效的工具,以便能够适用于这些复杂任务,能够在合理的时间内对大量数据进行训练。我们需要已被训练过的模型在输入变量变化的情况下正确执行。接下来看看我们决定使用 PyTorch 的一些原因。

PyTorch 很容易被推广,因为它很简单。许多研究人员和实践者发现它易于学习、使用、扩展和调试。它是 Python 化的,虽然和任何复杂领域一样,它有注意事项和最佳实践示例,但对于以前使用过 Python 的开发人员来说,使用该库和使用其他 Python 库一样。

更具体地说,在 PyTorch 中编写深度学习机是很自然的事情。PyTorch 为我们提供了一种数据类型,即张量,通常用来存储数字、向量、矩阵和数组。此外,PyTorch 还提供了操作它们的函数,我们可以使用这些函数来增量编程。如果我们愿意,还可以进行交互式编程,就像平常使用 Python 一样。如果你知道 NumPy,那么你对交互式编程应是非常熟悉的。

PyTorch 具备 2 个特性,使得它与深度学习关联紧密。首先,它使用 GPU 加速计算,通常比在 CPU 上执行相同的计算速度快 50 倍。其次,PyTorch 提供了支持通用数学表达式数值优化的工具,该工具用于训练深度学习模型。

四、创建数据
Tensors张量是一种特殊的数据结构,它和数组还有矩阵十分相似。在Pytorch中,Tensors可以在gpu或其他专用硬件上运行来加速计算之外,其他用法类似Numpy。
import torch
import numpy as np
#直接从数据创建
data = [[1, 2], [3, 4]]
x_data = torch.tensor(data)
x_data.shape
#全为1
x_ones = torch.ones_like(x_data) # retains the properties of x_data
print(f"Ones Tensor: \n {x_ones} \n")
#全为0
x_rand = torch.rand_like(x_data, dtype=torch.float) # overrides the datatype of x_data
print(f"Random Tensor: \n {x_rand} \n")
#查看tensor类型
tensor = torch.rand(3, 4)
print(f"Shape of tensor: {tensor.shape}“)
print(f"Datatype of tensor: {tensor.dtype}”)
print(f"Device tensor is stored on: {tensor.device}")

步骤2:自动梯度计算
在Pytorch中可以使用tensor进行计算,并最终可以从计算得到的tensor计算损失,并进行梯度信息。在Pytorch中主要关注正向传播的计算即可。
#x = torch.ones(2, 2, requires_grad=True)
x = torch.tensor([[1, 2], [3, 4]], dtype=float, requires_grad=True)
print(x)
y = x + 2
print(y)
print(y.grad_fn) # y就多了一个AddBackward
z = y * y * 3
out = z.mean()
print(z) # z多了MulBackward
print(out) # out多了MeanBackward
#计算公式:out = 0.25 ((x+2) * (x+2) * 3)
out.backward()
print(x.grad)

步骤3:拟合曲线
接下来我们将尝试使用Pytorch拟合一条曲线,我们首先的创建待你和的参数,并加载待训练的数据。
#需要计算得到的参数
w = torch.ones(1, requires_grad=True)
b = torch.ones(1, requires_grad=True)
#数据
x_tensor = torch.from_numpy(x)
y_tensor = torch.from_numpy(y)
#目标模型
#y = wx + b
定义损失
def mse(label, pred):
diff = label - pred
return torch.sqrt((diff ** 2).mean())
pred = x_tensor * w + b
loss = mse(y_tensor, pred)
#执行20次参数更新
for _ in range(20):
# 重新定义一下,梯度清空
w = w.clone().detach().requires_grad_(True)
b = b.clone().detach().requires_grad_(True)
# 正向传播
pred = x_tensor * w + b
# 计算损失
loss = mse(y_tensor, pred)
print(loss)
# 计算梯度
loss.backward()

五、完整代码(GPU)
使用GPU训练只需要把训练数据、模型放入GPU中即可

指定是否使用GPU训练模型
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

模型放入GPU中
model.to(device)

数据放入GPU中
inputs = torch.from_numpy(x_train).to(device)
labels = torch.from_numpy(y_train).to(device)

import torch
import torch.nn as nn
import numpy as np

class Linear_yy(torch.nn.Module):
    def __init__(self,in_dim,media_dim,out_dim):
        super(Linear_yy,self).__init__()
        self.linear_1 = torch.nn.Linear(in_dim,media_dim)
        self.linear_2 = torch.nn.Linear(media_dim,out_dim)

    def forward(self,x):
        x = self.linear_1(x)
        x = self.linear_2(x)
        return x

in_dim = 1
media_dim = 2
out_dim = 1

model = Linear_yy(in_dim=in_dim,media_dim=media_dim,out_dim=out_dim)

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model.to(device)

epochs = 1000
learning_rate = 0.0001
optimizer = torch.optim.Adam(model.parameters(),lr=learning_rate)
loss_faction = torch.nn.MSELoss()

for epoch in range(epochs):
    epoch += 1
    # 注意转行成tensor
    inputs = torch.from_numpy(x_train).to(device)
    labels = torch.from_numpy(y_train).to(device)

    # 梯度要清零每一次迭代
    optimizer.zero_grad()

    # 前向传播
    outputs = model(inputs)

    # 计算损失
    loss = loss_faction(outputs, labels)

    # 返向传播
    loss.backward()

    # 更新权重参数
    optimizer.step()
    if epoch % 50 == 0:
        print('epoch {}, loss {}'.format(epoch, loss.item()))


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:深度学习 RCH

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

本版微信群
加JingGuanBbs
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-1 16:46