您的位置:首页 > 理论基础 > 计算机网络

TensorFlow入门教程(2)占位符、变量、损失函数

2017-12-10 12:10 260 查看
接上文“TensorFlow入门教程(1)安装、基础、Tensorboard

占位符(placeholders)

官网教程称之前的例子不够interesting,因为只产生固定的结果。一个计算图应该被参数化来接受输入,这就是占位符,占位符告诉程序,它占的这个位置,之后会有输入进来,用tf.placeholder()实现。

码一下代码,学习一下流程:

import tensorflow as tf

sess=tf.Session()
a=tf.placeholder(tf.float32)
b=tf.placeholder(tf.float32)
adder_node=a+b
print(sess.run(adder_node,{a:30,b:4.5}))
print(sess.run(adder_node,{a:[1,2],b:[2,4.5]}))

writer = tf.summary.FileWriter('D:/ten', tf.get_default_graph())
writer.close()


“+”等同于tf.add

结果如下:

34.5
[ 3.   6.5]




我们可以通过加入其它操作来充实计算图。

add_and_triple=adder_node*6.5
print(sess.run(add_and_triple,{a:30,b:4.5}))


结果为:

224.25




变量(Variable)

为了让模型可以训练,我们需要让模型能在相同输入时给出不同输出,我们可以通过使用Variables给计算图加入可训练的参数。跟着官网教程走一遍,用tf.Variable()创建变量。

import tensorflow as tf

sess = tf.Session()

W = tf.Variable([.3],dtype=tf.float32)
b = tf.Variable([-.3],dtype=tf.float32)
x = tf.placeholder(tf.float32)
linear_model = W*x+b

init=tf.global_variables_initializer()
sess.run(init)

print(sess.run(linear_model,{x:[1,2,3,4]}))


结果为:

[ 0.          0.30000001  0.60000002  0.90000004]


官网对tf.global_variables_initializer()的解释是当用tf.Variable()时没有初始化变量,所以需要它来初始化变量,我尝试了将这两句去掉,结果如下:

FailedPreconditionError (see above for traceback): Attempting to use uninitialized value Variable
[[Node: Variable/read = Identity[T=DT_FLOAT, _class=["loc:@Variable"], _device="/job:localhost/replica:0/task:0/device:CPU:0"](Variable)]]


提示使用未初始化的变量值。

损失函数(loss function)

现在虽然我们已经创建了一个模型,但是我们不知道模型好不好。为了用数据集评估模型,我们需要一个占位符来规定需要的值还需要一个损失函数(loss function)。

import tensorflow as tf

sess = tf.Session()
W = tf.Variable([.3],dtype=tf.float32)
b = tf.Variable([-.3],dtype=tf.float32)
x = tf.placeholder(tf.float32)
linear_model = W*x+b
init=tf.global_variables_initializer()
sess.run(init)

y = tf.placeholder(tf.float32) #占位符,用于输入想要得到的数据集
squared_deltas = tf.square(linear_model-y) #正确结果与模型结果差的平方
loss = tf.reduce_sum(squared_deltas) #所有差平方的和
print(sess.run(loss,{x:[1,2,3,4],y:[0,-1,-2,-3]})) #打印损失函数的值

writer = tf.summary.FileWriter('D:/ten', tf.get_default_graph())
writer.close()


变量再赋值

我们可以通过给W、b再分配值来改进模型。一个变量的初始值由tf.Variable提供,但可以用tf.assign来改变:

fixW = tf.assign(W,[-1.])
fixb = tf.assign(b,[1.])
sess.run([fixW,fixb])
print(sess.run(loss,{x:[1,2,3,4],y:[0,-1,-2,-3]}))


最终计算图如下:



输出为:

0.0


我们手动找到了让损失函数最小的参数,但是机器学习的要点是自动得出最佳的参数,这些将在之后学习。

还有TensorFlow入门教程(3)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息