- Keras 教程
- Keras - 主页
- Keras - 简介
- Keras - 安装
- Keras - 后端配置
- Keras - 深度学习概述
- Keras - 深度学习
- Keras - 模块
- Keras - 层
- Keras - 定制层
- Keras - 模型
- Keras - 模型编译
- Keras - 模型评估和预测
- Keras - 卷积神经网络
- Keras - 使用 MPL 进行回归预测
- Keras - 使用 LSTM RNN 进行时间序列预测
- Keras - 应用程序
- Keras - 使用 ResNet 模型进行实时预测
- Keras - 预训练模型
- Keras 有用资源
- Keras - 快速指南
- Keras - 有用的资源
- Keras - 讨论
Keras - 层
如前所述,Keras 层是 Keras 模型的主要构建块。每层接收输入信息,进行一些计算,最后输出转换后的信息。一层的输出将流入下一层作为其输入。让我们在本章中了解有关层的完整详细信息。
介绍
Keras 层需要输入的形状 (input_shape)来理解输入数据的结构,需要初始化器来设置每个输入的权重,最后需要激活器来转换输出以使其非线性。在两者之间,约束限制并指定要生成的输入数据的权重的范围,并且正则化器将在优化过程中通过动态地对权重应用惩罚来尝试优化层(和模型)。
总而言之,Keras 层需要以下最少的细节来创建完整的层。
- 输入数据的形状
- 层中神经元/单元的数量
- 初始化器
- 正则化器
- 约束条件
- 激活
让我们在下一章中了解基本概念。在了解基本概念之前,让我们使用 Sequential 模型 API 创建一个简单的 Keras 层,以了解 Keras 模型和层的工作原理。
from keras.models import Sequential from keras.layers import Activation, Dense from keras import initializers from keras import regularizers from keras import constraints model = Sequential() model.add(Dense(32, input_shape=(16,), kernel_initializer = 'he_uniform', kernel_regularizer = None, kernel_constraint = 'MaxNorm', activation = 'relu')) model.add(Dense(16, activation = 'relu')) model.add(Dense(8))
在哪里,
第 1-5 行导入必要的模块。
第 7 行使用 Sequential API 创建一个新模型。
第 9 行创建一个新的Dense层并将其添加到模型中。Dense是 Keras 提供的入门级层,它接受神经元或单元的数量 (32) 作为其所需参数。如果该层是第一层,那么我们还需要提供输入形状(16,) 。否则,前一层的输出将用作下一层的输入。所有其他参数都是可选的。
第一个参数表示单元(神经元)的数量。
input_shape表示输入数据的形状。
kernel_initializer表示要使用的初始化程序。he_uniform函数设置为值。
kernel_regularizer表示要使用的正则化器。没有设置为值。
kernel_constraint表示要使用的约束。MaxNorm函数设置为值。
激活代表要使用的激活。relu 函数设置为值。
第 10 行创建了包含 16 个单元的第二个Dense层,并将relu设置为激活函数。
第 11 行创建了包含 8 个单元的最终 Dense 层。
层的基本概念
让我们了解层的基本概念以及 Keras 如何支持每个概念。
输入形状
在机器学习中,所有类型的输入数据(例如文本、图像或视频)将首先转换为数字数组,然后输入算法。输入数字可以是一维数组、二维数组(矩阵)或多维数组。我们可以使用shape(整数元组)来指定维度信息。例如,(4,2)表示四行两列的矩阵。
>>> import numpy as np >>> shape = (4, 2) >>> input = np.zeros(shape) >>> print(input) [ [0. 0.] [0. 0.] [0. 0.] [0. 0.] ] >>>
类似地,(3,4,2)三维矩阵具有三个 4x2 矩阵的集合(两行四列)。
>>> import numpy as np >>> shape = (3, 4, 2) >>> input = np.zeros(shape) >>> print(input) [ [[0. 0.] [0. 0.] [0. 0.] [0. 0.]] [[0. 0.] [0. 0.] [0. 0.] [0. 0.]] [[0. 0.] [0. 0.] [0. 0.] [0. 0.]] ] >>>
要创建模型的第一层(或模型的输入层),应指定输入数据的形状。
初始化器
在机器学习中,权重将分配给所有输入数据。Initializers模块提供了不同的函数来设置这些初始权重。Keras 初始化程序的一些函数如下 -
零点
为所有输入数据生成0 。
from keras.models import Sequential from keras.layers import Activation, Dense from keras import initializers my_init = initializers.Zeros() model = Sequential() model.add(Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init))
其中,kernel_initializer表示模型内核的初始化程序。
那些
为所有输入数据生成1 。
from keras.models import Sequential from keras.layers import Activation, Dense from keras import initializers my_init = initializers.Ones() model.add(Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init))
持续的
生成用户为所有输入数据指定的常量值(例如5 )。
from keras.models import Sequential from keras.layers import Activation, Dense from keras import initializers my_init = initializers.Constant(value = 0) model.add( Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init) )
其中,value代表常数值
随机正态
使用输入数据的正态分布生成值。
from keras.models import Sequential from keras.layers import Activation, Dense from keras import initializers my_init = initializers.RandomNormal(mean=0.0, stddev = 0.05, seed = None) model.add(Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init))
在哪里,
Mean表示要生成的随机值的平均值
stddev表示要生成的随机值的标准差
种子代表生成随机数的值
随机均匀
使用输入数据的均匀分布生成值。
from keras import initializers my_init = initializers.RandomUniform(minval = -0.05, maxval = 0.05, seed = None) model.add(Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init))
在哪里,
minval表示要生成的随机值的下限
maxval表示要生成的随机值的上限
截断法线
使用输入数据的截断正态分布生成值。
from keras.models import Sequential from keras.layers import Activation, Dense from keras import initializers my_init = initializers.TruncatedNormal(mean = 0.0, stddev = 0.05, seed = None model.add(Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init))
方差缩放
根据图层的输入形状和输出形状以及指定的比例生成值。
from keras.models import Sequential from keras.layers import Activation, Dense from keras import initializers my_init = initializers.VarianceScaling( scale = 1.0, mode = 'fan_in', distribution = 'normal', seed = None) model.add(Dense(512, activation = 'relu', input_shape = (784,), skernel_initializer = my_init))
在哪里,
scale表示缩放因子
mode表示fan_in、fan_out和fan_avg值中的任何一个
分布代表正态分布或均匀分布
方差缩放
它使用以下公式查找正态分布的stddev值,然后使用正态分布查找权重,
stddev = sqrt(scale / n)
其中n代表,
mode 的输入单元数量 = fan_in
模式的输出单元数 = fan_out
模式的输入和输出单元的平均数量 = fan_avg
类似地,它使用以下公式找到均匀分布的极限,然后使用均匀分布找到权重,
limit = sqrt(3 * scale / n)
lecun_正常
使用输入数据的 lecun 正态分布生成值。
from keras.models import Sequential from keras.layers import Activation, Dense from keras import initializers my_init = initializers.RandomUniform(minval = -0.05, maxval = 0.05, seed = None) model.add(Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init))
它使用以下公式找到stddev,然后应用正态分布
stddev = sqrt(1 / fan_in)
其中,fan_in表示输入单元的数量。
lecun_制服
使用输入数据的 lecun 均匀分布生成值。
from keras.models import Sequential from keras.layers import Activation, Dense from keras import initializers my_init = initializers.lecun_uniform(seed = None) model.add(Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init))
它使用以下公式找到极限,然后应用均匀分布
limit = sqrt(3 / fan_in)
在哪里,
fan_in表示输入单元的数量
fan_out表示输出单元的数量
glorot_正常
使用输入数据的 glorot 正态分布生成值。
from keras.models import Sequential from keras.layers import Activation, Dense from keras import initializers my_init = initializers.glorot_normal(seed=None) model.add( Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init) )
它使用以下公式找到stddev,然后应用正态分布
stddev = sqrt(2 / (fan_in + fan_out))
在哪里,
fan_in表示输入单元的数量
fan_out表示输出单元的数量
glorot_制服
使用输入数据的 glorot 均匀分布生成值。
from keras.models import Sequential from keras.layers import Activation, Dense from keras import initializers my_init = initializers.glorot_uniform(seed = None) model.add(Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init))
它使用以下公式找到极限,然后应用均匀分布
limit = sqrt(6 / (fan_in + fan_out))
在哪里,
fan_in表示输入单元的数量。
fan_out表示输出单元的数量
他_正常
使用输入数据的正态分布生成值。
from keras.models import Sequential from keras.layers import Activation, Dense from keras import initializers my_init = initializers.RandomUniform(minval = -0.05, maxval = 0.05, seed = None) model.add(Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init))
它使用以下公式查找stddev,然后应用正态分布。
stddev = sqrt(2 / fan_in)
其中,fan_in表示输入单元的数量。
他_制服
使用输入数据的均匀分布生成值。
from keras.models import Sequential from keras.layers import Activation, Dense from keras import initializers my_init = initializers.he_normal(seed = None) model.add(Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init))
它使用以下公式找到极限,然后应用均匀分布。
limit = sqrt(6 / fan_in)
其中,fan_in表示输入单元的数量。
正交
生成随机正交矩阵。
from keras.models import Sequential from keras.layers import Activation, Dense from keras import initializers my_init = initializers.Orthogonal(gain = 1.0, seed = None) model.add(Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init))
其中,gain表示矩阵的乘法因子。
身份
生成单位矩阵。
from keras.models import Sequential from keras.layers import Activation, Dense from keras import initializers my_init = initializers.Identity(gain = 1.0) model.add( Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init) )
约束条件
在机器学习中,优化阶段会对参数(权重)设置约束。<>Constraints模块提供了不同的函数来设置图层上的约束。一些约束函数如下。
非负
将权重限制为非负数。
from keras.models import Sequential from keras.layers import Activation, Dense from keras import initializers my_init = initializers.Identity(gain = 1.0) model.add( Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init) )
其中,kernel_constraint表示要在该层中使用的约束。
单位标准
将权重限制为单位范数。
from keras.models import Sequential from keras.layers import Activation, Dense from keras import constraints my_constrain = constraints.UnitNorm(axis = 0) model = Sequential() model.add(Dense(512, activation = 'relu', input_shape = (784,), kernel_constraint = my_constrain))
最大范数
将权重限制为小于或等于给定值的范数。
from keras.models import Sequential from keras.layers import Activation, Dense from keras import constraints my_constrain = constraints.MaxNorm(max_value = 2, axis = 0) model = Sequential() model.add(Dense(512, activation = 'relu', input_shape = (784,), kernel_constraint = my_constrain))
在哪里,
max_value代表上限
axis表示要应用约束的维度。例如,在形状 (2,3,4) 中,轴 0 表示第一维,1 表示第二维,2 表示第三维
最小最大范数
将权重限制为指定最小值和最大值之间的范数。
from keras.models import Sequential from keras.layers import Activation, Dense from keras import constraints my_constrain = constraints.MinMaxNorm(min_value = 0.0, max_value = 1.0, rate = 1.0, axis = 0) model = Sequential() model.add(Dense(512, activation = 'relu', input_shape = (784,), kernel_constraint = my_constrain))
其中,rate表示应用权重约束的速率。
正则化器
在机器学习中,正则化器用于优化阶段。它在优化期间对层参数施加一些惩罚。Keras 正则化模块提供以下函数来设置层上的惩罚。正则化仅适用于每层。
L1正则化器
它提供基于 L1 的正则化。
from keras.models import Sequential from keras.layers import Activation, Dense from keras import regularizers my_regularizer = regularizers.l1(0.) model = Sequential() model.add(Dense(512, activation = 'relu', input_shape = (784,), kernel_regularizer = my_regularizer))
其中,kernel_regularizer表示应用权重约束的速率。
L2正则化器
它提供基于 L2 的正则化。
from keras.models import Sequential from keras.layers import Activation, Dense from keras import regularizers my_regularizer = regularizers.l2(0.) model = Sequential() model.add(Dense(512, activation = 'relu', input_shape = (784,), kernel_regularizer = my_regularizer))
L1 和 L2 正则化器
它提供基于 L1 和 L2 的正则化。
from keras.models import Sequential from keras.layers import Activation, Dense from keras import regularizers my_regularizer = regularizers.l2(0.) model = Sequential() model.add(Dense(512, activation = 'relu', input_shape = (784,), kernel_regularizer = my_regularizer))
激活
在机器学习中,激活函数是一种特殊函数,用于确定特定神经元是否被激活。基本上,激活函数对输入数据进行非线性变换,从而使神经元能够更好地学习。神经元的输出取决于激活函数。
当您回想起单一感知的概念时,感知器(神经元)的输出只是激活函数的结果,它接受所有输入乘以相应权重加上总体偏差(如果有)的总和。
result = Activation(SUMOF(input * weight) + bias)
因此,激活函数对于模型的成功学习起着重要作用。Keras 在激活模块中提供了很多激活函数。让我们了解该模块中所有可用的激活。
线性
应用线性函数。什么也没做。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'linear', input_shape = (784,)))
其中,激活指的是该层的激活函数。可以简单地通过函数名称来指定,并且该层将使用相应的激活器。
埃卢
应用指数线性单位。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'elu', input_shape = (784,)))
塞卢
应用缩放指数线性单位。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'selu', input_shape = (784,)))
雷卢
应用修正线性单位。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'relu', input_shape = (784,)))
软最大
应用 Softmax 函数。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'softmax', input_shape = (784,)))
软加
应用 Softplus 功能。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'softplus', input_shape = (784,)))
软签名
应用软签名功能。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'softsign', input_shape = (784,)))
正值
应用双曲正切函数。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'tanh', input_shape = (784,)))
乙状结肠
应用 Sigmoid 函数。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'sigmoid', input_shape = (784,)))
硬乙状结肠
应用硬 Sigmoid 函数。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'hard_sigmoid', input_shape = (784,)))
指数
应用指数函数。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'exponential', input_shape = (784,)))
先生编号 | 图层和描述 |
---|---|
1 |
密集层是常规的深度连接的神经网络层。 |
2 |
Dropout是机器学习中的重要概念之一。 |
3 |
Flatten用于压平输入。 |
4 |
Reshape用于更改输入的形状。 |
5 |
排列还用于使用模式更改输入的形状。 |
6 |
RepeatVector用于将输入重复设定次数 n 次。 |
7 |
Lambda用于使用表达式或函数转换输入数据。 |
8 |
Keras 包含许多用于创建基于卷积的 ANN 的层,通常称为卷积神经网络 (CNN)。 |
9 |
它用于对时态数据执行最大池化操作。 |
10 |
局部连接层与 Conv1D 层类似,但不同之处在于 Conv1D 层权重是共享的,但这里权重是不共享的。 |
11 |
它用于合并输入列表。 |
12 |
它在输入层执行嵌入操作。 |