简要记录一下我感兴趣且也比较流行的三大深度学习框架,分别是: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)之间的均匀分布。
生成:
Tensorflow
TensorFlow 是一个开源的、基于 Python 的机器学习框架,它由 Google 开发,并在图形分类、音频处理、推荐系统和自然语言处理等场景下有着丰富的应用,是目前最热门的机器学习框架。
(深度学习库能够自动求导、开源、支持多种 CPU/GPU、拥有预训练模型,并支持常用的NN架构,如递归神经网络(RNN)、卷积神经网络(CNN)和深度置信网络(DBN)。)请记住缩写
特点:
可以在多种平台上工作,甚至是移动平台和分布式平台。
它受到所有云服务(AWS、Google和Azure)的支持。
Keras——高级神经网络 API,已经与 TensorFlow 整合。
与 Torch/Theano 比较,TensorFlow 拥有更好的计算图表可视化。
允许模型部署到工业生产中,并且容易使用。
有非常好的社区支持。
TensorFlow 不仅仅是一个软件库,它是一套包括 TensorFlow,TensorBoard 和 TensorServing 的软件。
看个简单的代码!
导入tensorflow,这将导入 TensorFlow 库,并允许使用其精彩的功能:
import tensorflow as if
由于要打印的信息是一个常量字符串,因此使用 tf.constant:
message = tf.constant('Welcome to the exciting world of Deep Neural Networks!')
为了执行计算图,利用 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(百度飞桨)
这个深度学习框架大体和上面两个差不多,但是这个是我目前正在认真学习的框架,原因无他,因为他的文档是中文的(可怜我是个英语渣渣),还有就是学习资源多且免费,非常适合学习。
详见请戳: