【发布时间】:2018-08-30 14:12:23
【问题描述】:
所以我正在运行一个 CNN 来解决分类问题。我有 3 个卷积层和 3 个池化层。 P3 是最后一个池化层的输出,其维度为:[Batch_size, 4, 12, 48],我想将该矩阵展平为[Batch_size, 2304] 大小的矩阵,即2304 = 4*12*48。我一直在使用“选项 A”(见下文)一段时间,但有一天我想尝试“选项 B”,理论上这会给我同样的结果。然而,它没有。我之前检查过以下线程
Is tf.contrib.layers.flatten(x) the same as tf.reshape(x, [n, 1])?
但这只会增加更多的混乱,因为尝试“选项 C”(取自上述线程)给出了一个新的不同结果。
P3 = tf.nn.max_pool(A3, ksize = [1, 2, 2, 1], strides = [1, 2, 2, 1], padding='VALID')
P3_shape = P3.get_shape().as_list()
P = tf.contrib.layers.flatten(P3) <-----Option A
P = tf.reshape(P3, [-1, P3_shape[1]*P3_shape[2]*P3_shape[3]]) <---- Option B
P = tf.reshape(P3, [tf.shape(P3)[0], -1]) <---- Option C
我更倾向于选择“选项 B”,因为这是我在 Dandelion Mane (https://www.youtube.com/watch?v=eBbEDRsCmv4&t=631s) 的视频中看到的,但我想了解为什么这 3 个选项会给出不同的结果。
【问题讨论】:
标签: python tensorflow conv-neural-network