其他
MLK | Keras 核心网络层的解读指南
接着上次的Keras入门继续深入学习,若对上次知识有点遗忘的,建议回顾回顾哈。 1 > MLK | Keras 入门深度学习逢看必会 2 > MLK | Keras 基础模型调参指南
今天专门深入学习一下 Keras 的核心网络层,内容主要来自官方文档,按个人理解进行梳理,主要介绍Keras 核心Layers的含义,以及其调用方法,做到了然于胸。
🎥 前情回顾
MLK | 一文理清 深度学习前馈神经网络
MLK | 机器学习常见算法优缺点了解一下
MLK | 如何解决机器学习树集成模型的解释性问题
MLK | 机器学习论文搜索利器推荐
01 Dense-全连接层
keras.layers.Dense(units,
activation=None,
use_bias=True,
kernel_initializer='glorot_uniform',
bias_initializer='zeros',
kernel_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
bias_constraint=None)
model=Sequential()
# 作为 Sequential 模型的第一层,指定输入尺寸为 28*28
model.add(Dense(input_dim=28*28,units=633,activation='sigmoid'))
# 在第一层之后,你就不再需要指定输入的尺寸了
model.add(Dense(units=633,activation='sigmoid'))
model.add(Dense(units=633,activation='sigmoid'))
model.add(Dense(units=10,activation='softmax'))
参数详解:
不同激活函数有着不一样的参数,可以查看: https://keras.io/zh/activations/
(4)-(5)中可供选择的Initializer有:Zeros、random_uniform、Ones、Constant、RandomNormal等等,可以查看: https://keras.io/zh/initializers/
model.add(Dense(units=64,
kernel_initializer=initializers.random_normal(stddev=0.01),
bias_initializer=initializers.Zeros()
))
(6)-(8)的参数都是正则化相关的,也就是对各个网络层的参数或者激活情况进行惩罚,惩罚是以“layer”为对象的,目前Keras可供使用的正则化器有L1/L2/L1_L2,具体可以查看: https://keras.io/zh/regularizers/
model.add(Dense(units=64, input_dim=64,
kernel_regularizer=regularizers.l2(0.01),
activity_regularizer=regularizers.l1(0.01)))
constraints模块允许在优化期间对网格参数设置约束(比如非负),约束也是以“layer”为对象的,目前可用的约束包括:MaxNorm(最大范数权值约束)、NonNeg(权重非负的约束)、UnitNorm(映射到每个隐藏单元的权值的约束)、MinMaxNorm(最小/最大范数权值约束),具体可以查看: https://keras.io/zh/constraints/
model.add(Dense(units=64, input_dim=64,
kernel_constraint=constraints.MinMaxNorm(min_value=0.0, max_value=1.0, rate=1.0, axis=0),
bias_constraint=constraints.NonNeg()
))
02 Dropout
'''dropout的demo'''
model.add(Dropout(0.7))
rate:取值在0~1之间,含义为需要 drop的比例(概率) noise_shape:1维的Tensor seed:随机种子,正整数
03 Flatten
model.add(Conv2D(64, (3, 3),
input_shape=(3, 32, 32), padding='same',))
# 现在:model.output_shape == (None, 64, 32, 32)
model.add(Flatten())
# 现在:model.output_shape == (None, 65536)
04 Reshape
# 作为 Sequential 模型的第一层
model = Sequential()
model.add(Reshape((3, 4), input_shape=(12,)))
# 现在:model.output_shape == (None, 3, 4)
# 注意:`None` 是批表示的维度
# 作为 Sequential 模型的中间层
model.add(Reshape((6, 2)))
# 现在:model.output_shape == (None, 6, 2)
# 还支持使用 `-1` 表示维度的尺寸推断
model.add(Reshape((-1, 2, 2)))
# 现在:model.output_shape == (None, 3, 2, 2)
05 Permute
model = Sequential()
model.add(Permute((2, 1), input_shape=(10, 64)))
# 现在:model.output_shape == (None, 64, 10)
# 注意:`None` 是批表示的维度
06 RepeatVector
model = Sequential()
model.add(Dense(32, input_dim=32))
# 现在:model.output_shape == (None, 32)
# 注意:`None` 是批表示的维度
model.add(RepeatVector(3))
# 现在:model.output_shape == (None, 3, 32)