畅游人工智能之海--Keras教程之核心网络层(一)
畅游人工智能之海--Keras教程之核心网络层(一)
各位读者大家好,上周我们已经详细讲解了Keras的两种模型,相信大家经过学习已经对Keras构建神经网络的两种方式有了一个清晰的认识。那么明确了网络结构之后,我们该选择什么网络层添加进神经网络里面呢?这就需要我们对网络层的作用进行细致的学习了。我们计划从这周开始进入对网络层的学习当中,那么今天,笔者便要向大家详细的介绍核心网络层的类别及功能,让我们一起学习吧!
Dense层
1 | keras.layers.Dense( |
作用:
将输入的特征在Dense层中经过非线性变化,提取这些特征之间的关联,最后映射到输出空间上,减少特征位置对分类带来的影响。实现的操作为:output = activation(dot(input, kernel) + bias)
,其中 activation
是按逐个元素计算的激活函数,kernel
是由网络层创建的权值矩阵,以及 bias
是其创建的偏置向量 (只在 use_bias
为 True
时才有用)。如果输入的秩大于2,那么输入首先被展平然后再计算与kernel
的点乘
输入尺寸:
nD张量,当使用Dense层作为第一层时,使用input_shape(整数元组)指定输入大小。
输出尺寸:
nD张量,输出尺寸为(batch_size,units)
例子:
1 | #Dense不作为第一层时无需input_shape参数 |
Activation层
1 | keras.layers.Activation( |
功能:
对输入应用激活函数并输出
输入尺寸:
任意大小,当使用Activation层作为第一层时,使用input_shape(整数元组)指定输入大小。
输出尺寸:
与输入相同。
例子:
1 | #使用tanh激活函数 |
Dropout层
1 | keras.layers.Dropout( |
功能:
在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,将输入单元的值按比率随机设置为 0,有效防止过拟合。
输入大小:
任意大小。
输出大小:
与输入一致。
例子:
1 | #将输入单元的值按0.02的概率设置为0 |
Flatten层
1 | keras.layers.Flatten( |
功能:
把输入展平成一维化输出,常用在从卷积层到全连接层的过渡,不影响batch的大小。
输入:
任意尺寸。
输出:
将输入尺寸的各维大小相乘得到的值即为输出尺寸。
例子:
1 | # 一开始的输入尺寸为(None, 64, 32, 32) |
Input层
1 | keras.engine.input_layer.Input() |
功能:
实例化Keras张量,一般用于网络的第一次
输入尺寸:
任意大小,用于第一层时参数为shape,指定输入尺寸。
输出尺寸:
跟输入尺寸一致。
例子:
1 | #实例化一个Keras张量,一般用于构建Model类模型 |
Reshape层
1 | keras.layers.Reshape( |
功能:
根据给定的参数将输入调整为指定的尺寸
输入尺寸:
任意大小,当使用Reshape层作为第一层时,使用input_shape(整数元组)指定输入大小。
输出尺寸:
(batch_size,) + 指定的尺寸。
例子:
1 | #不是第一层时无需导入input_shape=() |
Permute层
1 | keras.layers.Permute( |
功能:
根据给定的参数置换输入的维度,在某些场景下很有用,例如将RNN和CNN连接在一起。
输入尺寸:
任意大小,当使用Permute层作为第一层时,使用input_shape(整数元组)指定输入大小。
输出尺寸:
(batch_size,)+输入尺寸经过指定置换后的尺寸。
例子:
1 | #可以看到置换模式为把输入的第一维和第二维进行置换 |
相信大家经过今天的学习,能够对核心网络层的一部分的类型和功能有一个清晰的认知,明天的文章将带领大家一起学习核心网络层剩下的部分,让我们一起期待吧!