Tensorflow 使用占位符值重塑张量

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

我想使用[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 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
,我不能使用包含任何形状信息的列表。有什么帮助吗?