cuda-convnet 卷积神经网络 一般性结构卷积核个数 和 输入输出的关系以及输入输出的个数的说明:
卷积神经网络 一般性结构卷积核个数和 输入输出的关系以及输入输出的个数的说明:
以cifar-10为例:
Initialized data layer 'data', producing3072 outputs Initialized data layer 'labels', producing1 outputs Initialized convolutional layer 'conv1',producing 32x32 64-channel output Initialized max-pooling layer 'pool1',producing 16x16 64-channel output Initialized cross-mapresponse-normalization layer 'rnorm1', producing 16x16 64-channel output Initialized convolutional layer 'conv2',producing 16x16 64-channel output Initialized cross-map response-normalizationlayer 'rnorm2', producing 16x16 64-channel output Initialized max-pooling layer 'pool2',producing 8x8 64-channel output Initialized locally-connected layer'local3', producing 8x8 64-channel output Initialized locally-connected layer'local4', producing 8x8 32-channel output Initialized fully-connected layer 'fc10',producing 10 outputs Initialized softmax layer 'probs',producing 10 outputs Initialized logistic regression cost'logprob' Initialized neuron layer 'conv1_neuron',producing 65536 outputs Initialized neuron layer 'conv2_neuron',producing 16384 outputs Initialized neuron layer 'local3_neuron',producing 4096 outputs Initialized neuron layer 'local4_neuron',producing 2048 outputs
1、卷积说明:
输入是3个32*32, 共3*1024=3072。每条边padding为2,则内存里实际为3个36*36.
卷积核个数是3维的5*5分别与3个输入进行卷积运算,得到3维的32*32的输出,这里将3维的32*32相应位相加得到一张32*32的feature Map
假设有64个3维的5*5卷积核就有64张feature Map
详细过程图示为:
卷积的权值存取方式为:
第一个5*5作用于第一张输入全图,
第二个5*5作用于第二张输入全图,
第三个5*5作用于第三张输入全图,
再把这三个相应位置相加,在加上biases,得到第一张feature map
最后64个5*5*3反复上面的过程,得到64个featuremap
这里weights有3*5*5*64个,biases有64个.
这里输入是3 输出是64,卷积核是5*5权值个数是64* 5*5*3
2、local层说明:
输入是8x8 64-channel output 。每条边padding为1,则内存里实际为64个10*10.
卷积核个数是8*8个的3*3的卷积核分别与单一的一个输入相应位置卷积,得到1个8*8的中间输出O1。这里将8*8个的3*3作用于单一单张输入O1的卷积核组称为A。
如今64维的A分别作用于64个输入,将得到64个中间输出O2(就是64个O1),这里将64维的O2相应位相加得到一张8*8的feature Map。这里将64维的A称作B。
假设有64个B就有64张feature Map,就是终于的输出。
Local层和conv层的差别就在于local的单一输入的feature Map不共享卷积核。而conv是共享卷积核的,所以local比conv多了在单一输入的卷积核。
权值存取方式说明:
每一列是64*3*3*8*8=36864;将一列分成64份:每一份就是64*3*3.一份相应输出的一个pixel.
前64*3*3个权值怎么计算的呢:
64个3*3与64个输入的左上角3*3分别卷积,就是第一个3*3与第一个输入的左上角卷积,第二个3*3与第二个输入的左上角卷积,。。。得到64个值,然后这64个值相加再加biases就是第一个输出的左上角的值.