当前位置: 首页> 体育健身> 体育> 正文

低维嵌入防止过拟合(低维嵌入 过拟合)

  • 隔世经年隔世经年
  • 体育
  • 2023-03-12 22:03:02
  • -
防止过拟合 这6种技巧屡试不爽

低维嵌入可以防止过拟合吗

不可以。低维代表每个顶点的向量维数不能过高,过高会有过拟合的风险,低维模型可以更好地泛化,降低过拟合风险,但是不能直接防止,并加快收敛和推理速度。

Keras中基础知识

在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) 。

代码详解 如何在深度学习下理解线性代数

第十五章 降维

第二种类型的无监督学习问题,叫做降维。

这里有一些,你想要使用降维的原因:

① 数据压缩

数据压缩不仅能对数据进行压缩,使得数据占用较小的内存或硬盘空间。它还能对学习算法进行加速

② 可视化数据

但首先,让我们谈论降维是什么。举个例子,假设我们收集了一个数据集,它有很多很多的特征,我只在这里绘制两个特征。

假如,对我们来说,这两个特征,x_1 是某物体的厘米长度,另一个特征x_2 是同一物体的英寸长度。这实际上是一种高度冗余的表示。

对于这两个单独的特征 x_1 和 x_2,它们表示的都是基本长度。或许我们想做的是,把数据减少到一维。只有一个数字来测量某物体的长度。

这个例子可能有点牵强,这与我在行业中所见的完全是两回事。

如果你有几百个或成千上万的特征,你很容易就会迷失,自己到底有哪些特征。有时可能有几个不同的工程团队,也许一个工程队给你二百个特征,第二工程队给你另外三百个的特征,第三工程队给你五百个特征。最后加起来你就有一千多个特征,这时就很难去了解某个特征是从哪个小组得到的,这时就比较容易产生这与高度冗余的特征。

并且,如果这里的 厘米 和 英寸 长度都被四舍五入了,这就是这个例子为什么不是完美地落在一条直线上。