【发布时间】:2017-09-26 19:10:53
【问题描述】:
我正在尝试在 Tensorflow 中构建一个 CNN 模型,其中批次中的所有输入形状相同,但批次之间的输入在维度 1 上有所不同(即小批量大小相同,但小批量形状不同)。
为了更清楚地说明这一点,我有各种值 N 的数据 (Nx23x1),我首先按升序排序。在每批(50 个样本)中,我对每个样本进行零填充,以便每个 N_i 等于其小批量中的最大 N。现在我已经为批量输入定义了 Tensorflow 占位符:
input = tf.placeholder(tf.float32, shape=(batch_size, None, IMAGE_WIDTH, NUM_CHANNELS))
我在输入占位符中使用“无”,因为在批次之间,该值会有所不同,即使在批次中它不会。在运行我的训练代码时,我使用 feed_dict 来传递教程中定义的输入值(numpy 矩阵)。
我的 CNN 代码接受了这个输入;但是,这是我遇到问题的地方。尝试在完全连接的层之前展平输入时出现 ValueError。它试图展平阵列,但其中一个维度仍然是“无”。于是我尝试了:
length = tf.shape(input)[1]
reshaped = tf.reshape(input, [batch_size, length, IMAGE_WIDTH, NUM_CHANNELS])
但该值仍然是“无”,并且在最初尝试构建图表时遇到了问题。我的 FC 层(在展平中)在构建权重和偏置张量时明确采用了“input_to_layer.get_shape()[1]”,但它无法处理 None 输入。
我完全不知道如何进行!非常感谢您的帮助,谢谢:)
## 编辑##
Danevskyi 在下面指出,这可能是不可能的。如果不是全连接层,我想在整个标题上进行池化(即对于从前一个卷积层输出的 1024 个大小为 (D) 的平面过滤器,我想通过均值池化创建一个 1024 维向量呢?在每个过滤器的长度 D 上)? 1D Global Avg Pooling 可以做到这一点吗?同样在批次之间,D 的值会有所不同......
## 更新##
来自 tflearn (tflearn.layers.conv.global_avg_pool) 的全局平均池化方法不需要指定的窗口大小,它使用完整的输入维度,因此即使与 TensorFlow 中未知的“无”维度也兼容。
【问题讨论】:
标签: tensorflow conv-neural-network