📅  最后修改于: 2020-12-11 04:55:56             🧑  作者: Mango
如前所述,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层并将其添加到模型中。密集是Keras提供的入门级层,它接受神经元或单位数(32)作为其必需参数。如果该层是第一层,那么我们还需要提供输入形状(16) 。否则,上一层的输出将用作下一层的输入。所有其他参数都是可选的。
第一个参数代表单位数(神经元)。
input_shape代表输入数据的形状。
kernel_initializer表示要使用的初始化程序。 he_uniform函数设置为值。
kernel_regularizer表示要使用的正则化器。没有设置任何值。
kernel_constraint表示要使用的约束。 MaxNorm函数设置为值。
激活表示要使用的激活。将relu函数设置为值。
第10行用16个单位创建第二个Dense层,并将relu设置为激活函数。
第11行使用8个单位创建最终的密集层。
让我们了解层的基本概念以及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)具有三个4×2矩阵集合(两行四列)的三维矩阵。
>>> 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)
)
其中,值代表常数
使用输入数据的正态分布生成值。
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))
哪里,
平均值表示要生成的随机值的平均值
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))
哪里,
比例代表比例因子
模式代表fan_in,fan_out和fan_avg值中的任何一个
分布代表正态分布或均匀分布
它使用以下公式找到正态分布的stddev值,然后使用正态分布找到权重,
stddev = sqrt(scale / n)
n代表
模式的输入单元数= fan_in
模式的输出单元数= fan_out
模式的平均输入和输出单元数= fan_avg
同样,它使用以下公式找到均匀分布的极限,然后使用均匀分布找到权重,
limit = sqrt(3 * scale / n)
使用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输入数据的均匀分布来生成值。
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代表输出单元的数量
使用输入数据的正态分布生成值。
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代表输出单元的数量
使用输入数据的全局均匀分布来生成值。
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))
其中,增益代表矩阵的乘法因子。
生成单位矩阵。
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)
)
在机器学习中,将在优化阶段对参数(权重)设置约束。 <>约束模块提供了不同的功能来设置图层上的约束。一些约束函数如下。
将权重限制为非负数。
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代表上限
轴表示要应用约束的尺寸。例如在形状(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的正则化。
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的正则化。
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的正则化。
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,)))
应用Softsign函数。
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,)))
Sr.No | Layers & Description |
---|---|
1 |
Dense layer is the regular deeply connected neural network layer. |
2 |
Dropout is one of the important concept in the machine learning. |
3 |
Flatten is used to flatten the input. |
4 |
Reshape is used to change the shape of the input. |
5 |
Permute is also used to change the shape of the input using pattern. |
6 |
RepeatVector is used to repeat the input for set number, n of times. |
7 |
Lambda is used to transform the input data using an expression or function. |
8 |
Keras contains a lot of layers for creating Convolution based ANN, popularly called as Convolution Neural Network (CNN). |
9 |
It is used to perform max pooling operations on temporal data. |
10 |
Locally connected layers are similar to Conv1D layer but the difference is Conv1D layer weights are shared but here weights are unshared. |
11 |
It is used to merge a list of inputs. |
12 |
It performs embedding operations in input layer. |