https://www.bilibili.com/video/BV1WS4y1r7d7学习视频
第一章
着重讲解pytorch 的基本安装,pytorch张量的基础使用
讲解一下pytorch 常见api的调用,
还有使用pytorch 加载常见数据集,比如minist
pytorch 完成线性回归
pytorch 完成 手写数字的识别
RNN 就是使用
主要使用RNN模型,来实现文本情感类分析
主要有 文本情感类的数据准备,包括(分词,把英文字符串转换为 数字)
使用lstm对文本进行分析
下面进行第一章的讲解
CUDA Toolkit Archive | NVIDIA Developer。点击进入页面
点击下载安装2.7G左右,下载很快的。
安装结束后,检查
差不多就安装成功了
选择自己安装的版本型号,和自己的平台。然后复制命令行,运行即可。
记得添加国内镜像,比如清华的
测试使用
import torch
print(torch.cuda.is_available())
返回True,则表示torch安装成功,cuda安装成功
课程教案也在当前目录下
要介绍Tensor这个数据类型,我觉得有必要扯一下数学。
我们都知道:
标量(Scalar)是只有大小,没有方向的量,如1,2,3等
向量(Vector)是有大小和方向的量,其实就是一串数字,如(1,2)
矩阵(Matrix)是好几个向量拍成一排合并而成的一堆数字,如[1,2;3,4]
那么张量(Tensor)是什么呢?呵呵呵呵!大家估计也能猜出来!是按照三维排列的一堆数字?
是的。但是也不完全正确。
其实标量,向量,矩阵它们三个也是张量,标量是零维的张量,向量是一维的张量,矩阵是二维的张量。
import torch
x = torch.Tensor(2,3) # 构造一个2x3的矩阵,没初始化但仍然会有值
print(x)
y=torch.Tensor(4,2,3)
print(y)
方法名 | 内容 | |
---|---|---|
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是范围大小
方法名 | 内容 | |
---|---|---|
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())
测试
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)
维数的置换
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])
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
print(torch.Tensor(a))
# 为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
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类型
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))
互换
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)
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)
很多基于Pytorch的工具集都非常好用,比如处理自然语言的torchtext,处理音频的torchaudio,以及处理图像视频的torchvision。
torchvision包含一些常用的数据集、模型、转换函数等等。当前版本0.5.0包括图片分类、语义切分、目标识别、实例分割、关键点检测、视频分类等工具,它将mask-rcnn功能也都包含在内了。mask-rcnn的Pytorch版本最高支持torchvision 0.2.*,0.3.0之后mask-rcnn就包含到tensorvision之中了。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。