Keras – 层

Keras – 层

正如前面所学,Keras层是Keras模型的主要构建模块。每一层接收输入信息,进行一些计算,最后输出转换后的信息。一个层的输出将流入下一个层作为其输入。让我们在本章中了解关于层的完整细节。

简介

Keras层需要 ** 输入的形状(input_shape)** 来理解输入数据的结构, ** 初始化器为** 每个输入设置权重,最后激活器将输出转化为非线性。在这两者之间,约束条件限制并指定了要生成的输入数据的权重范围,正则器将试图通过在优化过程中动态地对权重进行惩罚来优化该层(和模型)。

总而言之,Keras层需要以下最小的细节来创建一个完整的层。

  • 输入数据的形状
  • 该层中的神经元/单元的数量
  • 初始化器
  • 正则器
  • 限制条件
  • 激活

让我们在下一章中了解基本概念。在理解基本概念之前,让我们使用Sequential model 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 代表要使用的 正则器 。None被设置为值。

    • kernel_ constraint_ 表示使用的约束条件, MaxNorm 函数被设置为值。

    • activation 代表要使用的激活,relu函数被设置为值。

  • 第10 行用16个单元创建第二个 密集 层,并设置 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.]]
]
>>>

为了创建模型的第一层(或模型的输入层),应该指定输入数据的形状。

初始化器

在机器学习中,权重将被分配给所有输入数据。 _ 初始化_ 模块提供了不同的函数来设置这些初始权重。 _ 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 代表模型内核的初始化器。

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))

常数

为所有输入数据生成一个由用户指定的常数(如 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))

其中

  • 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 代表要生成的随机值的上限。

截断的正态分布

使用输入数据的截断正态分布生成数值。

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 中的任何一个值

  • distribution ** 代表 **正态分布均匀分布 的任何一种

方差缩放

它使用以下公式找到正态分布的 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 = 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

使用输入数据的he均匀分布生成数值。

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)
)

约束条件

在机器学习中,在优化阶段将对参数(权重)设置约束。 <>约束模块提供了不同的函数来设置层上的约束。其中一些约束函数如下。

非负值

约束权重为非负值。

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))

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正则化

它提供基于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正则器

它同时提供基于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,)))

其中, 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,)))
序号 层数和描述
1 密集层 密集层 是常规的深度连接神经网络层。
2 剔除层 剔除 层是机器学习中的一个重要概念。
3 扁平层 扁平层 用于扁平化输入。
4 重塑图层 重塑图层 用于改变输入的形状。
5 Permute Layers Permute 也用于用图案改变输入的形状。
6 RepeatVector Layers RepeatVector 用于重复输入设定的次数,n次。
7 Lambda层 Lambda 用于使用表达式或函数来转换输入数据。
8 卷积层 Keras包含很多层,用于创建基于卷积的ANN,通常被称为 卷积神经网络(CNN)。
9 池化层 它用于对时态数据进行最大池化操作。
10 局部连接 层 局部连接层类似于Conv1D层,但区别在于Conv1D层的权重是共享的,而这里的权重是不共享的。
11 合并层 它用于合并输入的列表。
12 嵌入 层 它在输入层执行嵌入操作。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程