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

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

Dense层

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)

例子:

#Dense不作为第一层时无需input_shape参数
#输入尺寸为(None,16),输出尺寸为(None,32)
model.add(Dense(32, input_shape=(16,)))
 

Activation层

keras.layers.Activation(
    activation#要使用的激活函数名称或者选择一个 Theano 或 TensorFlow 操作。
)

功能:

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

输入尺寸:

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

输出尺寸:

与输入相同。

例子:

#使用tanh激活函数
model.add(Activation('tanh'))
 

Dropout层

keras.layers.Dropout(
    rate, #将输入单元的值按比率rate随机设置为 0
    noise_shape=None, #1D整数张量,表示将与输入相乘的二进制dropout的形状。
    seed=None#一个作为随机种子的Python整数
)

功能:

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

输入大小:

任意大小。

输出大小:

与输入一致。

例子:

#将输入单元的值按0.02的概率设置为0
model.add(Dropout(0.02))
 

Flatten层

keras.layers.Flatten(
    data_format=None#一个字符串,值为channels_last或者channels_first,表示输入维度展平时保留权重的顺序
)

功能:

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

输入:

任意尺寸。

输出:

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

例子:

# 一开始的输入尺寸为(None, 64, 32, 32)
# None为批大小
model.add(Conv2D(64, (3, 3),input_shape=(3, 32, 32)))
# 展平后输出尺寸为(None, 65536)
model.add(Flatten())
 

Input层

keras.engine.input_layer.Input()
#用于第一层时参数为shape,指定输入尺寸

功能:

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

输入尺寸:

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

输出尺寸:

跟输入尺寸一致。

例子:

#实例化一个Keras张量,一般用于构建Model类模型
x = Input(shape=(32,))
 

Reshape层

keras.layers.Reshape(
    target_shape#整数元组,表示要把输入调整成的目标尺寸
)

功能:

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

输入尺寸:

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

输出尺寸:

(batch_size,) + 指定的尺寸。

例子:

#不是第一层时无需导入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层

keras.layers.Permute(
    dims#整数元组。表示哪几个维度进行置换,索引从1开始,(2,1)表示置换输入的第一个和第二个维度。
)

功能:

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

输入尺寸:

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

输出尺寸:

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

例子:

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

 

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

 

更多优质资源可以关注BBIT获取哦~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值