tf.reshape vs tf.contrib.layers.flatten

时间:2018-03-21 12:43:13

标签: python tensorflow conv-neural-network

所以我正在运行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

我更倾向于选择&#34;选项B&#34;因为这是我在蒲公英Mane(https://www.youtube.com/watch?v=eBbEDRsCmv4&t=631s)的视频中看到的那个,但我想理解为什么这3个选项会给出不同的结果。

1 个答案:

答案 0 :(得分:4)

所有3个选项都重塑:

months = {'Months': [01/2016,02/2016,03/2016,04/2016,05/2016,06/2016,07/2016,08/2016,09/2016], 'Obs 1':[a,a,a,b,b,b,c,c,c,], 'Obs 2':[I,I,I,II,II,II,III,III,III]}
months

此代码产生相同的结果3次。你的不同结果是由别的东西引起的,而不是由重塑造成的。