我正在使用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?
谢谢!
答案 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,但很难进行优化。