深度学习入门(一)TensorFlow系统学习第一篇

Nov 2, 2017


最近做一个索尼公司的商业项目,要用到深度学习的内容,于是这里记录一些东西,方便查阅..

环境:macOS-10.13.4, Python-3.6, Tensorflow-1.4.1

参考: 《TensorFlow实战》

安装TensorFlow

以前写过,参考我的以前的一篇博文:MacOs下TensorFlow的安装和初探

Linux下很方便,直接:

$ sudo apt-get install python-pip python-dev
$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0-cp27-none-linux_x86_64.whl

就可以了,报错的话根据错误检查一下命令版本更新什么的就好了。

本次项目我准备使用我的阿里云Ubuntu服务器来完成,所以配套的Python和TensorFlow和C++和Linux配置环境都配好了。

然后如果你看到了这里,你是macOS系统而且下了python3.5以上,那么前面的都不用管了,https://pan.baidu.com/s/1PnZNs3DTri7MvGOSUKx10w,这个网盘里的whl文件下了之后,pip install这个文件就完全ok了。

TensorFlow模型

TensorFlow中的计算,是一个【有向图】的形式去表现的,每一个运算都是一个节点,运算和运算的连接桥梁叫做边,数据就在这个图里流来流去。流动的数据叫做张量,即Tensor,所以这个模型叫做TensorFlow。

比如一个有向图是这样的:

image

中间每个节点都是一个运算,比如MatMul就是矩阵乘法,Add就是加法,ReLU是激励函数,里面的每一条边,都是有向的,代表着数据朝什么方向流动,怎么流动等等。

这个有向图模型,就是以后每一个模型都要涉及的基本概念。

实现它的代码,可以像这个样子写(未补完,不可运行):

import tensorflow as tf
b = tf.Variable(tf.zeros([100]))                       # 初始化一个100维向量,均是0,作为b,即bias
W = tf.Variable(tf.random_uniform([784, 100], -1, 1))  # 生成一个784*100维的随机矩阵W
x = tf.placeholder(name = "x")                         # 输入的placeholder
relu = tf.nn.relu(tf.matmul(W, x) + b)                 # 激励函数,也就是弄出来三者之间的一个关系,这里的关系相当于y = W*x + b, W,x,b都是向量或矩阵,然后就可以输入大量的x和y来进行w和b的训练了
C = [....]											   # 根据relu计算Cost
s = tf.Session()									   # 得到结果的时候总是要生成一个会话
for step in range(0, 10):
	input = ....construct 100-D input array.....	   # 为输入创建一个100维的向量,即可以说是一个简单的训练集吧
	result = s.run(C, feed_dict={x: input})			   # 获取Cost,供给输入x
	print(step, result)

Session是提供给用户的接口,因为对绝大多数用户,他们都只会执行一个图里的一个子图,反复的计算。

因为计算图反复执行多次,数据即Tensor只是在计算图里过一遍就没了。Variable是个例外,它可以保留在内存里。

TensorFlow基本的运算操作

类型 示例
标量运算 Add、Sub、Mul、Div、Exp、Log、Greater、Less、Equal
向量运算 Concat、Slice、Split、Constant、Rank、Shape、Shuffle
矩阵运算 MatMul、MatrixInverse、MatrixDeterminant
带状态运算 Variable、Assign、AssignAdd
神经网络组件 SoftMax、Sigmoid、ReLU、Convolution2D、MaxPooling
储存、恢复 Save、Restore
队列及同步运算 Enqueue、Dequeue、MutexAcquire、MutexRelease
控制流 Merge、Switch、Enter、Leave、NextIteration

方便以后查阅我展开再写一遍:

  • 标量运算
    • Add
    • Sub
    • Mul
    • Div
    • Exp
    • Log
    • Greater
    • Less
    • Equal
  • 向量运算
    • Concat
    • Slice
    • Split
    • Constant
    • Rank
    • Shape
    • Shuffie
  • 矩阵运算
    • MatMul
    • MatrixInverse
    • MatrixDeterminant
  • 带状态运算
    • Variable
    • Assign
    • AssignAdd
  • 神经网络组件
    • SoftMax
    • Sigmoid
    • ReLU
    • Convolution2D
    • MaxPooling
  • 储存、恢复
    • Save
    • Restore
  • 队列及同步运算
    • Enqueue
    • Dequeue
    • MutexAcquire
    • MutexRelease
  • 控制流
    • Merge
    • Switch
    • Enter
    • Leave
    • NextIteration