欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Tensorflow中卷积神经网络之卷积层

程序员文章站 2022-06-26 11:30:25
...

卷积层:与传统全连接层不同,卷积层中每一个节点的输入只是上一层神经网络的一小块。(试图将神经网络中的每一小块进行更加深入地分析从中得到抽象程度更高的特征)

在卷积层中:1.过滤器(filter)处理的节点矩阵的长和宽由人工指定;2.处理得到的单位节点矩阵的深度--过滤器的深度;

                        (过滤器的尺寸是指过滤器输入节点矩阵的大小;深度是指输出单位节点矩阵的深度)

在卷积层结构中的前向传播过程是通过一个过滤器从神经网络当前层的左上角移动到右下角,并且计算每一个对应的单位矩阵而得到的。

卷积层中过滤器前向传播过程实质就是为通过左侧小矩阵中的节点计算出右侧单位矩阵中节点的过程。

filter_weight = tf.get_variable('weights', [5,5,3,16], initializer = tf.truncated_normal_initializer(stddev=0.1)) #创建过滤器的权重变量和偏执项变量,声明一个                                                                                                           思维矩阵,前面俩维度代表过滤器的尺寸,第三                                                                                                                   个维度表示当前层的深度,第四个维度表示过滤器的深度
biases = tf.get_variable('biases', [16], initializer= tf.constant_initializer(0.1))
conv = tf.nn.conv2d(input, filter_weight, strides=[1,1,1,1], padding='SAME')#第一个维度表示对应的输入batch,第二个参数为卷积层权重,第三个参数为不同维度上的                                                                               步长,最后一个参数为填充(SAME表示添加全为0,VALID表示不添加)
bias=tf.nn.bias_add(conv, biases)#为每一个节点加上偏执项,不能简单实用加法进行偏执项,需要通过tf.nn.bias_add函数,
actived_conv=tf.nn.relu(bias)
Tensorflow中卷积神经网络之卷积层

                                       卷积层前向传播过程样例

outL=[inLength/strideLength]

outW=[inWidth/strideWidth]

outL表示输出层矩阵的长度,等于输入层矩阵长度除以长度方向上的步长的向上取整值。

outW表示输出层矩阵的宽度,等于输入层矩阵宽度除以宽度方向上的步长的向上去整值。

在不使用全0填充的情况下:结果矩阵的大小为:

outL=[(inL-filterL+1)/strideL]

outW=[(inW-filterL+1)/strideW)]

L表示长度,W表示宽度。