PyTorch的基本概念

PyTorch是一个基于Python的科学计算库,常用于深度学习研究,以其动态计算图、GPU支持和易用性著称。本文介绍了PyTorch的安装、基本概念,包括张量操作和自动微分,以及神经网络的实现流程,适合初学者入门。
摘要由CSDN通过智能技术生成

PyTorch的基本概念

一、什么是Pytorch,为什么选择Pytroch?

1. 什么是Pytorch

pytorch是一个基于Python的科学计算软件包,针对两组受众:

  • NumPy的替代品,可以使用GPU的强大功能
  • 深入学习研究平台,提供最大的灵活性和速度

PyTorch 是一个以Python 优先的深度学习框架,不仅能够实现强大的GPU 加速,同时还支持动态神经网络,这是现在很多主流框架比如Tensorflow 等都不支持的。

PyTorch 既可以看做加入了GPU 支持的numpy,同时也可以看成一个拥有自动求导功能的强大的深度神经网络,除了Facebook 之外,它还已经被Twitter、CMU 和Salesforce 等机构采用。

2. 为什么选择pytorch

面对如此多的深度学习框架,我们为何要选择PyTorch 呢?Tensorflow 不是深度学习框架默认的老大吗,为什么不直接选择Tensorflow 而是要选择PyTorch 呢?下面分4个方面来介绍为何要使用PyTorch。

(1)掌握一个框架并不能一劳永逸,现在深度学习并没有谁拥有绝对的垄断地位,就算是Google 也没有,所以只学习Tensorflow 并不够。同时现在的研究者使用各个框架的都有,如果你要去看他们实现的代码,至少也需要了解他们使用的框架,所以多学一个框架,以备不时之需。

(2)Tensorflow 与Caffe 都是命令式的编程语言,而且是静态的,首先必须构建一个神经网络,然后一次又一次使用同样的结构,如果想要改变网络的结构,就必须从头开始。但是对于PyTorch,通过一种反向自动求导的技术,可以让你零延迟地任意改变神经网络的行为,尽管这项技术不是PyTorch 独有,但目前为止它实现是最快的,能够为你任何疯狂想法的实现获得最高的速度和最佳的灵活性,这也是PyTorch 对比Tensorflow 最大的优势。

(3)PyTorch 的设计思路是线性、直观且易于使用的,当你执行一行代码时,它会忠实地执行,并没有异步的世界观,所以当你的代码出现Bug 的时候,可以通过这些信息轻松快捷地找到出错的代码,不会让你在Debug 的时候因为错误的指向或者异步和不透明的引擎浪费太多的时间。

(4)PyTorch 的代码相对于Tensorflow 而言,更加简洁直观,同时对于Tensorflow高度工业化的很难看懂的底层代码,PyTorch 的源代码就要友好得多,更容易看懂。深入API,理解PyTorch 底层肯定是一件令人高兴的事。一个底层架构能够看懂的框架,你对其的理解会更深。

最后,我们简要总结一下PyTorch 的特点:

  • 支持GPU;
  • 动态神经网络;
  • Python 优先;
  • 命令式体验;
  • 轻松扩展。

二、Pytroch的安装

到这个网站根据硬件情况查看所需要安装的pytorch版本,然后用命令行安装
https://pytorch.org/get-started/locally/
在这里插入图片描述

三、配置Python环境

安装python解释器

四、准备Python管理器

安装anaconda,安装一些必要的包

五、通过命令行安装PyTorch

找到对应的pytorch安装命令,在命令行中输入进行安装
在这里插入图片描述

六、PyTorch基础概念

根据此网址学习pytorch基础知识
使用PYTORCH深度学习:60分钟闪电战
https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html
在这里插入图片描述

  1. tensor
    tensor与NumPy的ndarray类似,另外还有Tensors也可用于GPU以加速计算。
from __future__ import print_function
import torch

#构造一个未初始化的5x3矩阵:
x = torch.empty(5, 3)  

#构造一个随机初始化的矩阵:
x = torch.rand(5, 3)

#构造一个矩阵填充的零和dtype long:
x = torch.zeros(5, 3, dtype=torch.long)

#直接从数据构造张量tensor
x = torch.tensor([5.5, 3])

#或者根据现有的张量创建张量。除非用户提供新值,否则这些方法将重用输入张量的属性,例如dtype
x = x.new_ones(5, 3, dtype=torch.double)
print(x)
x = torch.randn_like(x, dtype=torch.float)
print(x)
#得到它的大小:
print(x.size())   #torch.Size 实际上是一个元组,因此它支持所有元组操作
  1. 各种操作
    (1)增加
#增加:语法1
y = torch.rand(5, 3)
print(x + y)

#增加;语法2
print(torch.add(x, y))

#增加:提供输出张量作为参数
result = torch.empty(5, 3)
torch.add(x, y, out=result)
print(result)

#增加:就地(in-place)
#add x to y
y.add(x)
print(y)

注意:任何使原位张量变形的操作都是用_后固定的。例如:x.copy_(y),x.t_(),将改变x。

#切片,输出x的第一列
print(x[:, 1])

(2)调整大小
如果要调整张量/重塑张量,可以使用torch.view

#调整大小:如果要调整张量/重塑张量,可以使用torch.view:
x = torch.randn(4, 4)
y = x.view(16)
z = x.view(-1, 8) #大小-1是从其他维度推断出来的
print(x.size(), y.size(), z.size())

#如果你有一个元素张量,用于.item()获取值作为Python数字
x = torch.randn(1)
print(x)
print(x.item())
  1. NumPy Bridge
    将Torch Tensor转换为NumPy阵列(反之亦然)是一件轻而易举的事。
    Torch Tensor和NumPy阵列将共享其底层内存位置(如果Torch Tensor在CPU上),更改一个将改变另一个。
    (1)将Torch Tensor转换为NumPy数组
#将Torch Tensor转换为NumPy数组
a = torch.ones(5)
print(a)

b = a.numpy()
print(b)

#输出结果
tensor([1., 1., 1., 1., 1.])
[1. 1. 1. 1. 1.]

#了解numpy数组的值如何变化
a.add_(1)
print(a)
print(b)

#输出
tensor([2., 2., 2., 2., 2.])
[2. 2. 2. 2. 2.]

(2)将NumPy数组转换为Torch Tensor

#将NumPy数组转换为Torch Tensor
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值