Keras - 层
如前所述,Keras 层是 Keras 模型的主要构建块。每层接收输入信息,进行一些计算,最后输出转换后的信息。一层的输出将作为其输入流入下一层。让我们在本章中了解有关层的完整细节。
简介
Keras 层需要输入的形状 (input_shape)来了解输入数据的结构,初始化器来设置每个输入的权重,最后激活器来转换输出以使其非线性。在这两者之间,约束限制并指定要生成的输入数据权重的范围,而正则化器将尝试通过在优化过程中动态地对权重应用惩罚来优化层(和模型)。
总而言之,Keras 层需要以下最低限度的细节来创建一个完整的层。
- 输入数据的形状
- 层中的神经元/单元数量
- 初始化器
- 正则化器
- 约束
- 激活
让我们在下一章中了解基本概念。在理解基本概念之前,让我们使用顺序模型 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表示要使用的regularizer。None设置为值。
kernel_constraint表示要使用的约束。MaxNorm函数设置为值。
activation表示要使用的激活。 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 Initializers的一些函数如下 −
零
为所有输入数据生成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表示模型内核的初始化程序。
Ones
Generates 1 for all input data.
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))
Constant
为所有输入数据生成一个由用户指定的常量值(例如,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 值代表常数值
RandomNormal
使用输入数据的正态分布生成值。
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 表示要生成的随机值的标准差
seed 表示要生成随机数的值
RandomUniform
使用输入数据的均匀分布生成值。
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 表示要生成的随机值的上限
TruncatedNormal
使用输入数据的截断正态分布生成值。
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))
VarianceScaling
根据层的输入形状和输出形状以及指定的比例生成值。
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 值中的任意一个
distribution 表示 normal 或 uniform
VarianceScaling
使用以下公式找到正态分布的 stddev 值,然后使用正态分布找到权重,
stddev = sqrt(scale / n)
其中 n 表示,
mode 的输入单元数 = fan_in
模式 = fan_out 的输出单元数
模式 = fan_avg 的输入和输出单元的平均数量
同样,它使用以下公式找到均匀分布的极限,然后使用均匀分布找到权重,
limit = sqrt(3 * scale / n)
lecun_normal
使用输入数据的 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_uniform
使用输入数据的 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(极限),然后应用均匀分布
limit = sqrt(3 / fan_in)
其中,
fan_in表示输入单元的数量
fan_out表示输出单元的数量
glorot_normal
使用输入数据的 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_uniform
使用输入数据的 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,然后应用均匀分布
limit = sqrt(6 / (fan_in + fan_out))
其中,
fan_in表示输入单元的数量。
fan_out表示输出单元的数量
he_normal
使用输入数据的正态分布生成值。
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 表示输入单元的数量。
he_uniform
使用输入数据的均匀分布生成值。
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,然后应用均匀分布。
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表示矩阵的乘法因子。
Identity
Generates identity matrix.
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
在机器学习中,优化阶段会对参数(权重)设置约束。 <>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表示要在层中使用的约束。
UnitNorm
将权重限制为单位范数。
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))
MaxNorm
将权重限制为小于或等于给定值的范数。
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 表示第三维
MinMaxNorm
将权重约束为指定的最小值和最大值之间的范数。
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 正则化器
It provides L2 based regularization.
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))
Activation(激活)
在机器学习中,Activation 激活函数是一种特殊函数,用于查找特定神经元是否被激活。基本上,激活函数对输入数据进行非线性变换,从而使神经元能够更好地学习。神经元的输出取决于激活函数。
当您回想单一感知的概念时,感知器(神经元)的输出只是激活函数的结果,它接受所有输入乘以其相应权重加上总体偏差(如果有)的总和。
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,)))
其中,activation 指的是层的激活函数。只需通过函数名称指定,层将使用相应的激活器。
elu
应用指数线性单位。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'elu', input_shape = (784,)))
selu
应用缩放指数线性单位。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'selu', input_shape = (784,)))
relu
应用整流线性单元。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'relu', input_shape = (784,)))
softmax
应用 Softmax 函数。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'softmax', input_shape = (784,)))
softplus
应用 Softplus 函数。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'softplus', input_shape = (784,)))
softsign
应用 Softsign 函数。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'softsign', input_shape = (784,)))
tanh
应用双曲正切函数。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'tanh', input_shape = (784,)))
sigmoid
应用 Sigmoid 函数。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'sigmoid', input_shape = (784,)))
hard_sigmoid
应用 Hard Sigmoid 函数。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'hard_sigmoid', input_shape = (784,)))
exponential
应用指数函数。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'exponential', input_shape = (784,)))
Sr.No | 图层 &描述 |
---|---|
1 |
Dense 层 是常规的深度连接神经网络层。 |
2 |
Dropout 是机器学习中的一个重要概念。 |
3 |
Flatten 用于展平输入。 |
4 |
Reshape 用于更改输入的形状。 |
5 |
Permute 也用于使用模式更改输入的形状。 |
6 |
RepeatVector 用于将输入重复设定的次数(n 次)。 |
7 |
Lambda 用于使用表达式或函数转换输入数据。 |
8 |
Keras 包含许多用于创建基于卷积的 ANN 的层,通常称为卷积神经网络 (CNN)。 |
9 |
它用于对时间数据执行最大池化操作。 |
10 |
局部连接层类似于 Conv1D 层,但不同之处在于 Conv1D 层权重是共享的,但这里的权重是未共享。 |
11 |
用于合并输入列表。 |
12 |
在输入层执行嵌入操作。 |