Tensorflow学习 - 2.Layer

主要学习内容


一、Layer类介绍

  1. 初始化

    tf.keras.layers.Layer(
        trainable=True, name=None, dtype=None, dynamic=False, **kwargs
    )
    
    • trainable 该层参数是否可训练(Boolean)
    • dynamic
  2. 可以直接当作函数调用

    from tensorflow.keras import layers
    
    layer = layers.Dense(32, activation='relu')
    inputs = tf.random.uniform(shape=(10, 20))
    outputs = layer(inputs) # callable
    
  3. 属性

  4. 需要继承的方法

    实际自定义中一般只需重写__init__buildcall方法;build中声明参数以及进行参数初始化;call中进行运算(输入inputs返回结果)

    build中可以用self.add_weight的形式加入变量,也可以用tf.Variable

二、激活函数

Teneorflow中激活函数既可以当作某个Layer的回调动作,也可以自己形成一个激活函数层

from tensorflow.keras import layers
from tensorflow.keras import activations
model.add(layers.Dense(64))
model.add(layers.Activation(activations.relu)) # 作为一个layer,但是这种情况下也需传递tensorflow.keras.activations

model.add(layers.Dense(64, activation=activations.relu)) # 作为layer的子部分

当使用默认参数时,可以直接传激活函数名字符串

model.add(layers.Dense(64, activation='relu'))

三、权值初始化

在全连接层中有kernel_initializer和bias_initializer两个参数

from tensorflow.keras import layers
from tensorflow.keras import initializers

layer = layers.Dense(
    units=64,
    kernel_initializer=initializers.RandomNormal(stddev=0.01),
    bias_initializer=initializers.Zeros()
)

这些初始化方法都放在了tf.keras.initializers中主要有:

四、正则惩罚项

在layer中声明惩罚项,这些惩罚项会加到损失函数中进行优化;主要需要配置的时正则项权重参数

from tensorflow.keras import layers
from tensorflow.keras import regularizers

layer = layers.Dense(
    units=64,
    kernel_regularizer=regularizers.l1_l2(l1=1e-5, l2=1e-4),
    bias_regularizer=regularizers.l2(1e-4),
    activity_regularizer=regularizers.l2(1e-5)
)
  • L1
  • L2
  • L1-L2

同样,可以用正则名字符串进行默认参数的正则项初始化

dense = tf.keras.layers.Dense(3, kernel_regularizer='l2')

五、核心层

  • Input object

    Input对象放在Model的input参数中

    model = Model(input=[a, b], output=c)
    tf.keras.Input(
        shape=None, # 不包括Batch size
        batch_size=None,
        name=None,
        dtype=None,
        sparse=False,
        tensor=None,
        ragged=False,
        **kwargs
    )
    
  • Dense layer

    最常见的Layer;注意输入输出维度(batch_size,…,…)

    tf.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,
        **kwargs
    )
    
  • Activation layer

  • Embedding layer

    Turns positive integers (indexes) into dense vectors of fixed size.

    根据索引序列从矩阵中找到对应的向量组

    是一个可学习层,用于学习单词或者其它以index标记的数据的编码(通常是向量编码)

    这个层只能用于模型的第一层

    tf.keras.layers.Embedding(
        input_dim,
        output_dim,
        embeddings_initializer="uniform",
        embeddings_regularizer=None,
        activity_regularizer=None,
        embeddings_constraint=None,
        mask_zero=False,
        input_length=None,
        **kwargs
    )
    

    相关函数tf.nn.embedding_lookup

  • Masking layer

  • Lambda layer

六、预处理层

核心处理层

类别数据预处理层

图像处理&增强层 ♥

七、Reshape层

八、合并层


小结

这部分内容比较多,但是不需要全部记住,只需要知道Layer类能在写code中能干什么就行