卷积神经网络与全连接神经网络

1、定义

全连接神经网络中,每两层之间的节点都有边相连。
这里写图片描述
卷积神经网络也是通过一层一层的节点组织起来的,对于卷积神经网络,相邻两层之间只有部分节点相连。在卷积神经网络的前几层中,每一层的节点都被组织成一个三维矩阵。前几层中每一个节点只和上一层中部分节点相连。

2、卷积神经网络的结构组成

1、输入层。输入层是整个神经网络的输入,在处理图像的卷积神经网络中,它一般代表了一张图片的像素矩阵。三维矩阵的长和宽代表了图像的大小,而三维矩阵的深度代表了图像的色彩通道(channel)。从输入层开始,卷积神经网络通过不同的神经网络结构将上一层的三维矩阵转换成下一层的三维矩阵,直至最后的全连接层。
2、卷积层。和传统全连接层不同,卷积层中每个节点的输入只是上一层神经网络的一小块,这个小块常用的大小有3*3或者5*5.卷积层试图将神经网络中的每一小块进行更加深入的分析从而得到抽象程度更高的特征。一般来说通过卷积层处理过的节点矩阵会变得更深。
3、池化层(Pooling)。池化层神经网络不会改变矩阵的深度,但是它可以缩小矩阵的大小。通过池化层可以进一步缩小最后全连接层中节点的个数,从而达到减少整个神经网络中参数的目的。
4、全连接层。在经过多轮卷积层和池化层的处理之后,在卷积神经网络的最后一般会是由一到两个全连接层来给出最后的分类结果。
5、softmax层。Softmax层主要用于解决分类问题,通过softmax层,可以得到当前样例属于不同种类的概率分布情况。
这里写图片描述

3、卷积层

卷积层神经网络中最重要的部分被称为过滤器(filter)或者内核(kernel)。过滤器可以将当前层神经网络上的一个子节点矩阵转化为下一层神经网络上的一个单位节点矩阵。单位节点矩阵指的是一个长和宽都为1,但是深度不限的节点矩阵。
过滤器所处理节点矩阵的长和宽是需要人工指定的,这个节点矩阵的尺寸也被称为过滤器的尺寸。常用的过滤器尺寸有3*3和5*5.因为过滤器处理的矩阵深度和当前层神经网络节点矩阵的深度是一致的,所以虽然节点矩阵是三维的,但是过滤器的尺寸只需要指定两个维度。过滤器中另一个需要人工指定的设置是处理得到的单位节点矩阵的深度,这个设置称为过滤器的深度。请注意,过滤器的尺寸指的是一个过滤器输入节点矩阵的大小,而深度指得是输出单位节点矩阵的深度。
在卷积神经网络中,每一个卷积层使用的过滤器中的参数都是一样的,共享过滤器参数可以使得图像上的内容不受位置的影响。共享每一个卷积层的参数还可以巨幅减少神经网络上的参数。所以卷积层的参数个数要远远小于全连接层。而且卷积层的参数个数和图片的大小无关,它只和过滤器的尺寸、深度以及当前节点矩阵的深度有关。
这里写图片描述

4、池化层

在卷积层之间往往会加上一个池化层,池化层可以非常有效的减少矩阵的尺寸(主要用于减少矩阵的长和宽,虽然也可以减少矩阵深度,但是实践中一般不会这样使用),从而有效减少最后全连接层中的参数。所以池化层可以既加快计算速度还可以防止过拟合。
池化层过滤器中的计算不是节点的加权和,而是采用更加简单的最大值或者平均值计算。使用最大值操作的池化层被称为最大池化层,使用平均值操作的池化层被称为平均池化层。
池化层的过滤器也需要人工设置过滤器的尺寸,需要指定长和宽。卷积层和池化层中过滤器的移动方式是相似的,唯一的区别在于卷积层使用的过滤器是横跨整个深度的,而池化层使用的过滤器只影响一个深度上的节点。所以池化层的过滤器除了在长和宽两个维度上移动之外,它还需要在深度这个维度上移动。
这里写图片描述

5、tensorflowAPI接口

1、卷积层

tf.nn.conv2d(
input,
filter,
strides,
padding,
use_cudnn_on_gpu=True,
data_format=’NHWC’,
dilations=[1, 1, 1, 1],
name=None
)

Args:

  • input:一个4维张量,维度顺序根据data_format进行解释
  • filter:一个四维张量的形状 [filter_height, filter_width, in_channels, out_channels]
  • strides:int, 1维张量长度4,input中每个维度的滑动窗口的步幅,尺寸顺序由data_format决定
  • padding:要使用的填充算法的类型,取值为”SAME”或者”VALID”,其中VALID表示不使用全0填充,SAME表示使用全0填充
  • use_cudnn_on_gpu:可选bool,默认为True
  • data_format:指定输入和输出数据的数据格式,取值为”NHWC”或者 “NCHW”,默认为”NHWC”。使用默认格式“NHWC”,数据按照[batch,height,width,channels]的顺序存储;“NCHW”时,数据存储顺序为:[batch,channels,height,width]

2、池化层

tf.nn.max_pool(
value,
ksize,
strides,
padding,
data_format=’NHWC’,
name=None
)

Args:

  • value:由data_format指定格式的4-D Tensor
  • ksize:4元素的1-D int张量,输入张量的每个维度的窗口大小。
  • strides:4元素的1-D int张量,输入张量的每个维度的滑动窗口的步幅
  • padding:’VALID’或者’SAME’,填充算法
  • data_format:’NHWC’,’NCHW’和’NCHW_VECT_C’被支持。
  • name:操作的可选名称

3、seqGAN实例代码:

filter_shape = [filter_size, embedding_size, 1, num_filter]
W = tf.Variable(tf.truncated_normal(filter_shape, stddev=0.1), name="W")
b = tf.Variable(tf.constant(0.1, shape=[num_filter]), name="b")

conv = tf.nn.conv2d(
            self.embedded_chars_expanded,   
            # [batch_size, sequence_length, embedding_size, 1]
            W,
            strides=[1, 1, 1, 1],
            padding="VALID",
            name="conv")   
# [batch_size, sequence_length-filter_size+1, 1, num_filter]

# Apply nonlinearity
h = tf.nn.relu(tf.nn.bias_add(conv, b), name="relu")

# Maxpooling over the outputs
pooled = tf.nn.max_pool(
                    h,
                    ksize=[1, sequence_length - filter_size + 1, 1, 1],
                    strides=[1, 1, 1, 1],
                    padding='VALID',
                    name="pool")  # [batch_size, 1, 1, num_filter]
  • 13
    点赞
  • 120
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值