Keras CIFAR-10密集层代码为何在最后一层中有512个神经元?

时间:2019-02-11 05:01:24

标签: tensorflow keras

我正在使用Keras构建可与CIFAR-10数据集配合使用的CNN。我对在线教程的最后几行感到有些困惑。它们拍摄50,000张32x32彩色图像,并通过4个卷积层和1个完全连接的层对其进行处理。最后一部分是通过以下方式完成的:

model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))

我试图理解为什么它是model.add(Dense(512))而不是其他一些数字。例如,我认为可以将32x32的图像展平为1024尺寸的矢量。但是,为什么他们在这里选择512?

谢谢!

1 个答案:

答案 0 :(得分:1)

实际上不是32x32,而是32x32x3,因为存在颜色通道以及扁平化和密集化的不同方法,我认为您不会在底层实现中得到代码:

W1=tf.Variable(tf.random_normal([32*32*3,512]),name="W1") #variable
x=tf.placeholder(tf.float32,[batch,32,32,3])              #placeholder for inputs
flat=tf.reshape(x,[batch,32*32*3])                        #model.add(Flatten())
mul1=tf.matmul(flat,W1)                                   #model.add(Dense(512))
relu=tf.nn.relu(mul1)                                #model.add(Activation('relu'))

flat的shape=[batch,32*32*3] mul1的shape=[batch,512]

当然可以是1024或5000,但很难进行优化。