导读
对深度学习的需求不断增长。越来越多的科学家和开发人员加入了深度学习的行列。 假设你已经开始了你的深度学习之旅,并且已经在人工神经网络上玩了一段时间。或者,你只是想开始。不管是哪种情况,你都会发现自己有点左右为难。你已经读过各种深度学习框架和库,也许有两个非常突出。两个最受欢迎的深度学习库: Tensorflow和PyTorch。你不知道到底有什么区别。 |
www.arkai.net
01
Tensorflow 和 Pytorch的比较
你不知道到底有什么区别。别担心!这里是想帮你弄清楚Tensorflow和PyTorch。
第1点:
虽然Tensorflow和PyTorch都是开源的,但它们是由两个不同的向导创建的。Tensorflow基于Theano,由Google开发,而Pythorch基于Torch,由Facebook开发。
第2点:
两者之间最重要的区别是这些框架定义计算图的方式。当Tensorflow创建静态图时,Pythorch相信动态图。这是什么意思?在Tensorflow中,首先必须定义模型的整个计算图,然后运行ML模型。但是在PyTorch中,您可以在移动中定义/操作图形。在RNN中使用可变长度输入时,这一点特别有用。
第3点:
比坦萨学习火炬有更陡峭的曲线。PyTorch更像蟒蛇,构建ML模型感觉更直观。另一方面,要使用Tensorflow,您必须了解它的工作原理(会话、占位符等),因此学习Tensorflow比Pythorch要困难一些。
第4点:
Tensorflow背后的社区比Pythorch大得多。这意味着找到学习Tensorflow的资源变得更容易,也更容易找到问题的解决方案。此外,许多教程和mooc都涉及Tensorflow,而不是使用PyTorch。这是因为与Tensorflow相比,Pythorch是一个相对较新的框架。因此,在资源方面,您将发现关于Tensorflow的内容比PyTorch多得多。
第5点:
如果不提及TensorBoard,这种比较是不完整的。TensorBoard是一个出色的工具,它可以直接在浏览器中可视化ML模型。Pythorch没有这样的工具,尽管您可以始终使用Matplotlib之类的工具。不过,有一些集成可以让你在Pythorch中使用Tensorboard。但它不是本地支持的。
最后,Tensorflow对于生产模型和可伸缩性更好。它是为生产准备的。然而,Pythorch更容易学习,工作起来也更轻松,因此,对于激情项目和快速原型的构建来说相对更好。
好吧,够了!告诉我哪个更好?
没有正确的答案。(我知道,我也讨厌别人这么说)
事实上,有些人认为使用PyTorch更好,而有些人则认为使用Tensorflow更好。这两个框架都是很好的框架,背后有一个巨大的社区和大量的支持。他们都完成了任务。它们都是神奇的魔法棒,可以让你用机器学习魔法。
从以下5个PyTorch基本功能开始
--------------------------------------------
02
功能1 - Torch.device()
Pythorch是一个由Facebook开发的开源库,在数据科学家中非常流行。其崛起背后的一个主要原因是GPU对开发者的内置支持。
这个火炬装置允许您指定负责将张量加载到内存中的设备类型。函数需要指定设备类型的字符串参数。
你甚至可以传递像设备索引这样的序数。或者不指定Pythorch以使用当前可用的设备。
例如1.1,我们选择要在运行时存储张量的设备类型。注意,我们已经将设备类型指定为cuda,并且在同一字符串中附加了序号,并用“:”分隔。
示例1.2通过为设备类型和索引传入单独的参数来实现相同的结果。
在创建张量时定义设备类型
中的预期设备类型火炬装置()是cpu、cuda、mkldnn、opengl、opencl、ideep、hip、msnpu。要正确使用此方法,设备类型应存在于预期设备列表中。
让我们看看当我们尝试将GPU指定为设备类型时会发生什么。
示例1.3(a)-创建“gpu”类型设备实例时发生运行时错误
指定的设备类型应该在运行笔记本的计算机上可用。否则将导致如例1.3(b)所述的错误。
在1.3(b)中,我们使用需要NVIDIA GPU的cuda设备类型定义了张量。由于我们的机器没有任何可用的GPU,内核抛出了一个运行时错误。
示例1.3(b)-指定不存在的设备类型时发生运行时错误
03
功能2 - torch.view()
这个火炬视图()方法将张量(向量、矩阵或标量)的视图更改为所需的形状。转换后的张量修改了表示维度,但保留了相同的数据类型。
让我们跳进一个例子-
定义一个样本张量x并转换其维数以存储在另一个张量z中。
例2.1
在例2.1中,我们变换了表示为单行向量的4x5矩阵的维数。默认情况下,行主顺序连续打印行的元素。变换后的视图中的每个行元素的显示顺序与原始张量中的顺序相同。
此外,新张量的形状必须支持原始张量中相同数量的元素。不能在5 x 3视图中存储4 x 5形状的张量。
例如2.2,我们将使用-1来表示一个维度。Pythorch自动从其他维度解释未知维度。变换张量在大小和步幅上与原始张量兼容。
示例2.3-形状不正确
请注意,一次只有一个维度是可推断的。对多个维度使用-1只会导致歧义和运行时错误!
Pythorch只允许-1作为最多1个维度的可接受值。如果有多个维度作为-1传递,它将抛出一个运行时错误。
04
功能3 - torch.set_printoptions()
很多时候,您希望在执行某些任务之前打印张量的内容。为此,在笔记本中打印张量时,可能需要更改显示模式。
使用set_printoptions,您可以调整精度级别、线宽、结果阈值等属性。
在我们的例子中,我们将使用一个表示20×30矩阵的张量。通常不需要在笔记本上显示如此巨大的矩阵。打印张量变量背后的一般用例是查看前几行和最后几行。
示例3.1(a)-使用默认打印选项打印
我们将根据我们的喜好,利用阈值、边缘项和线宽属性来改变张量的视觉表现。我们还可以使用precision属性更改小数点后要显示的位数。
示例3.1(b)-更新打印选项以显示更少的行
在这个方法中有3个配置文件可供我们使用:默认、微型和完整。将配置文件名与其他属性一起传递是一种错误的用法。在这种情况下,函数将忽略profile属性。
例3.2
05
功能4 - Tensor.backward()
张量用于简化机器学习管道中所需的常见任务。为了进行梯度下降,一种流行的损失最小化技术,我们需要计算梯度(召回-导数)与损失函数。
Pythorch通过在每个方法调用中存储渐变,用backward()方法简化了这一过程。注意:Pythorch仅在其require_grad属性设置为True时计算张量的渐变。
例4.1
我们将使用线性方程y=mx+c来求方程中每个变量的偏导数。
例4.1(a)
在调用y.backward()方法并打印computes渐变之后,我们可以访问张量x的.grad属性。
例4.1(b)
由于我们没有将require_grad选项设置为True,因此在调用m的.grad属性时不会得到结果。
再次调用y.backward()将导致yw.r.t张量的二阶微分。请注意,Pythorch累积存储渐变。
06
功能5 - Torch.linespace()
方法的作用是:返回包含一系列数字的一维张量。与随机生成数字的rand()函数不同,返回的数字是linspace()中算术级数序列的成员。
每个成员之间的差异由steps属性和范围(end-start)指定。
例5.1
输出张量包含50个等距数字,范围为1-10。dtype属性为int,因此不存储小数位数。
例5.2-out属性也可以用来指定张量来存储方法的结果。
请注意,在使用linspace()方法创建张量时,dtype值必须与输出张量定义的数据类型一致。
示例5.3-dtype属性不匹配
07
结束语
本文介绍了pytorchapi中提供的一些基本方法,以帮助您开始使用它。由于大部分实现都是从NumPy库中借来的,以构建Python开发人员现有的理解和经验,所以API很容易入门。
阅读完这些函数后,下一步是浏览官方文档。由于PyTorch是一个深入学习的库,因此强烈建议您在开始使用这些函数之前学习ML基础知识。
08
资源引用
Pythorch官方文件: https://pytorch.org/docs/stable/torch.html
python源代码: https://jovian.ml/aman-a-agarwal/01-tensor-operations/v/8?utm_source=embed#C3
![1fe0f813f6ef748ea7fc6b81710901da.gif](https://i-blog.csdnimg.cn/blog_migrate/8a97cdf1c612148dca6a8e532dd15642.gif)
![db39c3c88d245dd06ec30fa197550d36.png](https://i-blog.csdnimg.cn/blog_migrate/f2c3cfc3b890fab97758f5c976c17ca2.png)
![4e52d4214222bc26fd8272b324b94c3f.gif](https://i-blog.csdnimg.cn/blog_migrate/73a3af7fd428a2ccfc5ed4525b12dfc7.gif)