| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> Pytorch主要组成模块 -> 正文阅读 |
|
[人工智能]Pytorch主要组成模块 |
参考资料: 课程内容链接:https://github.com/datawhalechina/thorough-pytorch 导入包的方式 import os import numpy as np import torch import torch.nn as nn from torch.utils.data import Dataset, DataLoader import torch.optim as optimizer 超参数包括:
GPU设置的两种常见方式: # 方案一:使用os.environ,这种情况如果使用GPU不需要设置 os.environ['CUDA_VISIBLE_DEVICES'] = '0,1' 加载使用: model.cuda() # 方案二:使用“device”,后续对要使用GPU的变量用.to(device)即可 device = torch.device("cuda:1" if torch.cuda.is_available() else "cpu") 加载和使用: data = data.to(device) model = Model(...).to(device) 数据读入通过Dataset+DataLoader Dataset类来实现灵活的数据读取,定义的类需要继承PyTorch自身的Dataset类。主要包含三个函数:
构建好Dataset后,就可以使用DataLoader来按批次读入数据了 from torch.utils.data import DataLoader train_loader = torch.utils.data.DataLoader(train_data, batch_size=batch_size, num_workers=4, shuffle=True, drop_last=True) val_loader = torch.utils.data.DataLoader(val_data, batch_size=batch_size, num_workers=4, shuffle=False)
神经网络模型构建: PyTorch中神经网络构造一般是基于 Module 类的模型来完成的,它让模型构造更加灵活。 Module 类是 nn 模块里提供的一个模型构造类,是所有神经?网络模块的基类,我们可以继承它来定义我们想要的模型。下面继承 Module 类构造多层感知机。这里定义的 MLP 类重载了 Module 类的 init 函数和 forward 函数。它们分别用于创建模型参数和定义前向计算。前向计算也即正向传播。 模型初始化: mlp = MLP() ##模型
print(list(mlp.parameters()))
print("-------初始化-------")
initialize_weights(mlp)
print(list(mlp.parameters()))
损失函数以交叉熵损失函数为例: torch.nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean') 主要参数:
训练和评估: for epoch in range(1, epochs+1): train(epoch) val(epoch) 训练: def train(epoch): model.train() train_loss = 0 for data, label in train_loader: data, label = data.cuda(), label.cuda() optimizer.zero_grad() output = model(data) loss = criterion(output, label) loss.backward() optimizer.step() train_loss += loss.item()*data.size(0) train_loss = train_loss/len(train_loader.dataset) print('Epoch: {} \tTraining Loss: {:.6f}'.format(epoch, train_loss)) 评估: def val(epoch): model.eval() val_loss = 0 gt_labels = [] pred_labels = [] with torch.no_grad(): for data, label in test_loader: data, label = data.cuda(), label.cuda() output = model(data) preds = torch.argmax(output, 1) gt_labels.append(label.cpu().data.numpy()) pred_labels.append(preds.cpu().data.numpy()) loss = criterion(output, label) val_loss += loss.item()*data.size(0) val_loss = val_loss/len(test_loader.dataset) gt_labels, pred_labels = np.concatenate(gt_labels), np.concatenate(pred_labels) acc = np.sum(gt_labels==pred_labels)/len(pred_labels) print('Epoch: {} \tValidation Loss: {:.6f}, Accuracy: {:6f}'.format(epoch, val_loss, acc)) 优化器:
optimizer = torch.optim.SGD(net.parameters(), lr=1e-5) for epoch in range(EPOCH): ... optimizer.zero_grad() #梯度置零 loss = ... #计算loss loss.backward() #BP反向传播 optimizer.step() #梯度更新 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 6:02:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |