【Pytorch学习-1】pytorch简介

个人笔记链接:Pytorch简介
以下是个人笔记的内容,推荐使用链接阅读
1 Pytorch简介
1.1 Pytorch的大概
Pytorch不是简单的封装 Lua Torch 提供Python接口,而是对当下tensor之上的模块进行重构,并增加了最先进的自动求导系统,成为当下最流行的动态图框架。
PyTorch是一个基于Torch的Python开源机器学习库,用于自然语言处理等应用程序。它主要由Facebookd的人工智能小组开发,不仅能够实现强大的GPU加速,同时还支持动态神经网络,这一点是现在很多主流框架如TensorFlow都不支持的。 PyTorch提供了两个高级功能:
具有强大的GPU加速的张量计算(如Numpy)
包含自动求导系统的深度神经网络 除了Facebook之外,Twitter、GMU和Salesforce等机构都采用了PyTorch
1.2 常见的深度学习框架介绍
1.2.1 Theano
一个python库,用来定义、优化和计算数学表达式,特别是numpy.ndarray;z在解决包含大量数据问题时,使用Theano编程可以比C快很多,并且通过GPU加速能够比CPU快几个数量级。
但是:Theano不开发了,所以了解是什么即可。(不用过多的研究)
1.2.2 Tensorflow
Tensorflow主要用于机器学习与深度学习神经网络中,是一个非常基础的系统。其作为Theano的后继者,有着相似的设计理念,都是基于计算图实现自动微分系统。Tensorflow使用数据流图进行数值计算,图中的节点代表数学运算,而图中的边则代表这些节点之间传递的多维向量组(tensor–张量),但也存在一些如下问题:
过于复杂的系统设计
频繁变动的接口
接口设计过于晦涩难懂
文档混乱脱节
整体而言不完美但相当流行的深度学习框架,社区强大并且适合生产环境
1.2.3 Keras
Keras是一个高层神经网络API,由于纯python编写而成并使用TensorFlow,Theano及CNTK作为后端。Keras为支持快速实验而生,能够把想法迅速转换为结果。
入门最为简单,但是不够灵活并且使用受限
1.2.4 Caffe/Caffe2
Caffe是一个清晰、高效的深度学习框架,核心语言是C++ ,支持命令行、Python和Matlab接口,既可以到CPU上运行,也可以在GPU上运行。Caffe有点是简洁快速,但是本身设计缺少灵活性。
文档不够完善但是性能优异,几乎全平台支持(caffe2),适合生产环境。
1.2.5 MXNet
MXNet以其超强分布式支持,明显的内存、显存优化为人所称道。同样的模型,MXnet往往占用更小的内存与显存,在分布式环境下,MXNet展现出了明显优于其他框架的扩展性能。
文档较为混乱,但是分布式性能强大,语言支持最多,适合AWS云平台使用
1.2.6 CNTK
CNTK将神经网络描述成一个计算图的结构,叶子节点代表输入或者网络参数,其他节点代表计算步骤
相关社区不够活跃,但是性能突出,擅长语音方面的相关研究。
1.2.7 其他框架
总体来说有一定的用户及影响力,但是大多流行度和关注度不够,局限于一定的领域
1.3 属于动态图的未来
静态计算图:先定义再计算(Define and run), 一次定于多次运行。
动态计算图:在运过程中被定义,在运行时构建(define by run),可以多次构建多次运行。

Pytorch

import torch as t
from torch.autograd import Variable

N, D, H = 3, 4, 5

x = Variable(t.randn(N, D))
w1 = Variable(t.randn(D, H))
W2 = Variable(t.randn(D, H))

z = 10
if z > 0:
y = x.mm(w1)
else:
y = x.mm(w2)

Tensorflow

import tensorflow as tf
import numpy as np

N, D, H = 3, 4, 5
x = tf.placeholder(tf.float32, shape=(N, D))
z = tf.placeholder(tf.float32, shape=None)
w1 = tf.placeholder(tf.float32, shape=(D, H))
w2 = tf.placeholder(tf.float32, shape=(D, H))

def f1():
return tf.matmul(x,w1)

def f2():
return tf.matmul(x, w2)

y = tf.cond(tf.less(z, 0), f1, f2)

with tf.Session() as sess:
values = {
x: np.random.randn(N, D)
z: 10
w1: np.random.randn(D, H)
w2: np.random.randn(D, H)
}
y_val = sees.run(y, feed_dict=values)

猜你喜欢

转载自blog.csdn.net/Leomn_J/article/details/112513160