Tensorflow学习 - 2.Layer
主要学习内容
Layer类特点
Layer组成
- activations
- weight initializers
- weight regularizers
- weight constraints
常见Layer类
- Core layers
- 卷积层
- 池化操作
- 循环层
- 预处理层
- 正则(regularization) & 正规化(Normalization)
- 注意力层
- Reshape Layers
- Merging Layers
- 激活函数层
如何使用Layer派生类
自定义Layer类
一、Layer类介绍
初始化
tf.keras.layers.Layer( trainable=True, name=None, dtype=None, dynamic=False, **kwargs )
- trainable 该层参数是否可训练(Boolean)
- dynamic
可以直接当作函数调用
from tensorflow.keras import layers layer = layers.Dense(32, activation='relu') inputs = tf.random.uniform(shape=(10, 20)) outputs = layer(inputs) # callable
属性
需要继承的方法
实际自定义中一般只需重写
__init__
、build
、call
方法;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对象放在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 )
-
最常见的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 )
-
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
六、预处理层
核心处理层
类别数据预处理层
- CategoryEncoding layer
- Hashing layer
- Discretization layer
- StringLookup layer
- IntegerLookup layer
- CategoryCrossing layer
图像处理&增强层 ♥
- Resizing layer
- Rescaling layer
- CenterCrop layer
- RandomCrop layer
- RandomFlip layer
- RandomTranslation layer
- RandomRotation layer
- RandomZoom layer
- RandomHeight layer
- RandomWidth layer
七、Reshape层
-
tensor转置
八、合并层
- Concatenate layer
- Average layer
- Maximum layer
- Minimum layer
- Add layer
- Subtract layer
- Multiply layer
- Dot layer
小结
这部分内容比较多,但是不需要全部记住,只需要知道Layer类能在写code中能干什么就行