占位符(placeholder)
当我们构建一个模型的时候,有时候我们需要在运行时候输入一些初始数据,这个时候定义模型数据输入在tensorflow中就是用placeholder(占位符)来完成。
使用以下代码来定义占位符:
import tensorflow as tf
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
c = tf.add(a,b)
Feed
当我们需要执行得到c的运行结果时候我们就需要在会话运行时候,通过feed来插入a与b对应的值:
with tf.Session() as sess:
result = sess.run(c, feed_dict={a:[3.], b:[4.]})#使用字典的形式赋值
print(result)
Fetch
前面提到的sess.run()
方法,其实就是fetch。
with tf.Session() as sess:
sess.run(init)
print(state)
实例:建立一个简单的线性回归模型
先看代码:
import tensorflow as tf
import numpy as np
#使用numpy生成100个随机点
x = np.random.rand(100)
y_data = 0.1 * x + 0.2
#构造一个线性回归模型
b = tf.Variable(0.)
k = tf.Variable(0.)
y = k * x + b #回归拟合y_data
#损失函数
loss = tf.reduce_mean(tf.square(y_data - y))#计算y与y_data的差值
#使用梯度下降法来进行训练的优化器
optimizer = tf.train.GradientDescentOptimizer(0.2)
#最小化损失函数
train = optimizer.minimize(loss)
#loss越小,b和k越接近0.1和0.2
#初始化
init = tf.global_variables_initializer()
#run
with tf.Session() as sess:
sess.run(init)
for step in range(201): #训练5次
sess.run(train)
if step%20 == 0:#每20次输出一次k和b
print(sess.run([k,b]))
算法思路:随机生成100个随机数,带入一次函数y=k0.1x+0.2。使用tf构造回归函数y=kx+b拟合这条直线。随着训练次数的增加,k和b越接近真实值。
执行结果: