Tensorflow 使用占位符值重塑张量
我想使用[int,-1]符号重塑张量(例如,为了展平图像)。但我不知道第一维度的时间提前。一个用例是在大批量上进行训练,然后在小批量上进行评估 为什么会出现以下错误:Tensorflow 使用占位符值重塑张量,tensorflow,Tensorflow,我想使用[int,-1]符号重塑张量(例如,为了展平图像)。但我不知道第一维度的时间提前。一个用例是在大批量上进行训练,然后在小批量上进行评估 为什么会出现以下错误:get列表包含“\u Message”类型的张量 import tensorflow as tf import numpy as np x = tf.placeholder(tf.float32, shape=[None, 28, 28]) batch_size = tf.placeholder(tf.int32) def re
get列表包含“\u Message”类型的张量
import tensorflow as tf
import numpy as np
x = tf.placeholder(tf.float32, shape=[None, 28, 28])
batch_size = tf.placeholder(tf.int32)
def reshape(_batch_size):
return tf.reshape(x, [_batch_size, -1])
reshaped = reshape(batch_size)
with tf.Session() as sess:
sess.run([reshaped], feed_dict={x: np.random.rand(100, 28, 28), batch_size: 100})
# Evaluate
sess.run([reshaped], feed_dict={x: np.random.rand(8, 28, 28), batch_size: 8})
注意:当我在函数外部进行重塑时,它似乎可以工作,但我有很多次使用的非常大的模型,因此我需要将它们保留在一个函数中,并使用参数传递dim。要使此工作正常,请替换函数:
def reshape(_batch_size):
return tf.reshape(x, [_batch_size, -1])
def reshape(_batch_size):
return tf.reshape(x, tf.pack([_batch_size, -1]))
…具有以下功能:
def reshape(_batch_size):
return tf.reshape(x, [_batch_size, -1])
def reshape(_batch_size):
return tf.reshape(x, tf.pack([_batch_size, -1]))
出现错误的原因是,需要一个可转换为a的值作为其第二个参数。TensorFlow将自动将Python数字列表转换为一个tf.Tensor
,但不会自动转换数字和张量的混合列表(如a),而是会引发您看到的一些不直观的错误消息
op获取可转换为张量的对象列表,并单独转换每个元素,因此它可以处理占位符和整数的组合。嗨,所有问题都是由于Keras版本。最重要的是,我尝试了,但没有成功。卸载Keras并通过pip安装。这对我有用 我在keras1.0.2中遇到了这个错误,并用keras1.2.0解决了这个问题
希望这会有所帮助。谢谢稍后在使用tf.pack()时,我遇到了一些问题
x=reformate(100)
不再允许我执行x.get\u shape().as\u list()[-1]
。它说Nonetype是不可编辑的,所以它正在丢失形状信息。对此有何评论?请在定义batch_size
占位符时尝试指定shape=()
。您还可以使用Tensor.set_shape()
来提供未推断的其他形状信息(如果以后依赖它)。在较新的版本中,tf.pack
被替换为tf.stack
,我不能使用包含任何形状信息的列表。有什么帮助吗?