1.三个基本概念
1).计算模型——计算图(tf.Graph):所有TensorFlow的程序都会通过计算图的形式表示。计算图的每一个节点都是一个运算,而计算图上的边则表示了运算之间的数据传递关系;同时还保存了运行每个运算的设备信息以及运算之间的依赖关系。计算图提供了管理不同集合的功能,并且TensorFlow会自动维护五个不同的默认集合。
2).数据模型——张量(tf.Tensor):TensorFlow中所有运算的输入、输出都是张量。张量本身并不存储任何数据,只是对运算结果的引用。
3).运算模型——会话(tf.Session):管理了一个TensorFlow程序所拥有的系统资源,所有的运算要通过会话执行。为解决异常退出时资源释放的问题,TensorFlow可以通过python的上下文管理器来使用会话。
#创建一个会话,并通过python中上下文管理器来管理该会话
with tf.Session() as sess:
sess.run
#不需要调用“Session.close()”来关闭会话
2.TensorFlow训练神经网络步骤:
1). 定义神经网络结构和前向传播输出结果2).定义损失函数及反向传播优化算法
3).生成会话(tf.Session)并在训练数据上反复运行反向传播优化算法
3.加法计算的实现、通过变量实现前向传播、通过placeholder实现前向传播
import tensorflow as tf
print("tensorflow version: ", tf.VERSION) # 1.2.1
#加法计算
def func00_def(): #函数func00_def
a = tf.Variable([1.0, 2.0], name="a") # 声明a、b两个变量
b = tf.Variable([2.0, 3.0], name="b")
# result = tf.placeholder(tf.float32, shape=(1, 2), name="result"); 三个属性:类型、维度、名字
g = tf.Graph() # 计算图
with tf.Session() as sess: # 创建会话,通过Python中的上下文管理器来管理会话,自动释放资源
with g.device('/cpu:0'): # 指定计算运行的设备
init_op = tf.global_variables_initializer()
sess.run(init_op)
result = a + b
print(sess.run(result))
#通过变量实现神经网络的参数并实现前向传播
def func01_constant():
w1 = tf.Variable(tf.random_normal([2, 3], stddev=1,seed=1)) #声明w1、w2两个变量。2*3的矩阵
w2 = tf.Variable(tf.random_normal([3, 1], stddev=1,seed=1)) #3*1的矩阵 seed设定随机种子,确保每次运行结果一致
x = tf.constant([[0.7, 0.9]]) #将输入的特征向量定义为一个常量。x是一个1*2的矩阵
a = tf.matmul(x, w1) #前向传播算法获得神经网络的输出
y = tf.matmul(a, w2)
sess = tf.Session()
init_op = tf.global_variables_initializer() #初始化
#init_op = tf.initialize_all_variables()
sess.run(init_op)
print(sess.run(y))
#通过placeholder实现前向传播算法
def func02_placeholder():
w1 = tf.Variable(tf.random_normal([2, 3], stddev=1,seed=1))
w2 = tf.Variable(tf.random_normal([3, 1], stddev=1,seed=1))
#定义placeholder作为存放输入数据的地方,维度不一定要定义,但维度确定可以降低出错的概率
x = tf.placeholder(tf.float32, shape=(3, 2), name="input")
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)
sess = tf.Session()
init_op = tf.global_variables_initializer()
#init_op = tf.initialize_all_variables()
sess.run(init_op)
# placeholder的赋值
print(sess.run(y, feed_dict={x: [[0.7, 0.9],[0.1,0.4],[0.5,0.8]]}))
func00_def() #函数调用
func01_constant()
func02_placeholder()
输出:
'''tensorflow version: 1.2.1
[ 3. 5.]
[[ 3.95757794]]
[[ 3.95757794]
[ 1.15376544]
[ 3.16749239]]
'''
以上代码都是书上的实例,但也参考了http://blog.csdn.net/longji/article/details/69472310,博主总结得很到位。
其中,tf.initialize_all_variables已被弃用,使用了tf.global_variables_initializer代替,否则运行过程中会出现警告,要求更新。另外,使用神经网络解决分类问题主要有4个步骤:
1)提取问题中实体的特征向量作为神经网络的输入。
2)定义神经网络的结构,并定义如何从神经网络的输入得到输出(神经网络的前向传播算法)。
3)通过训练数据来调整神经网络中参数的取值(训练神经网络的过程)。
4)使用训练好的神经网络来预测未知的数据。