前言
- 我的TensorFlow环境:
用Anaconda3-5.0.1搭建的: windows7 + python3.6.3 + tensorflow1.8.0 - 文档来源:
- 以下笔记中出现的程序代码均经过调试并运行成功的。很可能由于版本变更等原因,对部分代码进行过修改河调整。
简介
- 目的:了解TensorFlow
一个简单示例:
import tensorflow as tf
import numpy as np
# 使用 NumPy 生成假数据(phony data), 总共 100 个点.
x_data = np.float32(np.random.rand(2, 100)) # 随机输入,x_data为形状为2*100的数组
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()
# 启动图 (graph)
sess = tf.Session()
sess.run(init)
# 拟合平面
for step in range(0, 201):
sess.run(train)
if step % 20 == 0:
print (step, sess.run(W), sess.run(b))
# 得到最佳拟合结果 W: [[0.100 0.200]], b: [0.300]
TensorFlow是一个编程系统,使用图来表示计算任务。图中的节点处理Tensor。图必须在会话里被启动。 TensorFlow程序构建过程分为两个阶段:构建图和执行图。
基本使用
import tensorflow as tf
matrix1 = tf.constant([[3., 3.]]) #创建一个常量op
matrix2 = tf.constant([[2.], [2.]])#创建另一个常量op
product = tf.matmul(matrix1, matrix2)#创建一个矩阵乘法op,其输入是前两个op的输出
sess = tf.Session()#用会话启动默认图
result = sess.run(product)#执行
print (result)#打印结果
sess.close()#关闭会话资源,此为显示调用
#可采用with代码块来实现关闭:
#with tf.Session() as sess:
# result = sess.run([product])
# print result
- 构建过程
第一步:创建源节点(op)。源op不需要任何输入,其输出被传递给其他的op做运算。 TensorFlow python库有一个默认图(default graph),op构造器可以为其增加节点。 - 执行过程
启动会话,执行op,关闭会话资源
基本概念
- 变量:变量维护图执行过程中的状态信息
import tensorflow as tf
state = tf.Variable(0, name="counter")
one = tf.constant(1)
new_value = tf.add(state, one)
update = tf.assign(state, new_value)
init_op = tf.initialize_all_variables()#启动图前,变量必须经过初始化,添加一个初始化op到图中
with tf.Session() as sess:
sess.run(init_op)
print(sess.run(state))
for _ in range(3):
sess.run(update)
print(sess.run(state))
#输出
#0
#1
#2
#3
通常会将一个统计模型中的参数表示为一组变量。如一个神经网络中的权重可以存储在一个变量tensor中,在训练过程中,通过重复运行训练图来更新tensor。
- feed feed 机制, 该机制可以临时替代图中的任意操作中的 tensor 可以对图中任何操作提交补丁, 直接插入一个 tensor。
import tensorflow as tf
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = tf.multiply(input1, input2)
#tf.multiply():两个矩阵对应的数据相乘
#tf.matmul():矩阵乘法
with tf.Session() as sess:
print(sess.run([output], feed_dict={input1:[7.], input2:[2.]}))
#输出:
#[array([ 14.], dtype=float32)]