最近看到一份不错的深度学习资源——Stanford中的CS20SI:《TensorFlow for Deep Learning Research》,正好跟着学习一下TensorFlow的基础,还是收获颇丰,随手整理成博客随时翻阅。

为什么选择TensorFlow?

自从12年AlexNet获得ImageNet大赛的冠军后,深度学习开始流行起来,也因为硬件的快速发展GPU并行计算配合易用的API,让深度学习以及神经网络大放光彩。

深度学习的框架其实有很多,目前来说最火的还要数Pytorch、TensorFlow以及Keras。其中Pytorch比较适合学术研究,自己搞着玩,如果工业实践就不太适合了。TensorFlow由于时间比较久,学起来比较困难,不过有完整的开发、部署方案,还有大量的github项目可供参考。Keras则是TensorFlow的一个高级API,同类的还有TensorFlow的TFLearn等等。

总结来说,如果你是学生,只是为了论文或者学习,那么推荐Pytorch;如果你是公司的开发者,想要在业务中使用深度学习,推荐直接使用TensorFlow,如果使用最新的1.12,那么官方的示例里面就已经是Keras了;如果你是从github上面下载了源码想要学习,那就得去学习对应版本的TensorFlow API了。

在总结一下Tensoflow的优点:

  • 易用性:有对应Python的API
  • 可移植性:一套代码就可以适应单个或者多个CPU、GPU、移动设备等
  • 灵活性:可以部署在树莓派、安卓、windows、ios、linux等上
  • 可视化:有tensorboard提供开发的可视化界面,方便跟踪调参
  • 检查点:可以通过检查点记录保存实验数据
  • 自动微积分:自动求解梯度
  • 庞大的社区:一年内拥有10000+的开发者,3000+的项目
  • 大量基于TensorFlow的项目代码

使用TensorFlow的公司包括:Google,OpenAI,DeepMind,SnapChat,Airbus,eBay等

基于TensorFlow可以做很多事情,比如图像CV、自然语言处理NLP、语音识别等等。

基础知识

1. 简化的API

下面就来学习下TensorFlow的基础知识,TensorFlow不仅提供了基础的语法,还提供了一些简化的API:

  • TF Learn,tf.contrib.learn,基于scikit-learn风格的API
  • TF Slim,tf.contrib.slim,轻量级的tf构建API,可以自动配置默认值,简化使用
  • Keras,更高级更抽象的API,使用Keras之后,就像叠积木一样创建模型,不过对于背后的原理隐藏的太深太深...

2. 数据流图

如果做过大数据或者接触过java8的流计算,对这种数据流图应该比较了解。就是我们在程序执行前,先构建好计算的流程框架,然后执行的时候现去读取数据分配资源执行计算。这样一方面把构建与计算分离,另一方面也可以代码自己做更深的优化。

比如上面的数据流图中,事先定义好整个网络的结构,然后计算的时候直接传入5和3,就能得到结果23了。

3. Tensor张量

张量,不是张亮,更不是麻辣烫,它是一种高维数据的统称。比如:

  • 0维的张量,我们也叫做标量scalar或者数字,
  • 1维的张量,叫做向量vector
  • 2维的张量,叫做矩阵matrix

因此TensorFlow,可以理解为Tensor+Flow,即张量的数据流。

4. 数据流图的例子

import tensorflow as tf

# 第一个例子,计算两个数的加法
a = tf.constant(2)
b = tf.constant(3)
x = tf.add(a, b)
with tf.Session() as sess:
print(sess.run(x))

在上面的代码中,就构建了一个最基本的数据流图的计算例子。

其中

a = tf.constant(2)
b = tf.constant(3)
x = tf.add(a, b)

就是在构建图。而想要拿到x的值,就必须新建一个session(这个时候才会分配资源),执行run方法(这个时候才会执行)。

5. tensorboard的使用

为了方便查看构建图,需要学会怎么使用TensorBoard。在上面的代码中,只需要增加Tensorboard的声明即可:

import tensorflow as tf

# 第一个例子,计算两个数的加法
a = tf.constant(2)
b = tf.constant(3)
x = tf.add(a, b) with tf.Session() as sess:
writer = tf.summary.FileWriter('./graphs', sess.graph)
print(sess.run(x)) writer.close()

然后在命令行中输入

tensorboard --logdir=/Users/xingoo/PycharmProjects/xxx/graphs

登录localhost:6006就可以看到下面的内容。

可以看到左边有描述每个节点的意思,点击add后,可以到关于add节点的描述。由于构建的图很简单,就是两个数相加,因此整个图只有三个圈圈。并且按照默认的操作进行了命名。

6. 更复杂点的例子

增加以下图的复杂度,并且同时对两个结果计算:

import tensorflow as tf

# tf.constant(value, dtype=None, shape=None, name='Const', verify_shape=False)

a = tf.constant([1, 3], name="a")
b = tf.constant([[0, 1], [2, 3]], name="b") x = tf.add(a, b, name="add")
y = tf.multiply(a, b, name="mul") with tf.Session() as sess:
writer = tf.summary.FileWriter('./graphs', sess.graph)
x, y = sess.run([x, y])
print(x)
print(y)
writer.close()

由于x、y是独立运算没有什么交集,因此在图中,他们是独立的两个操作。

7. 关于图

回头再来看看tensorFlow中的图到底是什么呢?当使用第5部分中的代码构建graph时,可以直接输出graph的定义:

import tensorflow as tf

a = tf.constant(2)
b = tf.constant(3)
x = tf.add(a, b) with tf.Session() as sess:
print(sess.graph.as_graph_def())

得到如下的内容:

node {
name: "Const"
op: "Const"
attr {
key: "dtype"
value {
type: DT_INT32
}
}
attr {
key: "value"
value {
tensor {
dtype: DT_INT32
tensor_shape {
}
int_val: 2
}
}
}
}
node {
name: "Const_1"
op: "Const"
attr {
key: "dtype"
value {
type: DT_INT32
}
}
attr {
key: "value"
value {
tensor {
dtype: DT_INT32
tensor_shape {
}
int_val: 3
}
}
}
}
node {
name: "Add"
op: "Add"
input: "Const"
input: "Const_1"
attr {
key: "T"
value {
type: DT_INT32
}
}
}
versions {
producer: 26
}

每个node基本都包含下面你的内容:

{
name:我们自己起的名字,如果没有则是op+自增的数,
op:操作
attr: 类型
attr:值 {
形状、初始值
}
}

通过上面的json,就能完美的组合出web中看到的图了。

至于graph到底怎么用,就看后面一节课的内容吧。

参考

CS 20SI: Tensorflow for Deep Learning Research

基于TensorFlow的深度学习系列教程 1——Hello World!的更多相关文章

  1. 基于TensorFlow的深度学习系列教程 2——常量Constant

    前面介绍过了Tensorflow的基本概念,比如如何使用tensorboard查看计算图.本篇则着重介绍和整理下Constant相关的内容. 基于TensorFlow的深度学习系列教程 1--Hell ...

  2. TensorFlow和深度学习入门教程(TensorFlow and deep learning without a PhD)【转】

    本文转载自:https://blog.csdn.net/xummgg/article/details/69214366 前言 上月导师在组会上交我们用tensorflow写深度学习和卷积神经网络,并把 ...

  3. TensorFlow和深度学习新手教程(TensorFlow and deep learning without a PhD)

    前言 上月导师在组会上交我们用tensorflow写深度学习和卷积神经网络.并把其PPT的參考学习资料给了我们, 这是codelabs上的教程:<TensorFlow and deep lear ...

  4. 建设基于TensorFlow的深度学习环境

    一.使用yum安装git 1.查看系统是否已经安装git git --version 2.yum 安装git yum install git 3.安装成功 git --version 4.进入指定目录 ...

  5. 碰到的问题——建设基于TensorFlow的深度学习环境

    1.解决jupyter notebook问题:socket.error: [Errno 99] Cannot assign requested address 首先要生成一个jupyter的配置文件: ...

  6. 大数据下基于Tensorflow框架的深度学习示例教程

    近几年,信息时代的快速发展产生了海量数据,诞生了无数前沿的大数据技术与应用.在当今大数据时代的产业界,商业决策日益基于数据的分析作出.当数据膨胀到一定规模时,基于机器学习对海量复杂数据的分析更能产生较 ...

  7. 使用腾讯云 GPU 学习深度学习系列之二:Tensorflow 简明原理【转】

    转自:https://www.qcloud.com/community/article/598765?fromSource=gwzcw.117333.117333.117333 这是<使用腾讯云 ...

  8. 深度学习系列 Part(3)

    这是<GPU学习深度学习>系列文章的第三篇,主要是接着上一讲提到的如何自己构建深度神经网络框架中的功能模块,进一步详细介绍 Tensorflow 中 Keras 工具包提供的几种深度神经网 ...

  9. 【深度学习系列3】 Mariana CNN并行框架与图像识别

    [深度学习系列3] Mariana CNN并行框架与图像识别 本文是腾讯深度学习系列文章的第三篇,聚焦于腾讯深度学习平台Mariana中深度卷积神经网络Deep CNNs的多GPU模型并行和数据并行框 ...

随机推荐

  1. Eclipse常用快捷键--摘录他人

    Eclipse常用快捷键 1几个最重要的快捷键 代码助手:Ctrl+Space(简体中文操作系统是Alt+/) 快速修正:Ctrl+1 单词补全:Alt+/ 打开外部Java文档:Shift+F2显示 ...

  2. github上用golang写的项目

    1.moby/moby docker的新马甲 2.kubernetes/kubernetes 分布式容器管理 3.grafana/grafana 一个可视化面板,有漂亮的仪表盘,多种数据来源,适合做系 ...

  3. 生信分析常用脚本(二)--SOAPdenovo

    1.SOAPDenovo配置文件示例 软件下载安装和使用:http://soap.genomics.org.cn/soapdenovo.html asm.cfg #maximal read lengt ...

  4. python 10 迭代器和三元运算符

    一.迭代器 1.迭代器协议:对象必须提供一种next方法,执行该方法要么返回迭代中的下一项,要么引起一个stopIteration异常,终止迭代 2.可迭代对象:实现了迭代器协议的对象 3.pytho ...

  5. gitlab简介与配置

    版本控制介绍 版本控制是指对软件开发过程中各种程序代码.配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一. 版本控制最主要的功能就是追踪文件的变更.它将什么时候.什么人更改了文件的什么 ...

  6. python 环境变量设置PYTHONPATH

    PYTHONPATH是Python搜索路径,默认我们import的模块都会从PYTHONPATH里面寻找. 打印PYTHONPATH: import os print sys.path >['' ...

  7. Maven引入自定义jar包

    1.将项目打成jar包  或者下载某个jar包  放在某个目录下(随便吧,桌面也行),这里是放在F:/  jar包为 alipay.jar 2.给jar包取个名字   用原名也行(maven打包默认会 ...

  8. 构造 this super

    构造方法 我们对封装已经有了基本的了解,接下来我们来看一个新的问题,依然以Person为例,由于Person中的属性都被private了,外界无法直接访问属性,必须对外提供相应的set和get方法.当 ...

  9. 解决redis连接错误:MISCONF Redis is configured to save RDB snapshots, but it is currently not able to...

    今天Redis服务器在连接redis数据库时突然报错:MISCONF Redis is configured to save RDB snapshots, but it is currently no ...

  10. CSS基础一

    css作用 css将内容和样式相分离,便于修改样式.HTML 写网页的内容,CSS写内容的样式 CSS构成 p{ /*p为标签,也可以称为选择器,选择包住的内容的格式*/ font-size:12px ...