畅游人工智能之海--Keras教程之核心网络层(一)

畅游人工智能之海--Keras教程之核心网络层(一)

各位读者大家好,上周我们已经详细讲解了Keras的两种模型,相信大家经过学习已经对Keras构建神经网络的两种方式有了一个清晰的认识。那么明确了网络结构之后,我们该选择什么网络层添加进神经网络里面呢?这就需要我们对网络层的作用进行细致的学习了。我们计划从这周开始进入对网络层的学习当中,那么今天,笔者便要向大家详细的介绍核心网络层的类别及功能,让我们一起学习吧!

Dense层
1
2
3
4
5
6
7
8
9
10
11
12
13
keras.layers.Dense(
units, #正整数,输出空间维度
activation=None, #激活函数
use_bias=True, #布尔值,该层是否使用偏置向量
kernel_initializer='glorot_uniform', #kernel 权值矩阵的初始化器
bias_initializer='zeros', #偏置向量的初始化器
kernel_regularizer=None, #运用到 kernel 权值矩阵的正则化函数
bias_regularizer=None, #运用到偏置向的的正则化函数
activity_regularizer=None, #运用到层的输出的正则化函数
kernel_constraint=None, #运用到 kernel 权值矩阵的约束函数
bias_constraint=None #运用到偏置向量的约束函数
#初始化器、正则化函数和约束函数在后文会单独来讲
)

作用:

将输入的特征在Dense层中经过非线性变化,提取这些特征之间的关联,最后映射到输出空间上,减少特征位置对分类带来的影响。实现的操作为:output = activation(dot(input, kernel) + bias) ,其中 activation 是按逐个元素计算的激活函数,kernel 是由网络层创建的权值矩阵,以及 bias 是其创建的偏置向量 (只在 use_biasTrue 时才有用)。如果输入的秩大于2,那么输入首先被展平然后再计算与kernel 的点乘

输入尺寸:

nD张量,当使用Dense层作为第一层时,使用input_shape(整数元组)指定输入大小。

输出尺寸:

nD张量,输出尺寸为(batch_size,units)

例子:

1
2
3
#Dense不作为第一层时无需input_shape参数
#输入尺寸为(None,16),输出尺寸为(None,32)
model.add(Dense(32, input_shape=(16,)))
Activation层
1
2
3
keras.layers.Activation(
activation#要使用的激活函数名称或者选择一个 Theano 或 TensorFlow 操作。
)

功能:

对输入应用激活函数并输出

输入尺寸:

任意大小,当使用Activation层作为第一层时,使用input_shape(整数元组)指定输入大小。

输出尺寸:

与输入相同。

例子:

1
2
#使用tanh激活函数
model.add(Activation('tanh'))
Dropout层
1
2
3
4
5
keras.layers.Dropout(
rate, #将输入单元的值按比率rate随机设置为 0
noise_shape=None, #1D整数张量,表示将与输入相乘的二进制dropout的形状。
seed=None#一个作为随机种子的Python整数
)

功能:

在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,将输入单元的值按比率随机设置为 0,有效防止过拟合。

输入大小:

任意大小。

输出大小:

与输入一致。

例子:

1
2
#将输入单元的值按0.02的概率设置为0
model.add(Dropout(0.02))
Flatten层
1
2
3
keras.layers.Flatten(
data_format=None#一个字符串,值为channels_last或者channels_first,表示输入维度展平时保留权重的顺序
)

功能:

把输入展平成一维化输出,常用在从卷积层到全连接层的过渡,不影响batch的大小。

输入:

任意尺寸。

输出:

将输入尺寸的各维大小相乘得到的值即为输出尺寸。

例子:

1
2
3
4
5
# 一开始的输入尺寸为(None, 64, 32, 32)
# None为批大小
model.add(Conv2D(64, (3, 3),input_shape=(3, 32, 32)))
# 展平后输出尺寸为(None, 65536)
model.add(Flatten())
Input层
1
2
keras.engine.input_layer.Input()
#用于第一层时参数为shape,指定输入尺寸

功能:

实例化Keras张量,一般用于网络的第一次

输入尺寸:

任意大小,用于第一层时参数为shape,指定输入尺寸。

输出尺寸:

跟输入尺寸一致。

例子:

1
2
#实例化一个Keras张量,一般用于构建Model类模型
x = Input(shape=(32,))
Reshape层
1
2
3
keras.layers.Reshape(
target_shape#整数元组,表示要把输入调整成的目标尺寸
)

功能:

根据给定的参数将输入调整为指定的尺寸

输入尺寸:

任意大小,当使用Reshape层作为第一层时,使用input_shape(整数元组)指定输入大小。

输出尺寸:

(batch_size,) + 指定的尺寸。

例子:

1
2
3
4
5
6
7
8
#不是第一层时无需导入input_shape=()
#把输入尺寸变为(None,3,4)
# `None` 是批表示的维度
model.add(Reshape((3, 4), input_shape=(12,)))
#可以通过-1来表示维度的尺寸推断
#即程序可以由输入尺寸(None,3,4)推断出-1处的值应为3,因为3*4=3*2*2
#输出尺寸为(None,3,2,2)
model.add(Reshape((-1, 2, 2)))
Permute层
1
2
3
keras.layers.Permute(
dims#整数元组。表示哪几个维度进行置换,索引从1开始,(2,1)表示置换输入的第一个和第二个维度。
)

功能:

根据给定的参数置换输入的维度,在某些场景下很有用,例如将RNN和CNN连接在一起。

输入尺寸:

任意大小,当使用Permute层作为第一层时,使用input_shape(整数元组)指定输入大小。

输出尺寸:

(batch_size,)+输入尺寸经过指定置换后的尺寸。

例子:

1
2
3
4
5
#可以看到置换模式为把输入的第一维和第二维进行置换
#输入尺寸为(None,10,64),所以输出尺寸为(None,64,10)
#不是第一层时无需导入input_shape=()
# `None` 是批表示的维度
model.add(Permute((2, 1), input_shape=(10, 64)))

相信大家经过今天的学习,能够对核心网络层的一部分的类型和功能有一个清晰的认知,明天的文章将带领大家一起学习核心网络层剩下的部分,让我们一起期待吧!