文档详情

卷积神经网络(CNN)代码实现(MNIST)解析摘要.doc

发布:2018-09-02约4.34万字共29页下载文档
文本预览下载声明
卷积神经网络(CNN)代码实现(MNIST)解析 共7层:依次为输入层、C1层、S2层、C3层、S4层、C5层、输出层,C代表卷积层(特征提取),S代表降采样层或池化层(Pooling),输出层为全连接层。 1. 各层权值、偏置(阈值)初始化: 各层权值、偏置个数计算如下: (1)、输入层:预处理后的32*32图像数据,无权值和偏置; (2)、C1层:卷积窗大小5*5,输出特征图数量6,卷积窗种类1*6=6,输出特征图大小28*28,因此可训练参数(权值+偏置):(5*5*1)*6+6=150+6; (3)、S2层:卷积窗大小2*2,输出下采样图数量6,卷积窗种类6,输出下采样图大小14*14,因此可训练参数(权值+偏置):1*6+6=6+6; (4)、C3层:卷积窗大小5*5,输出特征图数量16,卷积窗种类6*16=96,输出特征图大小10*10,因此可训练参数(权值+偏置):(5*5*6)*16+16=2400+16; (5)、S4层:卷积窗大小2*2,输出下采样图数量16,卷积窗种类16,输出下采样图大小5*5,因此可训练参数(权值+偏置):1*16+16=16+16; (6)、C5层:卷积窗大小5*5,输出特征图数量120,卷积窗种类16*120=1920,输出特征图大小1*1,因此可训练参数(权值+偏置):(5*5*16)*120+120=48000+120; (7)、输出层:卷积窗大小1*1,输出特征图数量10,卷积窗种类120*10=1200,输出特征图大小1*1,因此可训练参数(权值+偏置):(1*120)*10+10=1200+10. 代码段如下: [cpp] view plain copy #define num_map_input_CNN 1 //输入层map个数 #define num_map_C1_CNN 6 //C1层map个数 #define num_map_S2_CNN 6 //S2层map个数 #define num_map_C3_CNN 16 //C3层map个数 #define num_map_S4_CNN 16 //S4层map个数 #define num_map_C5_CNN 120 //C5层map个数 #define num_map_output_CNN 10 //输出层map个数 #define len_weight_C1_CNN 150 //C1层权值数,(5*5*1)*6=150 #define len_bias_C1_CNN 6 //C1层阈值数,6 #define len_weight_S2_CNN 6 //S2层权值数,1*6=6 #define len_bias_S2_CNN 6 //S2层阈值数,6 #define len_weight_C3_CNN 2400 //C3层权值数,(5*5*6)*16=2400 #define len_bias_C3_CNN 16 //C3层阈值数,16 #define len_weight_S4_CNN 16 //S4层权值数,1*16=16 #define len_bias_S4_CNN 16 //S4层阈值数,16 #define len_weight_C5_CNN 48000 //C5层权值数,(5*5*16)*120=48000 #define len_bias_C5_CNN 120 //C5层阈值数,120 #define len_weight_output_CNN 1200 //输出层权值数,(1*120)*10=1200 #define len_bias_output_CNN 10 //输出层阈值数,10 #define num_neuron_input_CNN 1024 //输入层神经元数,(32*32)*1=1024 #define num_neuron_C1_CNN 4704 //C1层神经元数,(28*28)*6=4704 #define num_neuron_S2_CNN 1176 //S2层神经元数,(14*14)*6=1176 #define num_neuron_C3_CNN
显示全部
相似文档