Keras - 层
-
简述
如前所述,Keras 层是 Keras 模型的主要构建块。每一层接收输入信息,进行一些计算,最后输出转换后的信息。一层的输出将作为其输入流入下一层。让我们在本章中了解有关层的完整详细信息。 -
介绍
Keras 层需要输入的形状 (input_shape)了解输入数据的结构,initializer为每个输入设置权重,最后激活器将输出转换为非线性。在这两者之间,约束限制并指定要生成的输入数据的权重范围,并且正则化器将通过在优化过程中动态地对权重应用惩罚来尝试优化层(和模型)。总而言之,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)作为其所需参数。如果层是第一层,那么我们需要提供Input Shape, (16,)也是。否则,上一层的输出将用作下一层的输入。所有其他参数都是可选的。
-
第一个参数表示单元(神经元)的数量。
-
input_shape表示输入数据的形状。
-
kernel_initializer表示要使用的初始化程序。he_uniform函数设置为值。
-
kernel_regularizer代表regularizer要使用的。无设置为值。
-
kernel_constraint表示要使用的约束。MaxNorm函数设置为值。
-
activation表示要使用的激活。relu 函数设置为值。
-
-
行 10创建第二个Dense具有 16 个单元的层并设置relu作为激活函数。
-
行 11创建具有 8 个单位的最终密集层。
-
层的基本概念
让我们了解层的基本概念以及 Keras 如何支持每个概念。Input shape
在机器学习中,所有类型的输入数据,如文本、图像或视频,都将首先转换为数字数组,然后输入算法。输入数字可以是一维数组、二维数组(矩阵)或多维数组。我们可以使用指定维度信息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 Initializer功能如下 -Zeros
生成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
生成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))
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代表,-
模式的输入单元数 = 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表示输入单元的数量。Orthogonal
生成一个随机正交矩阵。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
生成单位矩阵。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 模块提供了不同的函数来设置层的约束。一些约束函数如下。NonNeg
将权重约束为非负数。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表示上限
-
轴表示要应用约束的维度。例如,在 Shape (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 Regularizer
它提供了基于 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 Regularizer
它提供了基于 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 and L2 Regularizer
它提供了基于 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 在激活模块中提供了很多激活功能。让我们了解模块中可用的所有激活。行ar
应用线性函数。什么也没做。from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = '行ar', 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
应用硬 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,)))
序号 层和描述 1 Dense LayerDense layer是常规的深度连接神经网络层。2 Dropout LayersDropout是机器学习中的重要概念之一。3 Flatten LayersFlatten用于展平输入。4 Reshape LayersReshape用于改变输入的形状。5 Permute LayersPermute也用于使用模式改变输入的形状。6 RepeatVector LayersRepeatVector用于重复输入集合数,n 次。7 Lambda LayersLambda用于使用表达式或函数转换输入数据。8 Convolution LayersKeras 包含许多用于创建基于卷积的 ANN 的层,通常称为卷积神经网络 (CNN)。9 Pooling Layer它用于对时间数据执行最大池化操作。10 Locally connected layer局部连接层类似于 Conv1D 层,但不同之处在于 Conv1D 层的权重是共享的,但这里的权重是不共享的。11 Merge Layer它用于合并输入列表。12 Embedding Layer它在输入层执行嵌入操作。