Keras 网络层

1.Keras Layers 共有的方法:

from keras import layers
  • layer.get_weights()
  • layer.set_weights(weights)
  • layer.get_config()
    • keras.layer.Dense.from_config(config)
    • keras.layer.deserialize({“class_name”: , “config”: config})
  • 如果 Layer 是单个节点(不是共享 layer),可以使用以下方式获取 layer 的属性:
    • layer.input
    • layer.output
    • layer.input_shape
    • layer.output_shape
  • 如果 Layer 具有多个节点(共享 layer),可以使用以下方式获取 layer 的属性:
    • layer.getinputat(note_index)
    • layer.getoutputat(note_index)
    • layer.getinputshapeat(noteindex)
    • layer.getoutputshaepat(noteindex)

2.Keras Layers

  • Core Layers
    • Dense
    • Activation
    • Drop
    • Flatten
    • Input
    • Reshape
      • keras.layers.Reshape(target_shape)
    • Permute
    • RepeatVector
    • Lambda
    • ActivityRegularization
    • Masking
    • SpatialDropout1D
    • SpatialDropout2D
    • SpatialDropout3D
  • Convolutional Layers
    • 卷积层
      • Conv1D
      • Conv2D
      • Conv3D
      • SeparableConv1D
        • keras.layers.SeparableConv1D(rate)
      • SeparableConv2D
      • DepthwiseConv3D
    • Transpose
      • Conv2DTranspose
      • Conv3DTranspose
    • Cropping
      • Cropping1D
      • Cropping2D
      • Cropping3D
    • UnSampling
      • UnSampling1D
      • UnSampling2D
      • UnSampling3D
    • ZeroPadding
      • ZeroPadding1D
      • ZeroPadding2D
      • ZeroPadding3D
  • Pooling Layers
    • 最大池化
      • MaxPolling1D()
      • MaxPolling2D()
      • MaxPolling3D()
      • GlobalMaxPolling1D()
      • GlobalMaxPolling2D()
      • GlobalMaxPolling3D()
    • 平均池化
      • AveragePolling1D()
      • AveragePolling2D()
      • AveragePolling3D()
      • GlobalAveragePolling1D()
      • GlobalAveragePolling2D()
      • GlobalAveragePolling3D()
  • Locally-connected Layers
    • LocallyConnected1D()
    • LocallyConnected2D()
  • Recurrent Layers
    • RNN
      • RNN()
      • SimpleRNN()
      • SimpleRNNCell()
    • GRU
      • GRU()
      • GRUCell()
    • LSTM
      • LSTM()
      • LSTMCell()
      • ConvLSTM2D()
      • ConvLSTM2DCell()
    • CuDNN
      • CuDNNGRU()
      • CuDNNLSTM()
  • Embedding Layers
    • Embedding()
  • Merge Layers
    • Add()
    • Subtract()
    • Multiply()
    • Average()
    • Maximum()
    • Minimum()
    • Concatenate()
    • Dot()
    • add()
    • subtract()
    • multiply()
    • average()
    • maximum()
    • minimum()
    • concatenate()
    • dot()
  • Advanced Activations Layers
    • LeakyReLU()
    • PReLU()
    • ELU()
    • ThresholdedReLU()
    • Softmax()
    • ReLU()
    • Activation Functions
  • Normalization Layers
    • BatchNormalization()
  • Nosise Layers
    • GaussianNoise()
    • GaussianDropout()
    • AlphaDropout()
  • Others
    • Layer wrapper
      • TimeDistributed()
      • Bidirectional()
    • Writting Customilize Keras Layers
      • build(input_shape)
      • call(x)
      • compute_output_shape(input_shape)

3.Keras Layers 配置

model.add(Layer(
    # 输出、输出
    output_dim,
    input_dim,
    # 参数初始化
    kernel_initializer,
    bias_initializer,
    # 参数正则化
    kernel_regularizer,
    activity_regularizer,
    # 参数约束
    kernel_constraint,
    bias_constraint,
    # 层激活函数
    activation,
))
# 输出
input_s = Input()
# 激活函数
model.add(Activation)

3.1 Activation Function

  • Keras Activations
    • Activation layer
    • activation argument supported by all forward layers

调用方法:

from keras.layers import Activation, Dense
from keras import backend as K

# method 1
model.add(Dense(64))
model.add(Activation("tanh"))

# method 2
model.add(Dense(64, activation = "tanh"))

# method 3
model.add(Dense(64, activation = K.tanh))

3.2 可用的 activations

  • softmax: Softmax activation function
    • x =>
    • keras.activatons.softmax(x, axis = 1)
  • relu: Rectified Linear Unit
    • x => max(x, 0)
    • keras.activations.relu(x, alpha = 0.0, max_value = None, threshold = 0.0)
  • tanh: Hyperbolic tangent activation function
    • keras.activations.tanh(x)
  • sigmoid: Sigmoid activation function
    • x => 1/(1 + exp(-x))
    • keras.activations.sigmoid(x)
  • linear: Linear activation function
    • x => x
    • keras.activations.linear(x)

3.2 Keras 参数初始化(Initializers)

Initializers 的使用方法:

初始化定义了设置 Keras Layer 权重随机初始的方法
  • kernel_initializer param
    • “random_uniform”
  • bias_initializer param

可用的 Initializers:

  • keras.initializers.Initializer()
    • 基类
  • keras.initializers.Zeros()
    • 0
  • keras.initializers.Ones()
    • 1
  • keras.initializers.Constant()
    • keras.initializers.Constant(value = 0)
      • 0
    • keras.initializers.Constant(value = 1)
      • 1
  • keras.initializers.RandomNormal(mean = 0.0, stddev = 0.05, seed = None)
    • 正态分布
  • keras.initializers.RandomUniform(minval = 0.05, maxval = 0.05, seed = None)
    • 均匀分布
  • keras.initializers.TruncatedNormal(mean = 0.0, stddev = 0.05, seed = None)
    • 截尾正态分布:生成的随机值与 RandomNormal 生成的类似,但是在距离平均值两个标准差之外的随机值将被丢弃并重新生成。这是用来生成神经网络权重和滤波器的推荐初始化器
  • keras.initializers.VarianveScaling(scale = 1.0, mode = “fan_in”, distribution = “normal”, seed = None)
    • 根据权值的尺寸调整其规模
  • keras.initializers.Orthogonal(gain = 1.0, seed = None)
  • keras.initializers.Identity(gain = 1.0)
    • 生成单位矩阵的初始化器。仅用于 2D 方阵
  • keras.initializers.lecun_normal()
    • LeCun 正态分布初始化器
    • 它从以 0 为中心,标准差为 stddev = sqrt(1 / fanin) 的截断正态分布中抽取样本, 其中 fanin 是权值张量中的输入单位的数量
  • keras.initializers.lecun_uniform()
    • LeCun 均匀初始化器
    • 它从 [-limit,limit] 中的均匀分布中抽取样本, 其中 limit 是 sqrt(3 / fanin), fanin 是权值张量中的输入单位的数量
  • keras.initializers.glorot_normal()
    • Glorot 正态分布初始化器,也称为 Xavier 正态分布初始化器
    • 它从以 0 为中心,标准差为 stddev = sqrt(2 / (fan*in + fan*out)) 的截断正态分布中抽取样本, 其中 fanin 是权值张量中的输入单位的数量, fanout 是权值张量中的输出单位的数量
  • keras.initializers.glorot_uniform()
    • Glorot 均匀分布初始化器,也称为 Xavier 均匀分布初始化器
    • 它从 [-limit,limit] 中的均匀分布中抽取样本, 其中 limit 是 sqrt(6 / (fan*in + fan*out)), fanin 是权值张量中的输入单位的数量, fanout 是权值张量中的输出单位的数量
  • keras.initializers.he_normal()
    • He 正态分布初始化器
    • 它从以 0 为中心,标准差为 stddev = sqrt(2 / fanin) 的截断正态分布中抽取样本, 其中 fanin 是权值张量中的输入单位的数量
  • keras.initializers.he_uniform()
    • He 均匀分布方差缩放初始化器
    • 它从 \([-limit,limit]\) 中的均匀分布中抽取样本, 其中 \(limit\)\(sqrt(6 / fan_in)\), 其中 fan_in 是权值张量中的输入单位的数量
  • 自定义 Initializer
from keras import backend as K

def my_init(shape, dtype = None):
    return K.random_normal(shape, dtype = dtype)

model.add(Dense(64, kernel_initializer = my_init))

3.3 Keras 正则化(Regularizers)

正则化器允许在优化过程中对层的参数层的激活函数情况进行惩罚,并且神经网络优化的损失函数的惩罚项也可以使用

惩罚是以层为对象进行的。具体的 API 因层而异,但 Dense,Conv1D,Conv2D 和 Conv3D 这些层具有统一的 API

Regularizers 的使用方法:

  • [class] keras.regularizers.Regularizer
    • [instance] kernel_regularizer param
    • [instance] bias_regularizer param
    • [instance] activity_regularizer param

可用的 Regularizers:

  • keras.regularizers.l1(0.)
  • keras.regularizers.l2(0.)
  • keras.regularizers.l1_l2(l1 = 0.01, l2 = 0.01)
  • 自定义的 Regularizer:
    • def l1_reg: pass

3.4 Keras 约束(Constraints)

constraints 模块的函数允许在优化期间对网络参数设置约束(例如非负性)。

约束是以层为对象进行的。具体的 API 因层而异,但 Dense,Conv1D,Conv2D 和 Conv3D 这些层具有统一的 API

Constraints 的使用方法:

  • kernel_constraint
  • bias_constraint

可用的 Constraints:

  • keras.constraints.MaxNorm(max_value = 2, axis = 0)
    • 最大范数权值约束
  • keras.constraints.NonNeg()
    • 权重非负的约束
  • keras.constraints.UnitNorm()
    • 映射到每个隐藏单元的权值的约束,使其具有单位范数
  • keras.constraints.MinMaxNorm(minvalue = 0, maxvalue = 1.0, rate = 1.0, axis = 0)
    • 最小/最大范数权值约束:映射到每个隐藏单元的权值的约束,使其范数在上下界之间