深度学习 Pytorch框架入门

周更!先祝各位国庆快乐!!!!


前言

        因为最近有个图像修复的项目原因,作者开始要学习深度学习了。工欲善其事,必先利其器。这一篇先熟悉一下Pytorch的一些基本操作,以便接下来我们的学些


一、Pytorch是什么?

        PyTorch是一个基于Python的科学计算库,它主要针对两类人群:NumPy的替代品,既可以使用GPU又可以进行自动微分的张量计算;以及深度学习研究人员,提供了灵活的高性能深度学习开发平台。

        PyTorch由Facebook人工智能研究院(FAIR)开源发布,自发布以来,得到了广泛的应用和支持。在它的设计中,特别注重了开发者的使用体验,包括模型构建的灵活性、调试工具的完善、文档的详细等。此外,PyTorch还提供了丰富的预处理和模型组件,使得用户可以更加专注于研究和实验。

        总的来说,PyTorch是一个功能强大、易于使用、适合研究和实验的深度学习框架。

二、基本操作

2.1导入库

代码如下:

import torch
import torch.nn as nn

2.2一些基本的使用 (生成矩阵、增加矩阵维度等)

先阐述一下张量的概念:不是你们想的麻辣烫哈,张量的维数等价于张量的阶数。
0维的张量就是标量->一个数,1维的张量就是向量->(a,b,c,...),2维的张量就是矩阵(这个用语言表示不了),大于等于3维的张量没有名称,统一叫做张量。

生成矩阵:

## 生成 其实就是矩阵
A = torch.tensor([[3,1],[2,2]])#tensor是pytorch中的基本数据结构,类似于numpy中的ndarray
A.size()
## 创建具有特定大小的张量
B = torch.Tensor(2,3)#创建一个2*3的张量,未初始化
B
## 创建与另一个张量相同大小和类型相同的张量
torch.ones_like(B)

        运行的结果如下: 

C = np.ones((3,3))
## 使用torch.as_tensor()函数
Ctensor = torch.as_tensor(C)#将numpy数组转换为张量
Ctensor#这里的Ctensor和C共享内存,如果修改Ctensor,C也会被修改

生成随机张量: 

        normal生成正态分布的张量:

## 生成随机数张量
torch.manual_seed(123)
D = torch.normal(mean = torch.arange(1,5.0),std=torch.arange(1,5.0))#生成一个正态分布的张量,torch.arange(1,5.0)表示均值,torch.arange(1,5.0)表示标准差,1,5.0表示生成的张量的大小
D

        rand_like函数生成尺寸相同的随机张量 :

## 生成和其它张量尺寸相同的随机数张量
torch.manual_seed(111)
E = torch.ones(2,3)
F = torch.rand_like(E)#生成一个和E尺寸相同的随机数张量
F

        arrange函数步长生成张量 :

## 使用torch.arange()生成张量
torch.arange(start=0, end = 10, step=2)

 运行结果:

关于张量大小:        

        设置张量尺寸:

## 使用tensor.reshape()函数设置张量的尺寸
G = torch.arange(16.0).reshape(4,4)
G

         给张量增加维度:

## torch.unsqueeze()返回在指定维度插入尺寸为1的新张量
H = torch.unsqueeze(G,dim = 0)#在第0维插入尺寸为1的新张量生维度!!!
H.shape

        运行结果:

2.3矩阵加减乘法 

## 在给定维度中连接给定的张量序列
I = torch.arange(6.0).reshape(2,3)
J = torch.linspace(0,10,6).reshape(2,3)
## 在0纬度连接张量
K = torch.cat((I,J),dim=0)
print("I: \n",I)
print("J: \n",J)
print("K: \n",K)
#做矩阵相加
L = torch.add(I,J)
print("L: \n",L)
#做矩阵x相乘
M = torch.mm(I,J.T) #2*3 3*2 = 2*2
print("M: \n",M)

        运行结果: 

2.4激活函数 

Pytorch中的激活函数有很多种,下面介绍几种比较常用的激活函数:

1.Sigmoid函数的输出值位于0到1之间,因此被广泛地用作分类问题中输出层的激活函数。当输出值趋近于1时,意味着该输入样本属于正类的概率较大;当输出值趋近于0时,意味着该输入样本属于负类的概率较大。因此,该函数非常适合二元分类任务。

                                                   

Sigmoid函数的优点是函数形式简单,易于求导,能够将输出值约束在0到1之间。但是,Sigmoid函数在梯度下降时有一个缺点,即容易出现梯度消失的问题,这会影响模型的训练效果。

2.tanh函数

        是一种常见的激活函数,它的函数形式为:tanh函数的输出值位于-1到1之间,相对于Sigmoid函数来说,它有以下优点:其输出值的均值接近于0,比Sigmoid函数更适合于中心化数据;tanh函数的导数比Sigmoid函数的导数更大,因此在相同步长的训练过程中,tanh函数训练模型更快。

与Sigmoid函数相同,tanh函数也有梯度消失的问题,因此在深度神经网络中,在选择激活函数时需要权衡考虑。

3.relu函数

ReLU(Rectified Linear Unit)是一种简单但广受欢迎的非线性激活函数,它的数学表达式为:

即当输入大于等于0时,输出为输入;当输入小于0时,输出为0。ReLU函数的图像如下所示:

ReLU函数的优点:

  1. 计算速度快,仅需比较输入和0的大小关系,不需要进行复杂的运算;
  2. 对于梯度的计算比较简单,不会出现梯度消失的问题;
  3. 可以解决梯度消失的问题,因为当输入为正数时,梯度为1,可以保留并传递梯度。

ReLU函数的缺点:

  1. 当输入为负数时,梯度为0,称为“激活死区”,会导致神经元无法更新;
  2. ReLU函数的输出范围为[0, +∞),不是对称的,有时可能会导致模型不够健壮。

因此,使用ReLU函数时,需要注意网络层数的选择,以及针对“激活死区”的一些改进方法。

以上是Pytorch中常用的几个激活函数,不同的激活函数可以对神经网络的训练效果产生不同的影响。

还有selu函数、relu6函数、softplus等等,这里作者不给大家一一介绍了直接看图。

## 激活函数
x = torch.linspace(-10,10,500)#linspace()函数用于生成等差数列,-10,10表示数列的起始值和终止值,100表示数列的长度
## Sigmoid激活函数
sigmoid = nn.Sigmoid()
ysigmoid = sigmoid(x)
## Tanh激活函数
tanh = nn.Tanh()
ytanh = tanh(x)
## SELU激活函数
selu = nn.SELU()
yselu = selu(x)
## ReLU激活函数
relu = nn.ReLU()
yrelu = relu(x)
## ReLU6激活函数
relu6 = nn.ReLU6()
yrelu6 = relu6(x)
## Softplus激活函数
softplus = nn.Softplus()
ysoftplus = softplus(x)

## 可视化激活函数
plt.figure(figsize=(14,7))
plt.subplot(2,3,1)
plt.plot(x.data.numpy(),ysigmoid.data.numpy(),"r-")
plt.title("Sigmoid")
plt.grid()
plt.subplot(2,3,2)
plt.plot(x.data.numpy(),ytanh.data.numpy(),"r-")
plt.title("Tanh")
plt.grid()
plt.subplot(2,3,3)
plt.plot(x.data.numpy(),yselu.data.numpy(),"r-")
plt.title("SELU")
plt.grid()
plt.subplot(2,3,4)
plt.plot(x.data.numpy(),yrelu.data.numpy(),"r-")
plt.title("Relu")
plt.grid()
plt.subplot(2,3,5)
plt.plot(x.data.numpy(),yrelu6.data.numpy(),"r-")
plt.title("ReLU6")
plt.grid()
plt.subplot(2,3,6)
plt.plot(x.data.numpy(),ysoftplus.data.numpy(),"r-")
plt.title("Softplus")
plt.grid()
plt.tight_layout()
plt.show()

 


总结

        深度学习其实是机器学习的一部分。作者感觉这里难度很高,不仅是数学方面,而且在配置环境方面也是比较麻烦的,作者捣鼓半天现在tensorflow以及pytorch都还是cpu运行的。不过用于学习刚好。因为难度大的原因,作者不能学的很快,只能跟着一本本书一步步的来,然后从中跟着码代码学习。不过下次作者将会用数据集来带着大家一起畅卷积游神经网络的。希望大家接下来能一起进步,一起探讨关于深度学习的内容。

        周更不易,感谢支持。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

朱笨笨

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值