1

我想对可变输入大小进行卷积。为了实现这个目标,我使用的。然而批量大小,其中一个节点是需要输入的形状为一个列表ksize一个最大池节点:TensorFlow提供一个整数

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") 

现在,显然input_size可从输入(这是一个占位符)推断:

self.input_x = tf.placeholder(tf.int32, [None, None], name="input_x") 

但是我不能使用self.input_x.get_shape()[0]因为形状是动态的。所以我打算在每一步将feed_dict作为输入大小。但是,我无法弄清楚如何在feed_dict中传递一个整数。每一个占位符是一个张量,所以,如果我做的:

self.input_size = tf.placeholder(tf.int32, shape=(), name="input_size") 

我会做self.input_size.eval()得到int值,这给了我,我需要养活input_size错误。我想这是因为eval在训练步骤发生之前触发了计算,此时input_size没有值。

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

回答

0

我不知道,这是最好的方式,但你可以得到的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") 

(如果你需要input_x的第二维)

+0

它仍然返回张量的列表。我需要第二维的实际值(整数),并在运行时。这就是为什么我想“喂”这个参数,但是,它看起来像我只能喂Tensors? –

+0

你可以用“input_size = tf.placeholder(tf.int32)”提供一个整数吗?它适用于我,但我在TF r0.8,我没有尝试最新版本。对于张量列表的问题,我修改了我的答案。我不明白为什么,但tf.pack ksize阵列应该可以工作... – Corentin

+0

这是TF中的一个问题。无论你做什么 - ksize将在施工时进行评估,所以这是不可实现的。 –

相关问题