【卷积神经网络】tiny-dnn网络参数

来源:互联网 发布:网络公司员工培训 编辑:程序博客网 时间:2024/05/17 07:10

关于卷积神经网络的介绍,网上资料很多。不在赘述。
从最主要的地方入手介绍:
打开tiny-dnn的/example/main.cpp文件,可以看到如下代码:

nn << convolutional_layer<tan_h>(32, 32, 5, 1, 6)         << average_pooling_layer<tan_h>(28, 28, 6, 2)         << convolutional_layer<tan_h>(14, 14, 5, 6, 16,        connection_table(connection, 6, 16))         << average_pooling_layer<tan_h>(10, 10, 16, 2)        << convolutional_layer<tan_h>(5, 5, 5, 16, 120)        << fully_connected_layer<tan_h>(120, 10);

从这一块代码入手,介绍如下部分内容

  • convolutional_layer< tan_h>及其参数,
  • average_pooling_layer< tan_h>及其参数
  • connection_table及其参数
  • fully_connected_layer< tan_h>及其参数

以及tiny-dnn的框架结构。

首先来看网络结构,这个网络结构是经典手写数字识别的Lenet网络。

第一层为卷积层:

convolutional_layer<tan_h>(32, 32, 5, 1, 6)

参数说明:输入的是32*32的图片,卷积核尺寸为5*5,输入一张图,有6个卷及模板。意思是经过第一层网络,输入一张图片,输出六张图片到下一层。输出图片的尺寸为32-5+1=28.即输出的是28*28的图片。此部分只看参数,下一部分再提出解释。

第二次为平均池化层:

average_pooling_layer<tan_h>(28, 28, 6, 2)

参数说明:输入的是28*28的图片,6个下采样操作,用2*2的卷积核。此部分输入六张图片,输出六张图片,尺寸为28/2=14。即输出六张14*14大小的图片。

第三层依然是卷基层

convolutional_layer<tan_h>(14, 14, 5, 6, 16,connection_table(connection, 6, 16))

参数说明:输入的是14*14大小的图片,卷积核大小5*5,输入6张图片,有16个卷积模板。与上一个平均池化层的连接方式为connection_table(connection, 6, 16)),里面的参数是connection,输入的维度(6张图),有16个卷及模板。下面看connection:

    static const bool connection[] = {        O, X, X, X, O, O, O, X, X, O, O, O, O, X, O, O,        O, O, X, X, X, O, O, O, X, X, O, O, O, O, X, O,        O, O, O, X, X, X, O, O, O, X, X, O, X, O, O, O,        X, O, O, O, X, X, O, O, O, O, X, X, O, X, O, O,        X, X, O, O, O, X, X, O, O, O, O, X, O, O, X, O,        X, X, X, O, O, O, X, X, O, O, O, O, X, O, O, O    };

可以看做是一个6*16的矩阵,但其实是一个数组。看第一行第一列的值为0,意思是第一张图片和第一个卷及模板连接。第二行第三个为X,意思是第二张图和第三个卷积核不连接。为什么有的连接,有的不连接,在下一部分说明。忘了说了,这一层输出的图片大小为:14-5+1=10。

第四层为平均池化层:

average_pooling_layer<tan_h>(10, 10, 16, 2)

参数说明:意思是输入10*10的图片,有16张,用2*2的方式下采样。所以这一层输出的图片大小为10/2=5。输出也是16张

第五层卷基层:

convolutional_layer<tan_h>(5, 5, 5, 16, 120)

参数说明:输入的图片为5*5,用5*5大小的卷积核,输出16张图片,有120个卷积模板。可以输出120张图片。其实这里都不能说输出图片了,输出的是特征图。由于没有定义connection_table,所以默认和上一层采用全连接。

第六层全连接层:

fully_connected_layer<tan_h>(120, 10)

意思是输入120张图,输出10个类别。手写输入就是0-9嘛一共10个数。

1 0
原创粉丝点击