深度学习-Pytorch如何构建和训练模型

深度学习-Pytorch如何构建和训练模型

用pytorch如何构建模型,如何训练模型,如何测试模型?

pytorch 目前在深度学习具有重要的地位,比起早先的caffe,tensorflow,keras越来越受到欢迎,其他的深度学习框架越来越显得小众。

数据分析

数据分析-Pandas如何转换产生新列

数据分析-Pandas如何统计数据概况

数据分析-Pandas如何轻松处理时间序列数据

数据分析-Pandas如何选择数据子集

数据分析-Pandas如何重塑数据表-CSDN博客

经典算法

经典算法-遗传算法的python实现

经典算法-模拟退火算法的python实现

经典算法-粒子群算法的python实现-CSDN博客

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数据集构造和分批加载-CSDN博客]

在每个训练循环中,模型都在训练数据集计算,并计算损失函数,然后再反向传播,叠加优化器对模型进行优化处理。不断循环叠加,使得模型预测能力逐渐提升。

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数据集构造和分批加载-CSDN博客

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等大模型的文本生成-CSDN博客

  • 39
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alex_StarSky

你的鼓励是创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值