Python TensorFlow馈送一个整数

Python TensorFlow馈送一个整数,python,neural-network,tensorflow,convolution,conv-neural-network,Python,Neural Network,Tensorflow,Convolution,Conv Neural Network,我试图对可变的输入大小进行卷积。为了实现这一点,我使用了1的批量大小。但是,其中一个节点是max pooling节点,它需要输入的形状作为列表ksize: pooled = tf.nn.max_pool( h, ksize=[1, self.input_size - filter_size + 1, 1, 1], strides=[1, 1, 1, 1], paddi

我试图对可变的输入大小进行卷积。为了实现这一点,我使用了1的批量大小。但是,其中一个节点是max pooling节点,它需要输入的形状作为列表
ksize

 pooled = tf.nn.max_pool(
                h,
                ksize=[1, self.input_size - filter_size + 1, 1, 1],
                strides=[1, 1, 1, 1],
                padding='VALID',
                name="pool")
现在,显然可以从输入(占位符)推断输入大小:

但是我不能使用
self.input\u x.get\u shape()[0]
,因为形状是动态的。因此,我打算在每一步将输入大小作为feed_dict传递。但是,我不知道如何在提要中传递整数。每个占位符都是张量,因此如果我这样做:

self.input_size = tf.placeholder(tf.int32, shape=(), name="input_size")
我必须执行
self.input\u size.eval()
来获取int值,这给了我一个错误,我需要输入
input\u size
。我猜这是因为eval在训练步骤发生之前触发了计算,此时输入大小没有值


有没有一种方法可以动态地获得一个运算来计算输入的形状,或者是一种将整数传递给训练步骤的方法?

我不确定这是否是最好的方法,但您可以在一个列表中动态地获得
self.input_x
的形状:

input_shape = tf.unpack(tf.shape(self.input_x))
tf.shape(self.input_x)
为您提供一个表示self.input_x形状的张量,并
f.unpack
将其转换为张量列表

现在,您可以使用以下各项创建最大池节点:

pooled = tf.nn.max_pool(
                h,
                ksize=tf.pack([1, input_size[1] - filter_size + 1, 1, 1]),
                strides=[1, 1, 1, 1],
                padding='VALID',
                name="pool")

(如果您需要输入x的第二个维度)

我不确定这是不是最好的方法,但您可以动态地获得
self的形状。输入x在一个列表中,包含:

input_shape = tf.unpack(tf.shape(self.input_x))
tf.shape(self.input_x)
为您提供一个表示self.input_x形状的张量,并
f.unpack
将其转换为张量列表

现在,您可以使用以下各项创建最大池节点:

pooled = tf.nn.max_pool(
                h,
                ksize=tf.pack([1, input_size[1] - filter_size + 1, 1, 1]),
                strides=[1, 1, 1, 1],
                padding='VALID',
                name="pool")

(如果需要输入x的第二维)

它仍然返回张量列表。我需要第二维度的实际值(整数),并且在运行时。这就是为什么我想把它作为一个参数“feed”,然而,看起来我只能feed张量?你能用“input_size=tf.placeholder(tf.int32)”来feed一个整数吗?它适合我,但我在TFR0.8上,我没有尝试最新版本。对于张量列表问题,我修改了我的答案。我不明白为什么,但是tf.pack ksize数组应该可以工作……这是tf中的一个问题。不管你做什么-ksize将在施工时进行评估,因此这是不可能实现的。啊,好的,对不起。对于tf.reforme或tf.image.resize_images函数,我通常会动态获得张量的形状。我希望它适用于tf.nn.max_pool…请注意:
tf.pack
在Tensorflow 1.0中被重命名为
tf.stack
,它仍然返回一个张量列表。我需要第二维度的实际值(整数),并且在运行时。这就是为什么我想把它作为一个参数“feed”,然而,看起来我只能feed张量?你能用“input_size=tf.placeholder(tf.int32)”来feed一个整数吗?它适合我,但我在TFR0.8上,我没有尝试最新版本。对于张量列表问题,我修改了我的答案。我不明白为什么,但是tf.pack ksize数组应该可以工作……这是tf中的一个问题。不管你做什么-ksize将在施工时进行评估,因此这是不可能实现的。啊,好的,对不起。对于tf.reforme或tf.image.resize_images函数,我通常会动态获得张量的形状。我希望它适用于tf.nn.max_pool…只需注意:
tf.pack
在Tensorflow 1.0中被重命名为
tf.stack