对张量流变量形状感到困惑

时间:2017-08-14 13:40:07

标签: tensorflow

我正在使用tensorflow机器学习食谱(https://github.com/nfmcclure/tensorflow_cookbook)学习张量流。我目前正在阅读NLP章节(07)。关于如何决定张量流变量的维数,我感到非常困惑。例如,在他们使用的单词包中:

# Create variables for logistic regression
A = tf.Variable(tf.random_normal(shape=[embedding_size,1]))
b = tf.Variable(tf.random_normal(shape=[1,1]))

# Initialize placeholders
x_data = tf.placeholder(shape=[sentence_size], dtype=tf.int32)
y_target = tf.placeholder(shape=[1, 1], dtype=tf.float32)

并在tf-idf示例中使用:

# Create variables for logistic regression
A = tf.Variable(tf.random_normal(shape=[max_features,1]))
b = tf.Variable(tf.random_normal(shape=[1,1]))

x_data = tf.placeholder(shape=[None, max_features], dtype=tf.float32)
y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32)

如何确定何时在占位符形状中使用None与1?谢谢!

2 个答案:

答案 0 :(得分:4)

使用None作为形状的一部分,意味着将在您运行session时确定。 这对于所谓的batch训练进行训练非常有用,在训练中,您可以为训练过程的每次迭代提供固定大小的数据子集。 因此,如果您将其保留在None,则可以毫无问题地在批量大小之间切换。 (虽然你不会在同一个会话中这样做,但每个会话都可以尝试不同的批量大小)

当你陈述一个特定的形状时,它会是什么形状,这是在会话期间可以提供给它的唯一形状(使用feed_dict参数)

在您的具体示例中,代码的第一部分,y_target的形状始终为[1, 1],在代码的第二部分,y_target可以是[10, 1] / [200, 1] / [<whatever>, 1]

答案 1 :(得分:1)

&#39;无&#39;当占位符中的元素数量提前未知时,应该使用。但是,例如在x_data占位符中,如果数据元素的数量为1,即事先已知,则可以替换“无”。用1.