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_outfan_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 层

Lambda用于使用表达式或函数转换输入数据。

8

卷积层

Keras 包含许多用于创建基于卷积的 ANN 的层,通常称为卷积神经网络 (CNN)

9

池化层

它用于对时态数据执行最大池化操作。

10

局部连接层

局部连接层与 Conv1D 层类似,但不同之处在于 Conv1D 层权重是共享的,但这里权重是不共享的。

11

合并层

它用于合并输入列表。

12

嵌入层

它在输入层执行嵌入操作。