TensorFlow——入门基础

TensorFlow 原理:
TensorFlow 使用 Graph 来描述 计算任务 ,图中的节点被称之为 op. 一个op可以接受0或多个 tensor 作为输入,也可产生0或多个tensor作为输出.任何一个Graph要想运行,都必须借助上下文 Session .通过Session启动Graph,并将Graph中的op分发到CPU或GPU上,借助Session提供执行这些op.op被执行后,将产生的tensor返回.借助Session提供的 feed fetch 操作,我们可以为op赋值或者获取数据.计算过程中,通过变量 (Variable )来维护计算状态.
1、TensorFlow基本概念
基本概念 
类型
描述
用途
Session
会话
图必须在称之为“会话”的上下文中执行。会话将图的op分发到诸如CPU或者GPU上计算
Graph
描述计算过程
必须在Session中启动
tensor
数据(张量)
数据类型之一,代表多维数组
op
操作
图中的节点被称之为op,一个op获得0或者多个Tensor,执行计算,产生0或者多个Tensor
Variable
变量
数据类型之一,运行过程中可以被改变,用于维护状态
feed
赋值
为op的tensor赋值
fetch
取值
从op的tensor中取值
Constant
常量
数据类型之一,不可变


2、计算图(Graph)
(1)在TensorFlow中,系统会自动维护一个默认的计算图,通过 tf.get_default_graph 函数可以获取当前默认的计算图
# 通过 a.graph 可以查看张量所属的计算图。因为没有特意指定,所以这个计算图
# 应该等于当前默认的计算图。所以下面这个操作输出值为 True
print (a.graph is tf. get_default_graph ())
(2)TensorFlow支持通过tf.Graph函数来生成新的计算图
g1=tf. Graph ()
with g1. as_default (): # 在计算图 g1 中定义变量 ’v' ,并设置初始值为 0
v=tf. get_variable ( 'v' , initializer =tf. zeros_initializer ([ 1 ]))

3、创建图和启动图
创建一个图并在Session中执行(TensorFlow实现一个简单的矩阵乘法)
import tensorflow as tf # 引入 TensorFlow
v1=tf. constant ([[ 2 , 3 ]]) # 创建一个常量 v1 ,它是一个 1 2 列的矩阵
v2=tf. constant ([[ 2 ],[ 3 ]]) # 创建一个常量 v2 ,它是一个 2 1 列的矩阵
# 创建一个矩阵乘法,创建乘法后,是不会立即执行的,要在会话中执行
product=tf. matmul (v1,v2)
sess=tf. Session () # 定义一个会话
result=sess. run (product) # 运算乘法,得到结果
print (result) # 打印结果 # 结果为 [[13]]
sess. close () # 关闭会话

4、 创建一个变量,并用for循环对变量进行赋值操作
TensorFlow使用Variables来维护图执行过程中的状态信息
import tensorflow as tf # 引入 TensorFlow
num=tf. Variable ( 0 , name = 'count' ) # 创建一个变量 num,初始化为0
new_value=tf. add (num, 10 ) # 创建一个加法操作,把当前数字加 10
op=tf. assign (num,new_value) # 创建一个赋值操作,把 new_value 赋值给 num
# 使用Python的上下文管理器机制,在运行完毕后,会话会自动关闭
with tf. Session () as sess:
sess. run (tf. global_variables_initializer ()) # 初始化变量
print (sess. run (num)) # 打印最初的 num
for i in range ( 5 ): # 创建一个 for 循环,每次给 num+10 ,并打印出来
sess. run (op)
print (sess. run (num))
# 输出结果如下
'''
0
10
20
30
40
50
'''
5、通过feed设置placeholder的值
import tensorflow as tf
input1=tf. placeholder (tf.float32) # 创建一个变量占位符 input1
input2=tf. placeholder (tf.float32) # 创建一个变量占位符 input2
# 创建一个乘法操作,把 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] }))
# 结果为 253.0

6、通过Fetch在会话中同时设置多个op
import tensorflow as tf
input1=tf. constant ( 3.0 ) # 设置三个常量
input2=tf. constant ( 2.0 )
input3=tf. constant ( 5.0 )
add=tf. add (input2,input3) # 加法操作
mul=tf. multiply (input1,add) # 乘法操作
with tf. Session () as sess:
result=sess. run ([mul,add]) # 在sess的运算中可以取回多个tensor
print (result)
# 结果为 [21.0, 7.0]

7、TensorFlow简单示例(实现单变量线性回归)
import tensorflow as tf
import numpy as np
#随机生成训练集
x_data=np.random. rand ( 100 ) # 使用 numpy 生成 100 随机点
y_data=x_data* 0.1 + 0.2

# 构造一个线性模型
b=tf. Variable ( 0. ) # 设置参数变量并初始化为 0
k=tf. Variable ( 0. )
y=k*x_data+b

# 二次代价函数(损失函数)
loss=tf. reduce_mean (tf. square (y_data-y))
# 定义一个梯度下降法来进行训练的优化器
optimizer=tf.train. GradientDescentOptimizer ( 0.2 ) #0.2 表示学习率
# 最小化代价函数
train=optimizer. minimize (loss)

init=tf. global_variables_initializer () # 初始化变量
with tf. Session () as sess:
sess. run (init) # 在会话里运行初始化变量
for step in range ( 201 ): # 迭代训练 200
sess. run (train)
if step% 20 == 0 : # 每迭代 20 次输出 k b 的值
print (step,sess. run ([k,b]))

结果:

8、TensorFlow实现神经网络向前传播算法
import tensorflow as tf
# 声明 w1 w2 两个变量
# 通过 seed 参数设定了随机种子,可以保证每次运行得到的结果一样
# 生成一个 2*3 的矩阵,矩阵中的元素是均值为 0 ,标准差为 1 的随机数
w1=tf. Variable (tf. random_normal ([ 2 , 3 ], stddev = 1 , seed = 1 ))
w2=tf. Variable (tf. random_normal ([ 3 , 1 ], stddev = 1 , seed = 1 ))
'''
# 将输入的特征向量定义为一个常量
x=tf.constant([[0.7,0.9]]) #x 是一个 1*2 的矩阵
'''
# 定义 placeholder 存放输入数据
x=tf. placeholder (tf.float32, shape =( 3 , 2 ), name = 'x_input' ) #3 2 列的样例数据

# 通过前向传播算法获得神经网络的输出
a=tf. matmul (x,w1)
y=tf. matmul (a,w2)

with tf. Session () as sess:
init_op=tf. global_variables_initializer () # 初始化所有的变量
sess. run (init_op)
print (sess. run (y, feed_dict ={x:[[ 0.7 , 0.9 ],[ 0.1 , 0.4 ],[ 0.5 , 0.8 ]]}))

# 结果为
'''
[[3.957578 ]
[1.1537654]
[3.1674924]]
'''

注:
(1)TensorFlow目前支持的所有随机数生成器

(2)



TensorFlow游乐场 https:// playground.tensorflow.org
参考资料:《TensorFlow实战Google深度学习框架》



猜你喜欢

转载自blog.csdn.net/asialee_bird/article/details/80009729