Keras中的网络层构造

核心层(Core Layer)是构成神经网络最常用的网络层的集合,包括:全连接层、激活层、放弃层、扁平化层、重构层、排列层、向量反复层、Lambda层、激活值正则化层、掩盖层。所有的层都包含一个输入端和一个输出端,中间包含激活函数以及其他相关参数等。

(1)全连接层。在神经网络中最常见的网络层就是全连接层,在这个层中实现对神经网络里面的神经元的激活。

(2)激活层。激活层是对上一层的输出应用激活函数的网络层,这是除应用activation选项之外,另一种指定激活函数的方式。其用法很简单,只要在参数中指明所需的激活函数即可,预先定义好的函数直接引用其名字的字符串,或者使用TensorFlow和Theano自带的激活函数。如果这是整个网络的第一层,则需要用input_shape指定输入向量的维度。

(3)放弃层。放弃层(Dropout)是对该层的输入向量应用放弃策略。在模型训练更新参数的步骤中,网络的某些隐含层节点按照一定比例随机设置为不更新状态,但是权重仍然保留,从而防止过度拟合。这个比例通过参数rate设定为0到1之间的实数。在模型训练时不更新这些节点的参数,因此这些节点并不属于当时的网络;但是保留其权重,因此在以后的迭代次序中可能会影响网络,在打分的过程中也会产生影响,所以这个放弃策略通过不同的参数估计值已经相对固化在模型中了。

(4)扁平化层。扁化层(Flatten)是将一个维度大于或等于3的高维矩阵按照设定“压扁”为一个二维的低维矩阵。其压缩方法是保留第一个维度的大小,然后将所有剩下的数据压缩到第二个维度中,因此第二个维度的大小是原矩阵第二个维度之后所有维度大小的乘积。这里第一个维度通常是每次迭代所需的小批量样本数量,而压缩后的第二个维度就是表达原图像所需的向量长度。

比如输入矩阵的维度为(1000,64,32,32),扁平化之后的维度为(1000,65536),其中65536=64×32×32。如果输入矩阵的维度为(None,64,32,32),则扁平化之后的维度为(None,65536)。

(5)重构层。重构层(Reshape)的功能和Numpy的Reshape方法一样,将一定维度的多维矩阵重新排列构造为一个新的保持同样元素数量但是不同维度尺寸的矩阵。其参数为一个元组(tuple),指定输出向量的维度尺寸,最终的向量输出维度的第一个维度的尺寸是数据批量的大小,从第二个维度开始指定输出向量的维度大小。

(6)排列层。排列层(Permute)按照给定的模式来排列输入向量的维度。这个方法在连接卷积网络和时间递归网络的时候非常有用。其参数是输入矩阵的维度编号在输出矩阵中的位置。

(7)向量反复层。顾名思义,向量反复层就是将输入矩阵重复多次。

(8)Lambda层。Lambda层可以将任意表达式包装成一个网络层对象。参数就是表达式,一般是一个函数,可以是一个自定义函数,也可以是任意已有的函数。如果使用Theano和自定义函数,可能还需要定义输出矩阵的维度。如果后台使用CNTK或TensorFlow,可以自动探测输出矩阵的维度。

(9)激活值正则化层。这个网络层的作用是对输入的损失函数更新正则化。

(10)掩盖层。该网络层主要使用在跟时间有关的模型中,比如LSTM。其作用是输入张量的时间步,在给定位置使用指定的数值进行“屏蔽”,用以定位需要跳过的时间步。

猜你喜欢

转载自blog.csdn.net/wang263334857/article/details/88424407
今日推荐