【深度学习】深度学习框架PyTorch的简单入门了解(未完待更)

说明

博主使用的是:

1、windows10
2、python3.6
3、pycharm

前言

        本博文主要介绍一下PyTorch框架中Tensor的一些基本的用法,关于PyTorch的安装可参考此篇博文,此篇博文就不多介绍关于PyTorch的安装了。


一、博主有话讲

        PyTorch是一款以Python语言主导开发的轻量级深度学习框架。另外关于深度学习的一些常见的框架,可以参考博主此篇大体介绍。PyTorch的简洁设计使得它易于入门,在此不深入介绍、了解PyTorch,本文先介绍一些PyTorch的基础知识,使读者能够对有一个大致的了解,并能够用 PyTorch搭建一个简单的神经网络。
       Tensor是 PyTorch中重要的数据结构,可认为是一个高维数组。它可以是一个数(标量)、一维数组(向量)、二维数组(矩阵)或更高维的数组。Tensor和 numpy的ndarrays类似,但 Tensor可以使用GPU加速。 Tensor的使用和 numpy及MATLAB的接口十分相似,下面通过几个示例了解 Tensor的基本使用方法。

二、Tensor

2.1 构建矩阵

import torch as t
x = t.Tensor()# 构建一个5*3的矩阵,只是分配了空间,并未初始化
print(x)

在这里插入图片描述

2.2 均匀分布随机初始化二维数组

import torch as t
y = t.rand(5,3) # 使用[0,1]均匀分布随机初始化二维数组
print(y)
print(y.size()) # 查看y的大小
print(y.size()[0])# 查看列的个数,y.size()[0] = y.size()[1]

在这里插入图片描述

2.3 矩阵加法

import torch as t
x = t.rand(5,3)
y = t.rand(5,3) # 使用[0,1]均匀分布随机初始化二维数组
print(y)
print(y.size()) # 查看y的大小
print(y.size()[0])# 查看列的个数,y.size()[0] = y.size()[1]

# 加法第一种表示
#print(x+y)
# 加法第二种表示
# print(t.add(x,y)) #
# 加法的第三种写法
result = t.Tensor(5,3) # 指定加法结果的输出目标为result
ret = t.add(x,y,out=result) # 输出到结果result
print(ret)

在这里插入图片描述
加法说明:

import torch as t
x = t.rand(5,3)
y = t.rand(5,3) # 使用[0,1]均匀分布随机初始化二维数组

print('最初y:',y)
#print(y.size()) # 查看y的大小
#print(y.size()[0])# 查看列的个数,y.size()[0] = y.size()[1]
print('第一种加法,y的结果')
y.add(x) # 普通加法,不给变y的值
print(y)

print('第二种加法,y的结果')
y.add_(x) # inplace加法,y变了
print(y)

注意:函数名后面带下画线的函数会修改 Tensor本身。例如,x.add_(y)和x.t_()会改变x,但x.add(y)和x.t()会返回一个新的 Tensor,而x不变。关于Tensor的一些常用属性还有很多,这里就不一一列举了,具体用到那个一搜索基本都能get到的,
接下来就简单说明一下Tensor和Numpy的一些区别。

Tensor和 Numpy数组之间具有很高的相似性,彼此之间的互操作也非常简单高效。需要注意的是, Numpy和 Tensor共享内存。由于 Numpy历史悠久,支持丰富的操作,所以当遇到Tensor不支持的操作时,可先转成 Numpy数组,处理后再转回 tensor,其转换开销很小。


三、Autograd:自动微分

        深度学习的算法本质上是通过反向传播求导数PyTorch的 Autograd模块实现了此功能。在 Tensor上的所有操作, Autograd都能为它们自动提供微分,避免手动计算导数的复杂过程。
       autograd.Variable是Autograd中的核心类,它简单封装了Tensor,并支持几乎所有 Tensor的操作。 Tensor在被封装为Variable之后,可以调用它的backward实现反向传播,自动计算所有梯度。 Variable的数据结构如下图所示:在这里插入图片描述
Variable主要包含三个属性。

1、data:保存 Variable所包含的Tensor。
2、grad:保存data对应的梯度,grad也是 Variable,而不是 Tensor,它和data的形状一样。
3、grad_fn:指向一个 Function对象,这个 Function用来反向传播计算输入的梯度。

补充一点有关神经网络的知识:

Autograd实现了反向传播功能,但是直接用来写深度学习的代码在很多情况下还是稍显复杂, torch.nn是专门为神经网络设计的模块化接口。nn构建于Autograd之上,可用来定义和运行神经网络。nn.Module是nn中最重要的类,可以把它看作一个网络的封装,包含网络各层定义及forward方法,调用 forward(input)方法,可返回前向传播的结果。

四、小结

1、本篇博文旨在理论上了解Pytorch框架中的一些基本概念性知识。
2、未完待续

发布了213 篇原创文章 · 获赞 303 · 访问量 49万+

猜你喜欢

转载自blog.csdn.net/Jiajikang_jjk/article/details/100907202
今日推荐