使用graphs 表示计算任务;
会话Session的上下文context中执行图
tensor表示数据
变量Variable维护状态
feed和fetch为任意的操作赋值或获取数据
使用图表示计算任务,图中的节点为OP(操作),一个op获得0个或多个tensor
import tensorflow as tf
第一步:定义op
m1=tf.constant([[3,3]]) #创建常量OP
m2=tf.constant([[2],[3]])
product=tf.matmul(m1,m2) #矩阵乘法op,将m1,m2传入
说明:m1是(1,2)的shape, m2是(2,1)的shape
第二步定义会话——原始写法
sess=tf.Session()
result=sess.run(product) #调用乘法op,来执行乘法运算
print(result)
sess.close()
流行写法:
with tf.Session() as sess:
result=sess.run(product)
print(result)
结果是:
[[15]]
定义常量op
tf.constant([[3,3]])
矩阵乘法op
tf.matmul(m1,m2)
import tensorflow as tf
x=tf.Variable([1,2]) #变量op
a=tf.constant([3,3])
其中x是’Variable:0’ shape=(2,),a是’Const:0’ shape=(2,)
sub=tf.subtract(x,a) #减法op
add=tf.add(x,sub) #加法op
对计算图进行变量初始化,否则会报这个error
tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized value Variable
init=tf.global_variables_initializer()
启动图,分别执行两个op,不过这里发现太麻烦了,一次只能执行一个op
with tf.Session() as sess:
sess.run(init)
print(sess.run(sub)
print(sess.run(add)
state=tf.Variable(0,name='counter')
new_value=tf.add(state,1) #作用使得state加1
update=tf.assign(state,new_value)# 把new_value赋值给state,它是一个赋值op
init=tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
print(sess.run(state))
for _ in range(5):
sess.run(update)
print(sess.run(state))
结果是
0
1
2
3
4
5
赋值op,后置位赋值给前置位
tf.assign(state,new_value)
变量op
x=tf.Variable([1,2])
减法op
sub=tf.subtract(x,a)
加法op
add=tf.add(x,sub)
定义输入变量
input1=tf.constant(3.0)
input2=tf.constant(2.0)
input3=tf.constant(5.0)
加法op
add=tf.add(input2,input3)
逐项乘法op
mul=tf.multiply(input1,add)
启动图(可以同时执行多个op)
with tf.Session() as sess:
result=sess.run([mul,add])
print(result)
定义量个输入,不过此处不定义op了,而是定义占位符
input1=tf.placeholder(tf.float32)
input2=tf.placeholder(tf.float32)
逐项乘法op
output=tf.multiply(input1,input2)
启动图,喂入数据,以字典的形式对占位符赋值
with tf.Session() as sess:
print(sess.run(output,feed_dict={input1:[7.0],input2:[2.0]}))
结果
[14.]
import tensorflow as tf
import numpy as np
x_data=np.random.rand(1000)
y_data=x_data*0.1+0.2
这里根据样本点x_data生成真实值y_data
b=tf.Variable(0.)
k=tf.Variable(0.)
y=k*x_data+b
均方误差
loss=tf.reduce_mean(tf.square(y_data-y))
说明 tf.reduce_mean求均值,tf.square求平方
optimizer=tf.train.GradientDescentOptimizer(0.2)
train=optimizer.minimize(loss)
init=tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init) #初始化
#迭代
for step in range(201):
sess.run(train)
if step%20==0:
print(step,sess.run([k,b]))
说明:从train开始走,然后触发loss,调用y_data和y的op
接着得出结果后,拉起optimizer的op最后把结果赋值给train