一、TensorFlow 简介
TensorFlow 是 Google 开源的一款人工智能学习系统。为什么叫这个名字呢?
Tensor 的意思是张量,代表 N 维数组;Flow 的意思是流,代表基于数据流图的计算。
把 N 维数字从流图的一端流动到另一端的过程,就是人工智能神经网络进行分析和处理的过程。
话说在 Android 占领了移动端后,Google开源了 TensorFlow,希望占领 AI 端。
TF的特点是可以支持多种设备,大到 GPU、CPU,小到平板和手机都可以跑起来 TF。
而且 TF 的使用很方便,几行代码就能开始跑模型,这让神经网络的入门变得非常简单。
二、TensorFlow 的安装
因为精力有限,此处只介绍在windows10平台上的安装,其他平台的安装方法google上一抓一大把。
我安装的方法是用最简单粗暴的方法:Anaconda
1.在Anaconda官网上下载64位
(注意自己的python的版本)
在安装过程注意的一点是勾选如下图中的两个选项,其他的默认即可:
2.安装成功后打开Anaconda,切换到environment功能栏,可以看到很多的工具包,搜索Tensorflow,勾选上,然后点击Apply,进行安装即可。
三、TensorFlow的基础运算
在搞神经网络之前,先让我们把 TensorFlow 的基本运算,也就是加减乘除搞清楚。
首先,TensorFlow 有几个概念需要进行明确:
图(Graph):用来表示计算任务,也就我们要做的一些操作。
会话(Session):建立会话,此时会生成一张空图;在会话中添加节点和边,形成一张图,一个会话可以有多个图,通过执行这些图得到结果。
如果把每个图看做一个车床,那会话就是一个车间,里面有若干个车床,用来把数据生产成结果。
Tensor:用来表示数据,是我们的原料。
变量(Variable):用来记录一些数据和状态,是我们的容器。
- feed和fetch:可以为任意的操作(arbitrary operation ) 赋值或者从其中获取数据。相当于一些铲子,可以操作数据。
形象的比喻是:把会话看做车间,图看做车床,里面用 Tensor 做原料,变量做容器,feed 和 fetch 做铲子,把数据加工成我们的结果。
创建图和运行图
下面我们创建一个图,并在 Session 中执行它,不用担心看不懂,每句代码都会注释,只有有编程基础,都能 OK:
#引入TensorFlow包
import tensorflow as tf
#创建一个常量v1,它是1*2的矩阵
v1=tf.constant([[2,3]])
#创建一个常量v2,它是2*1的矩阵
v2=tf.constant([[2],[3]])
#创建一个矩阵乘法,这里要注意的是,创建了乘法后,是不会立即执行的,要在会话中执行才行
product=tf.matmul(v1,v2)
#打印,得到的不是乘法的结果,而是得到乘法本身
print(product)
#定义一个会话
sess=tf.Session()
#运行乘法,得到结果
result=sess.run(product)
#打印结果
print(result)
#关闭会话
sess.close()
上面就是用 TensorFlow 进行了一个最简单的矩阵乘法。
创建一个变量,并用 for 循环对变量进行赋值操作
#创建一个变量num
num = tf.Variable(0,name = "count")
#创建一个加法操作,把当前的数字加10
new_value = tf.add(num,10)
#创建一个赋值操作,将new_value的值赋值给num
op = tf.assign(num,new_value)
#使用这种写法,在运行完毕以后,会话自动关闭
with tf.Session() as sess:
#初始化变量
sess.run(tf.global_variables_initializer())
#打印num的初始值
print(sess.run(num))
#创建一个for循环,每次给num+10,并打印出来
for i in range(5):
sess.run(op)
print(sess.run(num))
可以看到,除了变量创建稍微麻烦一些和必须建立 session 来运行,其他的操作基本和普通Python一样。
通过 feed 设置 placeholder 的值
有的时候,我们会在声明变量的时候不赋值,计算的时候才进行赋值,这个时候 feed 就派上用场了
#创建一个变量占位符input1
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
#创建一个乘法操作,把input1和input2相乘
new_value=tf.multiply(input1,input2)
#使用这种写法,运行完毕后,会话会自动关闭
with tf.Session() as sess:
#打印new_value的值,在运算时,用feed设置两个输入的值
print(sess.run(new_value,feed_dict={input1:23.0,input2:11.0}))