tensorflow(一)——创建图启动图,变量,fetch和feed,线性回归案例

1.创建图,启动图

tensorflow的运行规则是先创建一个计算图,然后再会话(session)中来启动图的计算

import tensorflow as tf
a = tf.constant([[3,3]])#创建一个一行两列的常量
b = tf.constant([[2],[3]])#创建一个两行一列的常量
product = tf.matmul(a,b)#创建一个矩阵相乘op
print(product)

执行上面的代码并不会输出具体的结果,只是输出这个tensor的属性,如果想输出具体的值,需要建立会话:

sess = tf.Session()#创建会话
result = sess.run(product)#这里会从下往上依次执行上面的中间三行代码
print(result)
sess.close()#关闭会话

当然,上述操作较为麻烦,我们可以使用with函数来简化代码:

with tf.Session() as sess:
    result = sess.run(product)
    print(result)

2.变量

x = tf.Variable([1,2])#定义变量
a = tf.constant([3,3])#定义常量
sub = tf.subtract(x,a)#减法op
add = tf.add(x,sub)#加法op
init = tf.global_variables_initializer()#初始化变量操作,在tensorflow中使用变量时一定要初始化,不然会报错
with tf.Session() as sess:
    sess.run(init)
    print(sess.run(sub))
    print(sess.run(add))

for循环更新变量值:

state = tf.Variable(0,name='counter')#定义变量并给它一个name
new_value = tf.add(state,1)
update = tf.assign(state,new_value)#赋值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))

3.fetch and feed

fetch就是指在会话中可以同时调用多个op

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)#数乘op
with tf.Session() as sess:
    result = sess.run([mul,add])#同时计算数乘和加法
    print(result)

有时候使用trnsorflow时我们先构建计算图,但并没有对图中的变量进行赋值,而是只占了位置,feed就是在后续启动图的时候对只占了位置的变量进行赋值

input1 = tf.placeholder(tf.float32)#占位
input2 = tf.placeholder(tf.float32)
output = tf.multiply(input1,input2)
with tf.Session() as sess:
    print(sess.run(output,feed_dict={input1:[8],input2:[2]}))#给两个输入喂(feed)具体的值

4.tensorflow简单案例-线性回归

这里用tensorflow做一个简单的线性回归案例

import numpy as np#引入numpy模块
x_data = np.random.rand(100)#生成100个随机数
y_data = x_data*0.1+0.2#对应的样本实际值

b = tf.Variable(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)#训练op,训练目标为最小化loss
init = tf.global_variables_initializer()

l = 201*[0]#初始化一个list l用来记录loss的变化情况
ki = 201*[0]#初始化一个list ki用来记录斜率的变化情况
bi = 201*[0]#初始化一个list bi用来记录偏置的变化情况
s = list(range(201))
with tf.Session() as sess:
    sess.run(init)
    for step in range(201):#进行201次梯度下降算法来优化参数
        sess.run(train)
        l[step]=sess.run(loss)#记录损失
        ki[step],bi[step]=sess.run([k,b])#记录斜率和偏置
        if step%20==0:#每20次输出一次k和b的值
            print(step,sess.run([k,b]))

import matplotlib.pyplot as plt#可视化
plt.plot(s,l,linewidth=2,color='red')
plt.plot(s,ki,linewidth=2,color='blue')
plt.plot(s,bi,linewidth=2,color='orange')

可以看到随着算法的进行,loss趋于0,k和b趋于正确值

发布了72 篇原创文章 · 获赞 37 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/xspyzm/article/details/103838208
今日推荐