TensorFlow.constant()抛出带有占位符参数的TypeError(TF v1.4)

时间:2018-04-11 22:22:54

标签: python tensorflow

Python宿主语言。 TF v1.4。

https://www.tensorflow.org/versions/r1.4/api_docs/python/tf/constant

几乎就像文档示例(上图)一样,我需要创建一个用标量值填充的常量二维张量,在我的例子中是一个平均值,它是r的平均值,但r是占位符,而不是变量,不是一个numpy数组。因此,feed_dict需要用于填写我的应用程序中的占位符r。现在在文档示例中使用了python ndarray或一些python列表,它在我的应用程序中不起作用,这就是区别。

在我的应用程序中,global_bias(下面)需要是tf.constant而不是tf.variable - 因为我所说的是,优化器不需要学习它。请留下吧。

注意:在我的应用程序中,r是占位符而不是变量。

#global_bias_value = tf.reduce_mean(r)    # tf.constant() FAILS (below)
global_bias_value = 87. # tf.constant() runs OK (below)
global_bias = tf.constant(global_bias_value, shape=(I,J)) #TypeError: List of Tensors when single Tensor expected
rhat = global_bias + fm

所以,正如我所说的那样,用什么TF代码来制作一个用标量值填充的常数2-D张量,在我的例子中是一个平均值,它是r的平均值,但r是占位符,而不是变量,不是一个numpy阵列?

嘿,我试过.eval(),但TF说你需要一个会话来做到这一点。所以你们TF的人说我需要2次会议,顺序运行,只是为了做这件小事吗?或者你是说我应该绕过feed_dict来通过侧门(在应用程序内存中作为python列表或ndarray)加上前门(feed_dict)来填充我的r占位符实际数据,这将是janky?

感谢您提供线索!我需要一个。

1 个答案:

答案 0 :(得分:0)

我认为tf.fillhttps://www.tensorflow.org/api_docs/python/tf/fill)可以为您提供"常数"图中你想要的张量。这是我的MCVE:

import tensorflow as tf

x = tf.constant([[1, 7], [2, 6], [3, 5], [4, 8]], dtype=tf.float32)
y_true = tf.constant([[0, 4], [-1, 3], [-2, 2], [-3, 1]], dtype=tf.float32)

# The section you want
r = tf.placeholder(tf.float32, shape=[3, 1])
global_bias_value = tf.reduce_mean(r)
global_bias = tf.fill([4, 2], global_bias_value)

w = tf.get_variable('weight', [4, 2])
y_pred = tf.multiply(x, w) + global_bias
loss = tf.losses.mean_squared_error(labels=y_true, predictions=y_pred)
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)

init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
for i in range(3):
  _, weight, bias = sess.run((train, w, global_bias),
                           feed_dict={r: [[1], [2], [3]]})
  print('Step: ', i)
  print('Weight: ', weight)
  print('Bias: ', bias)