深度学习框架Pytorch——学习笔记(一)基础认识和实践

2023-05-16

深度学习框架Pytorch——学习笔记(一)

记录在学习过程中,学到的东西和遇到的问题。

1.什么是Pytorch,为什么选择Pytroch?

pytorch是深度学习框架,是目前主流框架之一。
pytroch的结构和python类似,易于理解。

2.Pytroch的安装

2.1配置Python环境

通过官网下载安装包
官网:https://www.python.org/downloads/
或者安装 Anaconda版本
Anaconda官网:https://www.anaconda.com/distribution/

我建议使用Anaconda进行安装,因为conda中有一个虚拟环境的功能,可以很好的区分和管理,python的不同需求下的环境,从而不用重复安装python。

命令行操作可以使用git工具,它比windows自带的cmd,更加支持shell等一下操作。

conda创建虚拟环境过程:

  1. conda创建虚拟环境
	 conda create -n pytorch python=3.6

创建一个名为"pytorch"的python虚拟环境,其采用的python版本为3.6。虚拟环境中的版本可以自己选择,不一定要和conda版本相同。
2. 进入虚拟环境

   source activate pytorch

3.进入成功,说明环境创建完成。虚拟环境中的python环境,外部也是可以找到和调用的。
4.conda如果需要下载一些包,可能会特别慢,需要修改conda源。因为访问的是国外源,出于国家政策原因,会下载特别慢,甚至不下载,需要修改为国内机构的源。

    # 使用清华 conda 镜像。
    conda config --prepend channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/

    # 或者选用科大 conda 镜像。
    conda config --prepend channels http://mirrors.ustc.edu.cn/anaconda/pkgs/free/

2.2准备Python管理器

python代码管理,我使用的是 Pycharm 。功能齐全,代码调试方便。
pycharm 安装比较简单,官网下载即可。
分为免费版(社区版) 和 收费版(专业版)。
如有专业版的需求,可以通过 https://blog.csdn.net/u014044812/article/details/78727496 进行破解。

2.3 通过命令行安装PyTorch

安装方式在pytorch官网有 ,官网:https://pytorch.org/
一般可以采用以下两种方式安装
一种是可以通过python pip 进行安装。

pip3 install https://download.pytorch.org/whl/cu90/torch-1.1.0-cp36-cp36m-win_amd64.whl
pip3 install torchvision

另一种是conda进行安装(我采用的方式)

安装最新版的环境
conda install pytorch torchvision -c pytorch

根据需求可以选择pytorch版本进行安装
conda install pytorch=1.0.0 torchvision -c pytorch

3.PyTorch基础概念

tensor

可以理解为张量矩阵,和numpy实际上是一样的。两者可以相互转化。其好处是可以在GPU上进行计算,而numpy不行。

autograd 自动化 (自动求导)

这个特点,也是pytorch的主要特点,从而实现动态的计算图。
torch矩阵中,属性 requires_grad = True,可以进行记录操作过程跟踪。

4.通用代码实现流程(实现一个深度学习的代码流程)

神经网络的典型训练流程

1.数据获取和加载。如果是通用数据,pytorch已经做了封装,直接调运就可以。
2.网络定义。常规的网络,pytorch也已经封装好了,直接调用即可。
3.损失函数和优化方法。
4.训练
5.测试

代码实现

import torch
import torchvision
import torchvision.transforms as transforms
import torchvision.datasets.cifar

### 数据获取和加载
transform = transforms.Compose(
    [transforms.ToTensor(),
     transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])

trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
                                        download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
                                          shuffle=True, num_workers=2)

testset = torchvision.datasets.CIFAR10(root='./data', train=False,
                                       download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4,
                                         shuffle=False, num_workers=2)
classes = ('plane', 'car', 'bird', 'cat',
           'deer', 'dog', 'frog', 'horse', 'ship', 'truck')

### 网络定义
import torch.nn as nn
import torch.nn.functional as F

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):

        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(-1, 16 * 5 * 5)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x
net = Net()
### 将网络转到GPU上
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
net.to(device)

### 定义损失函数和优化方法
import torch.optim as optim
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.01, momentum=0.9)

for epoch in range(2):  

    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        # 获取数据并转到GPU上
        inputs, labels = data
        inputs, labels = inputs.to(device), labels.to(device)

        # zero the parameter gradients
        optimizer.zero_grad()

        # forward + backward + optimize
        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        # print statistics
        running_loss += loss.item()
        if i % 2000 == 1999:    # print every 2000 mini-batches
            print('[%d, %5d] loss: %.3f' %
                  (epoch + 1, i + 1, running_loss / 2000))
            running_loss = 0.0
print('Finished Training')


### 测试
class_correct = list(0. for i in range(10))
class_total = list(0. for i in range(10))
with torch.no_grad():
    for data in testloader:
        images, labels = data
        images, labels = images.to(device), labels.to(device)
        outputs = net(images)
        _, predicted = torch.max(outputs, 1)
        # print(predicted)
        c = (predicted == labels).squeeze()
        for i in range(4):
            label = labels[i]
            class_correct[label] += c[i].item()
            class_total[label] += 1
            
for i in range(10):
    print('Accuracy of %5s : %2d %%' % (
        classes[i], 100 * class_correct[i] / class_total[i]))

通过学习,了解了神经网络进行分类的过程。以及每个步骤的作用,简单实现了一个分类任务。

参考

[1] https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html
[2] https://github.com/chenyuntc/pytorch-book

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习框架Pytorch——学习笔记(一)基础认识和实践 的相关文章

  • MySQL查看和修改字符集

    一 查看字符集 查看MYSQL数据库服务器和数据库字符集 方法一 xff1a show variables like 39 character 39 方法二 xff1a show variables like 39 collation 39
  • 安装arm_qt交叉编译环境(亲测有效)

    1 下载编译器Linaro Releases Linaro Releases 这里面的版本特别多 xff0c 对应的版本都会不一样 xff0c 如下图 需要看arm开发板是32位的还是64位的 xff0c 我用的开发板是32位的 xff0c
  • linux服务器之间数据迁移权限不够解决方案

    问题描述 xff1a linux下服务器之间迁移文件 xff0c 因权限不够 xff0c 无法迁移成功 Permission denied 原因分析 xff1a 用户权限不够 xff0c 无法迁移到指定目录 解决方案 xff1a 首先在目标
  • rust 条件语句和循环的用法 -7

    目录 一 xff0c 条件语句 二 xff0c 循环 xff08 一 xff09 loop xff0c while for 三种循环 xff0c 三个返回关键字 continue break return xff08 二 xff09 for
  • 避坑-go语言S3参数详解

    云端 事实上 xff0c 笔者之前对互联网存储方式基本没有概念 xff0c 在6个月前才开始接触nas存储 对象存储等 xff0c 并且直接参与项目 xff0c 当时可谓一头雾水 xff0c 连续两晚工作到凌晨才算完成当时s3对象存储求 x
  • 排序——冒泡排序法

    随着大数据和人工智能技术的普及和应用 xff0c 企业所拥有的数据量堵在成倍的增长 xff0c 排序算法成为不可或缺的重要工具之一 排序的过程中 xff0c 数据的移动方式可以分为 直接移动 和 逻辑移动 两种 直接移动 是交换存储数据的位
  • 排序——插入排序法

    插入排序法 插入排序法是将数组中的元素注意与以为排序好的数据进行比较 xff0c 先将前两个元素先派好 xff0c 再将第三个元素插入到适当的位置 也就是这三个元素仍然是排序好的 xff0c 接着将第四个元素加入 xff0c 重复此步骤 x
  • 笔记本电脑键盘失灵拯救方法总结

    笔记本键盘失灵怎么办 笔记本键盘失灵原因屏幕键盘的使用笔记本键盘拯救方案一笔记本键盘拯救方案二 笔记本键盘失灵原因 驱动失效 xff0c 相关文件被删除 xff1b 硬件损坏这种情况很少 xff0c 本文不做硬件修理讨论 xff1b 注册表
  • CATIA二次开发CAA安装

    安装资料在网盘里 Win7 64位 以下软件均已管理员身份运行 xff1a 1 安装vs2008 gt 自定义安装 gt 选择要安装的功能 gt Visual C 43 gt x64编译器和工具 1 2安装SP1 2 安装CATIA V5
  • 在3080显卡电脑上安装Linux系统

    首先电脑配置如下 xff1a 品牌 xff1a 微星 GP76 笔记本电脑 BIOS xff1a American Megatrends International LLC E17K4IMS 404 2022 1 21 CPU xff1a
  • Linux:文件系统

    Linux文件系统简介 1 Linux文件系统与Windows有较大的差别 Windows的文件结构是多个并列的树状结构 xff0c 最顶部的是不同的磁盘 分区 xff0c 如C D E F等 Linux的文件结构是单个的树状结构 xff0
  • Linux:服务器相关指令

    服务相关命令 1 随着微服务兴起 xff0c springboot也用得越来越多 xff0c springboot项目默认是打包成jar包的 xff0c 执行jar包就可以同时启动其内置的tomcat xff0c 免去了单独部署tomcat
  • Linux:用户相关

    Linux用户 1 Linux系统是一个多用户多任务的分时操作系统 xff0c 任何一个要使用系统资源的用户 xff0c 都必须首先向系统管理员申请一个账号 xff0c 然后以这个账号的身份进入系统 2 用户的账号一方面可以帮助系统管理员对
  • Selenium:简介

    HTML简介 1 HTML中文为超文本标记语言 HyperText Markup Language 是一种用于创建网页的标准标记语言 2 HTML是用来描述网页的一种语言 nbsp nbsp nbsp HTML不是一种编程语言 而是一种标记
  • Selenium:元素定位

    Selenium自动化测试 1 Selenium对网页的控制是基于各种前端元素的 在使用过程中 对于元素的定位是基础 只有准确抓取到对应元素才能进行后续的自动化控制 nbsp nbsp nbsp 前面介绍了前端网页HTML是由很多标签元素有
  • Selenium:浏览器操作

    Selenium浏览器操作 1 前面介绍过 根据Selenium下的WebDriver类可以实例化一个浏览器WebDriver对象 返回WebDriver对象 2 打开一个指定网页 定位HTML文档中指定元素都是根据浏览器WebDriver
  • Selenium:弹窗处理

    HTML中的弹窗 1 在实际系统中 在完成某些操作时会弹出对话框来提示 主要分为 警告消息框 确认消息框 提示消息对话 三种类型的对话框 2 警告消息框 alert 警告消息框提供了一个 确定 按钮让用户关闭该消息框 并且该消息框是模式对话
  • Selenium:表单切换

    表单 1 就是网页标签名为frame或iframe的元素 表单引用了其他页面的链接 真正的页面数据没有出现在源码中 但是在浏览器中可以看见 与浏览器的多个窗口类似 nbsp nbsp nbsp 这里说的表单不是HTML中的form标签 而是
  • Seleniu:元素常用操作

    Selenium元素操作 1 在使用Selenium过程中 仅仅是对元素进行定位和对浏览器WebDriver对象进行操作是完全不够的 更多的是需要我们对一个元素进行操作 nbsp nbsp nbsp 比如 向输入框中输入数据 点击按钮等等
  • Selenium:鼠标、键盘事件

    鼠标事件 1 前面介绍了Selenium中模拟鼠标 左键单击 的方法click 仅仅只有这个方法是完全不够的 现在的Web产品中提供了更丰富的鼠标交互方式 nbsp nbsp nbsp 例如鼠标右击 双击 悬停 拖动等功能 nbsp nbs

随机推荐

  • rust实现一个tcp server

    服务端 use std net TcpListener TcpStream use std thread use std time use std io use std io Read Write fn handle client mut
  • Selenium:元素判断

    判断元素是否存在 1 前面有介绍过使用Python中的sleep 方法来进行等待 等待一定的时间 让元素加载出来后再执行代码 nbsp nbsp nbsp 但是元素加载出来的时间是不固定的 有时长有时短 因此我们等待的时间就不固定了 nbs
  • Selenium:元素等待

    元素等待 1 前面介绍过 在使用Selenium做Web自动化过程中 可能会因为网络等原因导致页面元素没有加载出来就执行了代码 进而导致报错 nbsp nbsp nbsp 特别是在进行元素定位时 经常会遇到元素未加载出来就执行了定位代码 导
  • Selenium:操作Cookie

    什么是Cookie 1 Cookie用于辨别用户身份 访问服务器时保持登录状态等功能 用于服务器识别当前访问的是哪个用户 2 在网站中 http请求是无状态的 无状态是指协议对于事务处理没有记忆能力 每次请求都是完全独立 互不影响的 没有任
  • Selenium:操作JS

    JavaScript 1 JavaScript是Web的编程语言 所有现代的HTML页面都会使用JavaScript nbsp nbsp nbsp JavaScript是运行在客户端 浏览器 和服务器端的脚本语言 允许将静态网页转换为交互式
  • Selenium:下拉框操作

    下拉框 1 在Web网页中经常会遇到下拉框 下拉列表 比如说分页 每页显示的条数 语言的切换等功能 很多时候经常都是以下拉框的形式展现 2 下拉列表是网页中一种最节省页面空间的选择方式 默认状态下只显示一个选项 只有单击下拉按钮后才能看到全
  • Selenium:上传、下载文件

    Selenium 上传 下载文件 1 上传文件是比较常见的Web功能之一 比如 常见的上传头像功能 2 对于Web页面的上传功能实现一般有以下两种方式 nbsp nbsp nbsp 普通上传 普通的附件上传是将本地文件的路径作为作为一个值放
  • Python:类的__dict__属性

    Python中类的 dict 属性 1 Python中一切皆对象 nbsp nbsp nbsp 不管是内置的数据类型 内置函数 内置类 第三方类 还是自定义类都叫做对象 nbsp nbsp nbsp 一个对象就会有自己的方法或属性 只是说有
  • Python:处理XML文件汇总

    处理XML文件汇总 1 前面介绍了使用Python中的ElementTree库来解析 创建XML文件 nbsp nbsp nbsp 如果对这个库不了解的可以先去看看这个库 nbsp nbsp nbsp 地址 https mouse blog
  • Python:json数据与Python对象之间的转换

    json数据与Python对象之间的转换 1 前面介绍了在Python中如何处理json数据 主要使用了以下几个方法 nbsp nbsp nbsp dumps 将Python对象转换为JSON格式的字符串 nbsp nbsp nbsp du
  • 用结构体指针访问结构体中的结构体指针(结构体指针的嵌套)

    结构体中的结构体指针是使用 一 问题背景二 代码三 说明 一 问题背景 日常工作中没有编程的机会 xff0c 所以只看得懂代码 xff0c 现在需要重新写一段代码 xff0c 实现固定格式存储数据 xff0c 需要使用到结构体和结构体指针
  • MOOC —— Python语言基础与应用 by 北京大学 第五章 计算和控制流(一)

    第五章 计算和控制流 xff08 一 xff09 23 自动计算过程24 控制流程25 条件分支语句26 条件循环27 迭代循环28 上机练习 基本的计算程序测验题 23 自动计算过程 简单介绍了 冯 诺依曼结构计算机 xff0c 五大部件
  • 关于sort函数中的cmp参数的笔记(C++)

    C 43 43 中sort函数是经常会用到的一个函数 xff0c 主要的功能是排序 xff0c 可以给数组 xff0c 或者链表list 向量排序 sort first pointer first pointer 43 n cmp 在三个参
  • 16进制转10进制方法(初级)

    目标 xff1a 输入16进制字符串 xff0c 输出对应10进制数字 以下以一个题目给出方法 xff1b span class token comment span span class token comment coding in 2
  • 图像格式RGB与BGR互转

    在opencv中 xff0c 读取后图像的格式为BGR的 与其它的读取图像方式不同 xff0c 需要进行转换 基于python的切片特性 xff0c 可以快速进行转换 BGR to RGB opencv 转 常规img im 61 im 1
  • 深度学习框架Pytorch——学习笔记(九) 基础知识补充

    由于基础知识不牢固 xff0c 又学习了一下其他入门学习资料 pytorch中文手册 https github com zergtant pytorch handbook 入门基础补充 相比之前学过的东西 xff0c 一些常用的东西做了下补
  • 深度学习-CV基础知识笔记

    CNN卷积神经网络相关 分类 xff0c backbone LeNet 卷积神经网络的里程碑 由2个卷积层 2个池化层和2个全连接层组成 xff0c 卷积核大小是5 5 xff0c 池化层大小为2 2 xff0c 最后通过softmax输出
  • 目标检测基础算法框架代表

    目前的目标检测可以分为 单阶段 one stage xff0c 双阶段 two stage xff0c anchor free 三个方向 还有一个最近杀的比较疯的Transformer 还属于探索阶段 目前前沿检测框架是基础算法框架的衍生
  • Django 学习笔记 (二)dwebsocket

    dwebsocket 一次连接 xff0c 就可以直接发送 xff0c 不需要多次请求 安装 通过pip安装有问题 可直接下载git版 xff0c 将websocket文件复制到项目中 使用代码解释 django中 服务端 独立url数据通
  • 深度学习框架Pytorch——学习笔记(一)基础认识和实践

    深度学习框架Pytorch 学习笔记 xff08 一 xff09 记录在学习过程中 xff0c 学到的东西和遇到的问题 1 什么是Pytorch xff0c 为什么选择Pytroch xff1f pytorch是深度学习框架 xff0c 是