[TensorFlow入门] 数据与参数的输入

在上一篇文章中,我使用session运行了一个预先定义好的tensor,假如我想使用一个空的tensor呢?这就需要用到tf.placeholder() 和 feed_dict 。

tf.placeholder()

在TensorFlow(后文简称TF)中,数据并不会保存为 integer, float, 或 string. 这些值都封装在 tensor 对象中,因此不能直接定义并使用一个变量例如x,因为你设计的模型可能需要受不同的数据集与不同的参数。所以TF使用placeholder()来传递一个tensor到session.run()中。

Session’s feed_dict

x = tf.placeholder(tf.string)

with tf.Session() as sess:
    output = sess.run(x, feed_dict={x: 'Hello World'})

如上面这段代码所示,在tf.Session.run()中使用feed_dict来传入tensor.上面这个例子传入的是一个字符串”Hello, world”,feed_dict也可以同时传入多个tensor,如下所示。

x = tf.placeholder(tf.string)
y = tf.placeholder(tf.int32)
z = tf.placeholder(tf.float32)

with tf.Session() as sess:
    output = sess.run(x, feed_dict={x: 'Test String', y: 123, z: 45.67})

注意:你应该已经注意到所有tensor都已经被预先定义类型,如果在feed_dict中传入的类型与预先定义的不符合,则TF会报“ValueError: invalid literal for…”错误。

一个思考:

那么,什么时候该用tf.placeholder,什么时候该使用tf.Variable之类直接定义参数呢?

答案是,tf.Variable适合一些需要初始化或被训练而变化的权重或参数,而tf.placeholder适合通常不会改变的被训练的数据集。

参考:What’s the difference between tf.placeholder and tf.Variable

    原文作者:MAZE
    原文地址: https://zhuanlan.zhihu.com/p/25307881
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞