1 Star 0 Fork 0

fakerlove / Pytorch

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

Pytorch学习

https://www.bilibili.com/video/BV1WS4y1r7d7学习视频

学习视频代码在NLPCode下面

我写的代码链接

第一章

着重讲解pytorch 的基本安装,pytorch张量的基础使用

第二章

讲解一下pytorch 常见api的调用,

还有使用pytorch 加载常见数据集,比如minist

pytorch 完成线性回归

pytorch 完成 手写数字的识别

第三章

RNN 就是使用

主要使用RNN模型,来实现文本情感类分析

主要有 文本情感类的数据准备,包括(分词,把英文字符串转换为 数字)

使用lstm对文本进行分析

下面进行第一章的讲解

1. 入门

1.1 安装环境

1.1.1 安装conda

1.1.2 安装cuda

CUDA Toolkit Archive | NVIDIA Developer。点击进入页面

image-20220220162008278

点击下载安装2.7G左右,下载很快的。

安装结束后,检查

image-20220220162306867

image-20220220162343242

image-20220220162400255

差不多就安装成功了

1.1.3 安装pytorch

pytorch.org

image-20220220162055434

选择自己安装的版本型号,和自己的平台。然后复制命令行,运行即可。

记得添加国内镜像,比如清华的

测试使用

import torch
print(torch.cuda.is_available())

返回True,则表示torch安装成功,cuda安装成功

1.2 基本知识

课程视频

课程教案也在当前目录下

1.2.1 张量Tensor

要介绍Tensor这个数据类型,我觉得有必要扯一下数学。

我们都知道:

标量(Scalar)是只有大小,没有方向的量,如1,2,3等

向量(Vector)是有大小和方向的量,其实就是一串数字,如(1,2)

矩阵(Matrix)是好几个向量拍成一排合并而成的一堆数字,如[1,2;3,4]

那么张量(Tensor)是什么呢?呵呵呵呵!大家估计也能猜出来!是按照三维排列的一堆数字?

是的。但是也不完全正确。

其实标量,向量,矩阵它们三个也是张量,标量是零维的张量,向量是一维的张量,矩阵是二维的张量。

  • 常数scaler,0阶张量
  • 向量,vector:1阶张量
  • 矩阵,matrix:2阶张量
import torch
x = torch.Tensor(2,3) # 构造一个2x3的矩阵,没初始化但仍然会有值
print(x)
y=torch.Tensor(4,2,3)
print(y)

image-20220220162711816

1. tensor创建方法

方法名 内容
torch.Tensor()
torch.empty(3,4) 创建3,4
torch.zeros([3,4])
torch.rand([3,4]) 生成随机数
torch.ones()

创建空数组

import torch
print(torch.empty(3,4))
print(torch.ones([3,4]))# 创建全为1的tensor
print(torch.zeros([3,4]))# 创建全为0 的tensor
print(torch.rand([3,4]))

创建任意数

torch.randint(low=0,high=3,size=[3,4])
# low是最低值,3是最大值,size是范围大小

2. tensor常用方法

方法名 内容
tensor.t() 转置
tensor.dim() 获取阶数
tensor.size() 获取tensor的大小
tensor.view() 改变tensor的形状大小,
torch.rand([3,4]) 生成随机数
tensor.max() 获取最大值
tensor.min()
tensor.permute() 维度的置换

张量属性

t1=torch.Tensor([3,4])
print(t1)
print(t1.item())

image-20220221152424081

测试

t2=torch.Tensor([3])
print(t2.item())

形状改变,tensor.view((2,3)),类似于numpy中的reshape(),是一种浅拷贝,仅仅是形状发生改变

t1 = torch.Tensor([[1, 2, 3], [4, 5, 6]])
print(t1.size())
t2 = t1.view((3, 2))
print(t2.size())
t1[1][1] = 100
print(t1)
# 浅拷贝,t1改变,t2也随之改变
print(t2)

image-20220221155859810

维数的置换

import torch
import numpy    as np

a=np.array([[[1,2,3],[4,5,6]]])

unpermuted=torch.tensor(a)
print(unpermuted.size())  #  ——>  torch.Size([1, 2, 3])

permuted=unpermuted.permute(2,0,1)
print(permuted.size())     #  ——>  torch.Size([3, 1, 2])

3. Tensor和numpy相互转化

import numpy as np
a=np.array([[1,2,3],[4,5,6]])
print(torch.Tensor(a))

4. tensor的数据类型

image-20220221170726047


# 为double类型
t5=torch.DoubleTensor([2,3,3,5])
print(t5)
# 整形
a=torch.IntTensor((2,4))
print(a)
b=torch.ones([3,2],dtype=torch.float32)
print(b)
# 强转,把 b的浮点型,转换成c的int类型
c=b.int()
print(c.dtype)

结果

tensor([2., 3., 3., 5.], dtype=torch.float64)
tensor([2, 4], dtype=torch.int32)
tensor([[1., 1.],
        [1., 1.],
        [1., 1.]])
torch.int32

5. Tensor和tensor的区别

torch.Tensor()

torch.Tensor()是Python类,更明确的说,是默认张量类型torch.FloatTensor()的别名,torch.Tensor([1,2]) 会调用Tensor类的构造函数__init__,生成单精度浮点类型的张量。

>>> a=torch.Tensor([1,2])
>>> a.type()
'torch.FloatTensor'

torch.tensor()

torch.tensor()仅仅是Python的函数,函数原型是:

torch.tensor(data, dtype=None, device=None, requires_grad=False)

其中data可以是:list, tuple, array, scalar等类型。 torch.tensor()可以从data中的数据部分做拷贝(而不是直接引用),根据原始数据类型生成相应的torch.LongTensor,torch.FloatTensor,torch.DoubleTensor。

>>> a = torch.tensor([1, 2])
>>> a.type()
'torch.LongTensor'

>>> a = torch.tensor([1., 2.])
>>> a.type()
'torch.FloatTensor'

>>> a = np.zeros(2, dtype=np.float64)
>>> a = torch.tensor(a)
>>> a.type()
torch.DoubleTensor

tensor.data和tensor一般没有区别,但是在计算梯度的时候会有点区别。

tensor.data是获取tensor中的数据

a=torch.ones([2,3],requires_grad=True)
print(a)
print(a.data)

tensor.numpy()

reqquire_grad=True不能厚直接转换,需要使用tensor.detach().numpy()能够实现对tensor中的数据进行深度拷贝,转换为ndarray类型

1.2.2 tensor的运算

Tensor的加法(四种)

a=torch.rand(5,3)
b=torch.rand(5,3)
print(a+b)
print(torch.add(a,b))
result = torch.Tensor(5,3)
print(torch.add(a,b,out=result))
print(b.add_(a))

image-20220220163155801

互换

import numpy as np
t3=torch.Tensor(np.arange(24).reshape((2,3,4)))
print(t3.size())
print(t3)
t4=t3.transpose(0,1)
print(t4.size())
print(t4)

image-20220221163333761

1.3 使用gpu加速

import torch
device=torch.device("cuda")
a=torch.zeros([2,3],device=device)
print(a)

结果

tensor([[0., 0., 0.],
        [0., 0., 0.]], device='cuda:0')

另一种

# 这种写法也可以转到gpu
b=torch.zeros([2,3])
b.to(device)

1.4 torchvision和torch的关系

很多基于Pytorch的工具集都非常好用,比如处理自然语言的torchtext,处理音频的torchaudio,以及处理图像视频的torchvision

torchvision包含一些常用的数据集、模型、转换函数等等。当前版本0.5.0包括图片分类、语义切分、目标识别、实例分割、关键点检测、视频分类等工具,它将mask-rcnn功能也都包含在内了。mask-rcnn的Pytorch版本最高支持torchvision 0.2.*,0.3.0之后mask-rcnn就包含到tensorvision之中了。

空文件

简介

暂无描述 展开 收起
Jupyter Notebook 等 2 种语言
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/fakerlove/pytorch.git
git@gitee.com:fakerlove/pytorch.git
fakerlove
pytorch
Pytorch
master

搜索帮助