三大深度学习框架的简单了解


简要记录一下我感兴趣且也比较流行的三大深度学习框架,分别是:Pytroch,tensorflow,paddle(百度飞桨)。

Pytorch

官方:PyTorch是是torch的python版本,是由Facebook开源的神经网络框架,专门针对 GPU 加速的深度神经网络(DNN)编程,是使用GPU和CPU优化的深度学习张量库。

(再介绍一下Torch:一个经典的对多维矩阵数据进行操作的张量(tensor )库)

那么什么是张量呢?

张量由一组成形为任意数量的数组的原始值组成。张量的等级是其维数。

简单的理解就是:矩阵的升级版,而矩阵就是向量的升级版。那么是干什么用的呢?

举例:规模最小的张量是0阶张量,即标量,也就是一个数。

当我们把一些数有序的排列起来,就形成了1阶张量,也就是一个向量

如果我们继续把一组向量有序的排列起来,就形成了2阶张量,也就是一个矩阵

把矩阵摞起来,就是3阶张量,我们可以称为一个立方体,具有3个颜色通道的彩色图片就是一个这样的立方体

把立方体摞起来,好吧这次我们真的没有给它起别名了,就叫4阶张量了,不要去试图想像4阶张量是什么样子,它就是个数学上的概念。

那张量是干什么用的呢?

用来表示数据的,这是我学习深度学习时感觉比较刷新三观的事,所有的数据竟然都可以用数字来表示,不管是图片,文字,还是视频,不过他背后的原理我还不清楚。张量的一部分数字就可以被称作特征,这概念以后经常用得到!

示例:

import torch 
x = torch.ones(2,3,4) (两个三行四列的矩阵)
print(x) 
tensor([[[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]],

       [[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]]])

三大特征:

1.简洁

PyTorch 的设计遵循tensor→variable(autograd)→nn.Module 三个由低到高的抽象层次,分别代表高维数组(张量)、自动求导(变量)和神经网络(层/模块)

2.易用

PyTorch的面向对象的接口设计来源于Torch,做调用API时比较方便!

3.动态

pytorch的计算图是动态的,可以根据计算需要实时改变计算图。(这是与Tensorflow最大的区别)

看个简单的代码!

# -*- coding: utf-8 -*-
#demo.py
import torch
import torch.nn.functional as F  # 主要实现激活函数
import matplotlib.pyplot as plt  # 绘图的工具
from torch.autograd import Variable #
# 生成伪数据
x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1)
y = x.pow(3) + 0.2*torch.rand(x.size())    #y=x³+b

# 变为Variable
x, y = Variable(x), Variable(y)

# 绘制数据图像
plt.scatter(x.data.numpy(), y.data.numpy())
plt.show()

Variable:在torch中的Variable就是一个存放会变化的值的地理位置,里面的值会不断变化,就是在计算图中的坐标。(torch是用tensor计算的,tensor里面的参数都是variable的形式)

其中torch.linspace是为了生成连续间断的数据,第一个参数表示起点,第二个参数表示终点,第三个参数表示将这个区间分成平均几份,即生成几个数据。因为torch只能处理二维的数据,所以我们用torch.unsqueeze给伪数据添加一个维度,dim表示添加在第几维。torch.rand返回的是[0,1)之间的均匀分布。

生成:

https://upload-images.jianshu.io/upload_images/6479023-7e835db421799c56.png?imageMogr2/auto-orient/strip|imageView2/2/w/640/format/webphttps://upload-images.jianshu.io/upload_images/6479023-7e835db421799c56.png?imageMogr2/auto-orient/strip|imageView2/2/w/640/format/webp

Tensorflow

TensorFlow 是一个开源的、基于 Python 的机器学习框架,它由 Google 开发,并在图形分类、音频处理、推荐系统和自然语言处理等场景下有着丰富的应用,是目前最热门的机器学习框架。

(深度学习库能够自动求导、开源、支持多种 CPU/GPU、拥有预训练模型,并支持常用的NN架构,如递归神经网络(RNN)、卷积神经网络(CNN)和深度置信网络(DBN)。)请记住缩写

特点:

  • 支持所有流行语言,如 Python、C++Java、R和Go。

  • 可以在多种平台上工作,甚至是移动平台和分布式平台。

  • 它受到所有云服务(AWS、Google和Azure)的支持。

  • Keras——高级神经网络 API,已经与 TensorFlow 整合。

  • 与 Torch/Theano 比较,TensorFlow 拥有更好的计算图表可视化。

  • 允许模型部署到工业生产中,并且容易使用。

  • 有非常好的社区支持。

  • TensorFlow 不仅仅是一个软件库,它是一套包括 TensorFlow,TensorBoard 和 TensorServing 的软件。

    看个简单的代码!

    1. 导入tensorflow,这将导入 TensorFlow 库,并允许使用其精彩的功能:

      import tensorflow as if
      
    2. 由于要打印的信息是一个常量字符串,因此使用 tf.constant:

      message = tf.constant('Welcome to the exciting world of Deep Neural Networks!')
      
    3. 为了执行计算图,利用 with 语句定义 Session,并使用 run 来运行:

      with tf.Session() as sess:
        print(sess.run(message).decode())
      

      4.最后是在会话中打印的信息:

      Welcome to the exciting world of Deep Neural Networks!
      

      其它输出的信息可以先不管。

      比较

      PyTorch相比TensorFlow,其最大的优点是建立的神经网络是动态的,相比静态的TensorFlow,它能更加有效地去处理一些问题,比如RNN变化时间长度的输出,TensorFlow相比PyTorch的有点在于分布式训练上。

Paddle(百度飞桨)

这个深度学习框架大体和上面两个差不多,但是这个是我目前正在认真学习的框架,原因无他,因为他的文档是中文的(可怜我是个英语渣渣),还有就是学习资源多且免费,非常适合学习。

详见请戳:


文章作者: 远方客
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 远方客 !
评论
 上一篇
Python画图神器之--pyecharts Python画图神器之--pyecharts
嗯,直接上代码再说明!|ू・ω・` ) # 导入相关包 import pandas as pd from pyecharts.charts import * from pyecharts import options as opts fro
2020-02-06
下一篇 
深度学习之初步入门 深度学习之初步入门
部分概念及专有名词 成本函数:个衡量模型准确率的指标,衡量依据为此模型估计X与Y间关系的能力。(来衡量AI输出与实际输出(历史数据)之间的差异,0为最好的) 降低方法: 1.梯度下降 一种求函数最小值的方法。通过每次数据集迭代之后优化模型的
2020-02-04 远方客
  目录