Keras中基础知识
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Keras中基础知识相关的知识,希望对你有一定的参考价值。
参考技术A 在Keras中设定了两类深度学习模型: 一类是序列模型(Sequential类) ; 一类是通用模型(Model类) 。 其差异在于不同的拓扑结构。序列模型属于通用模型的一个子类, 因为很常见, 所以这里单独列出来进行介绍。 这种模型
各层之间是依次顺序的线性关系, 在第k层和第k+1层之间可以加上各种元素来构造神经网络。
通用模型可以用来设计非常复杂、 任意拓扑结构的神经网络, 例如有向无环网络、 共享层网络等。
Keras中的重要对象
常用的激活函数、 参数初始化方法、 正则化方法等。
在Keras中使用激活对象有两种方法: 一是单独定义一个激活层; 二是在前置层里面通过激活选项来定义所需的激活函数。
1、model.add(Dense(64,input)_shape=(784,))
model.add(Activation('tanh'))
2、model.add(Dense(64,input_shape=(784,),activation='tanh'))
初始化对象
初始化对象(Initializer) 用于随机设定网络层激活函数中的权重值或者偏置项的初始值, 包括kernel_initializer和bias_initializer。
正则化对象
在神经网络中也提供了正则化的手段, 分别应用于权重参数、 偏置项以及激活函数, 对应的选项分别是kernel_regularizer、bias_reuglarizier和activity_regularizer。
Keras中的网络层构造
核心层(Core Layer) 是构成神经网络最常用的网络层的集合, 包括: 全连接层、 激活层、放弃层、 扁平化层、 重构层、 排列层、 向量反复层、 Lambda层、 激活值正则化层、 掩盖层。 所有的层都包含一个输入端和一个输出端, 中间包含激活函数以及其他相关参数等.
全连接层。 在神经网络中最常见的网络层就是全连接层, 在这个层中实现对神经网络里面的神经元的激活
激活层。 激活层是对上一层的输出应用激活函数的网络层, 这是除应用activation选项之外, 另一种指定激活函数的方式。 其用法很简单, 只要在参数中指明所需的激活函数即可.
放弃层。 放弃层(Dropout) 是对该层的输入向量应用放弃策略。 在模型训练更新参数的步骤中, 网络的某些隐含层节点按照一定比例随机设置为不更新状态, 但是权重仍然保留, 从而防止过度拟合。
扁平化层。 扁化层(Flatten) 是将一个维度大于或等于3的高维矩阵按照设定“压扁”为一个二维的低维矩阵。其压缩方法是保留第一个维度的大小, 然后将所有剩下的数据压缩到第二个维度中, 因此第二个维度的大小是原矩阵第二个维度之后所有维度大小的乘积。 这里第一个维度通常是每次迭代所需的小批量样本数量, 而压缩后的第二个维度就是表达原图像所需的向量长度。
重构层。 重构层(Reshape) 的功能和Numpy的Reshape方法一样, 将一定维度的多维矩阵重新排列构造为一个新的保持同样元素数量但是不同维度尺寸的矩阵。 其参数为一个元组(tuple) , 指定输出向量的维度尺寸, 最终的向量输出维度的第一个维度的尺寸是数据批量的大小, 从第二个维度开始指定输出向量的维度大小。
排列层。 排列层(Permute) 按照给定的模式来排列输入向量的维度。 这个方法在连接卷积网络和时间递归网络的时候非常有用。 其参数是输入矩阵的维度编号在输出矩阵中的位置。
向量反复层。 顾名思义, 向量反复层就是将输入矩阵重复多次。
model.add(Dense(64,input_dim=(784,)))
model.add(RepeatVector(3))
在第一句中, 全连接层的输入矩阵是一个有784个元素的向量, 输出向量是一个维度为(one, 64) 的矩阵; 而第二句将该矩阵反复3次, 从而变成维度为(None, 3, 64) 的多维矩阵, 反复的次数构成第二个维度, 第一个维度永远是数据批量的大小。
Lambda层。 Lambda层可以将任意表达式包装成一个网络层对象。 参数就是表达式, 一般是一个函数, 可以是一个自定义函数, 也可以是任意已有的函数。
激活值正则化层。 这个网络层的作用是对输入的损失函数更新正则化。
掩盖层。 该网络层主要使用在跟时间有关的模型中, 比如LSTM。 其作用是输入张量的时间步, 在给定位置使用指定的数值进行“屏蔽”, 用以定位需要跳过的时间步。
卷积层
卷积操作分为一维、 二维和三维, 对应的方法分别是Conv1D、 Conv2D和Conv3D。
Conv1D、 Conv2D和Conv3D的选项几乎相同。
filters: 卷积滤子输出的维度, 要求整数。
kernel_size: 卷积核的空域或时域窗长度。要求是整数或整数的列表, 或者是元组。 如果是单一整数, 则应用于所有适用的维度。
strides: 卷积在宽或者高维度的步长。 要求是整数或整数的列表, 或者是元组。 如果是单一整数, 则应用于所有适用的维度。 如果设定步长不为1, 则dilation_rate选项的取值必须为1。
padding: 补齐策略, 取值为valid、 same或causal。 causal将产生因果(膨胀的) 卷积,即output[t]不依赖于input[t+1: ], 在不能违反时间顺序的时序信号建模时有用。 valid代表只进行有效的卷积, 即对边界数据不处理。 same代表保留边界处的卷积结果, 通常会导致输出shape与输入shape相同。
data_format: 数据格式, 取值为channels_last或者channels_first。 这个选项决定了数据维
度次序, 其中channels_last对应的数据维度次序是(批量数, 高, 宽, 频道数) , 而channels_first对应的数据维度次序为(批量数, 频道数, 高, 宽) 。
activation: 激活函数, 为预定义或者自定义的激活函数名
dilation_rate: 该选项指定扩张卷积(DilatedConvolution) 中的扩张比例。 要求为整数或由单个整数构成的列表/元组, 如果dilation_rate不为1, 则步长一项必须设为1。
use_bias: 指定是否使用偏置项, 取值为True或者False。
kernel_initializer: 权重初始化方法, 为预定义初始化方法名的字符串, 或用于初始化权重的函数.
bias_initializer: 偏置初始化方法, 为预定义初始化方法名的字符串, 或用于初始化偏置的函数。
kernel_regularizer: 施加在权重上的正则项.
bias_regularizer: 施加在偏置项上的正则项.
activity_regularizer: 施加在输出上的正则项.
kernel_constraints: 施加在权重上的约束项
bias_constraints: 施加在偏置项上的约束项
池化层
池化(Pooling) 是在卷积神经网络中对图像特征的一种处理, 通常在卷积操作之后进行。 池
化的目的是为了计算特征在局部的充分统计量,从而降低总体的特征数量, 防止过度拟合和减少
计算量。 举例说明: 假设有一个128×128的图像, 以8×8的网格做卷积, 那么一个卷积操作一
共可以得到(128-8+1) 2个维度的输出向量, 如果有70个不同的特征进行卷积操作, 那么总体的
特征数量可以达到70×(128-8+1) 2=1024870个。用100万个特征做机器学习, 除非数据量极大,否则很容易发生过度拟合。
循环层
循环层(Recurrent Layer) 用来构造跟序列有关的神经网络。 但是其本身是一个抽象类, 无法
实例化对象, 在使用时应该使用LSTM, GRU和SimpleRNN三个子类来构造网络层。
嵌入层
嵌入层(Embedding Layer) 是使用在模型第一层的一个网络层, 其目的是将所有索引标号映射到致密的低维向量中.通常用在对文本数据进行建模的时候。
合并层
合并层是指将多个网络产生的张量通过一定方法合并在一起, 合并层支持不同的合并方法, 包括:
元素相加(merge.Add) 、 元素相乘
(merge.Multiply) 、 元素取平均
(merge.Average) 、 元素取最大
(merge.Maximum) 、 叠加
(merge.Concatenate) 、 矩阵相乘
(merge.Dot) 。
以上是关于Keras中基础知识的主要内容,如果未能解决你的问题,请参考以下文章