将UFLDL深度学习学了一遍之后,虽然完成了里边的大多数编程题,但是觉得matlab写程序有点low,本着看起来高大上的目的,决定好好钻研一下TensorFlow。TensorFlow的学习中借鉴了不少大牛的东西,如若侵权,请联系本文进行删除。
1. TensorFlow 是什么
是一个深度学习库,由 Google 开源,可以对定义在 Tensor(张量)上的函数自动求导。
Tensor(张量)意味着 N 维数组,Flow(流)意味着基于数据流图的计算,TensorFlow即为张量从图的一端流动到另一端。
它的一大亮点是支持异构设备分布式计算,它能够在各个平台上自动运行模型,从电话、单个CPU / GPU到成百上千GPU卡组成的分布式系统。
支持CNN、RNN和LSTM算法,是目前在 Image,NLP 最流行的深度神经网络模型。
2. TensorFlow 的优点
第一,基于Python,写的很快并且具有可读性。
第二,在多GPU系统上的运行更为顺畅。
第三,代码编译效率较高。
第四,社区发展的非常迅速并且活跃。
第五,能够生成显示网络拓扑结构和性能的可视化图。
3. TensorFlow 的安装
因为本人是windows 8.1 64位系统,且电脑上已经安装了python 3.5,所以是在此基础上进行安装的。1.升级pip
python.exe -m pip install --upgrade pip
2.下载
从http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy 下载相应的TensorFlow
3.安装
pip install ........whl
4.测试
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print(sess.run(a + b))
42
3. TensorFlow 的使用
1.TensorFlow的使用过程就是 : 建图-》启动图-》运行取值
- TensorFlow 用图来表示计算任务,图中的节点被称之为operation,缩写成op。
- 一个节点获得 0 个或者多个张量 tensor,执行计算,产生0个或多个张量。
- 图必须在会话(Session)里被启动,会话(Session)将图的op分发到CPU或GPU之类的设备上,同时提供执行op的方法,这些方法执行后,将产生的张量(tensor)返回。
2. TensorFlow中的重要理解点:
- 将计算流程表示成图;
- 通过Sessions来执行图计算;
- 将数据表示为tensors;
- 使用Variables来保持状态信息;
- 分别使用feeds和fetches来填充数据和抓取任意的操作结果;
import tensorflow as tf
import numpy as np
#Step 1: 建图 建图中的值并没有真正赋值,需要等会话启动通过run()进行赋值
# 用NumPy 随机生成100个数据
x_data=np.float32(np.random.rand(2,100)) #2行100列随机数 范围[0,1)
y_data=np.dot([0.100, 0.200], x_data)+0.300 #矩阵乘法
#构造一个线性模型
b=tf.Variable(tf.zeros([1]))
W=tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
y=tf.matmul(W,x_data)+b
#最小化方差
loss=tf.reduce_mean(tf.square(y-y_data))
optimizer=tf.train.GradientDescentOptimizer(0.5)
train=optimizer.minimize(loss)
#初始化变量
init=tf.initialize_all_variables()
#Step 2: 启动图
#启动图
sess=tf.Session()
sess.run(init)
#Step3 :运行取值
#拟合平面
for step in range(0,201):
sess.run(train)
if step % 20 == 0:
print (step, sess.run(W), sess.run(b))