下面程序演示tensorflow如何在程序的信息中打印变量的值,可用于调试:
为了简单,我们用y=wx作为演示实例,其中w表示变量参数(初始值设为1),x表示输入
损失函数我们选择(真实值-预测值)loss=y-logit,这里损失函数没有什么意义,只是作为演示实例
我们想求每次w的变化就需要用梯度下降法
loss=y-logit,logit=wx (logit为预测值)
(1)首先要求出∆w的值需要求loss对w的偏导,
即链式求导法则(loss对logit求导,logit对w求导)。
得到∆w=-x
(2)然后利用w=w-L*∆w进行梯度下降自动求导 (L表示学习率,我们设置为1)
w=w-L*∆w=w-1*(-x)=w+2 因此利用自动梯度下降法就相等于w值自增加2.
w增加2,x不变就相当于预测值增加∆wx
下面是程序在培训过程中不停的输出w的值
import tensorflow as tf
x=tf.placeholder(tf.float32,[])
y=tf.placeholder(tf.float32,[])
w=tf.Variable(tf.constant(1.0))
logit=tf.multiply(x,w)
loss=y-logit
train_step=tf.train.GradientDescentOptimizer(1).minimize(loss) #进行自动梯度下降
with tf.Session() as sess:
init=tf.global_variables_initializer()
sess.run(init)
for i in range(100):
print("***")
print("训练前的w的值"+str(sess.run(w)))
print(sess.run(logit, feed_dict={x: 2.0, y: 4})) #打印预测值,这里的预测值没啥意义
sess.run(train_step,feed_dict={x:2.0,y:4}) #进行参数训练
print("训练后的w的值"+str(sess.run(w)))