0
点赞
收藏
分享

微信扫一扫

tf.keras.layers.Conv?D函数

我是小小懒 2022-04-19 阅读 67
python

1、tf.keras.layers.Conv1D函数

函数原型

tf.keras.layers.Conv1D(filters, 
					   kernel_size, 
					   strides=1, 
					   padding='valid',
					   data_format='channels_last', 
					   dilation_rate=1, 
					   groups=1,
					   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
)

函数说明

一维卷积层用于在单个空间或者时间维度上进行卷积。通常用于序列模型、自然语言处理领域。
在这里插入图片描述
卷积过程如上图所示,输入向量的大小为20,卷积核大小为5,步长(每一步移动距离)为1,不考虑填充,那么输出向量的大小为(20 - 5) / 1 + 1 = 16;如果考虑填充,那么输出向量大小为20 / 1 = 20。

更一般的,假设输入向量大小为F,卷积核大小为K, 步长为S,填充方式为“VALID”(也就是不考虑填充),那么输出向量大小N= (F - K / S) + 1;如果填充方式为“SAME”(不考虑步长,使输入矩阵和输出矩阵大小一样),则输出向量大小N = F / S

参数filters是输出空间的维度,一般对输入数据的最后一个维度进行改变。对于一维卷积层,输入数据通常是三维的,形状为(batch_size, d_size, n_dim),batch_size表示批处理数据的数量,d_size表示每一个数据的大小,n_dim表示数据元素的维度。

参数kernel_size表示卷积核的大小;参数strides表示步长,默认为1;padding则表示填充方式,默认为VALID,也就是不填充。

另外还有一些常用到的参数,比如activation表示激活函数,use_bias表示是否使用偏置矩阵,默认为True,kernel_initializer表示使用的核矩阵,bias_initializer表示使用的偏置矩阵。

还有三个参数kernel_regularizer、bias_regularizer、activity_regularizer分别用于通过正则化器计算核矩阵、偏置矩阵、经过激活函数的输出矩阵的loss。该层输出后,tf.losses中的loss损失函数会获取该loss。
正则化器主要用来预防过拟合,有两种常用的正则化器L1和L2,它们计算损失函数的方式不一样。
L1计算损失loss的方式 loss = l1 * reduce_sum(abs(x)),其中l1=0.01;L2计算损失loss的方式loss = l2 * reduce_sum(square(x)),其中l2=0.01

该层如果作为第一层,则需要提供一个参数input_shape来指定输入张量的大小。

函数用法

第一个例子

model = tf.keras.Sequential([
    # 一维卷积层,输出形状为(None, 16, 8),定义input_shape作为第一层
    tf.keras.layers.Conv1D(8, 5, activation="relu", input_shape=(20, 1)),
    # 一维最大池化层,输出形状为(None, 8, 8)
    tf.keras.layers.MaxPooling1D(2),
    # 展平层
    tf.keras.layers.Flatten(),
    # 全连接层
    tf.keras.layers.Dense(4)
])
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 conv1d (Conv1D)             (None, 16, 8)             48        
                                                                 
 max_pooling1d (MaxPooling1D  (None, 8, 8)             0         
 )                                                               
                                                                 
 flatten (Flatten)           (None, 64)                0         
                                                                 
 dense (Dense)               (None, 4)                 260       
                                                                 
=================================================================
Total params: 308
Trainable params: 308
Non-trainable params: 0
_________________________________________________________________

第二个例子

model = tf.keras.Sequential([
    # 输入层,输出形状为(None, 20, 1)
    tf.keras.layers.InputLayer(input_shape=(20, 1)),
    # 一维卷积层,输出形状为(None, 16, 8)
    tf.keras.layers.Conv1D(8, 5, activation="relu"),
    # 一维最大池化层,输出形状为(None, 8, 8)
    tf.keras.layers.MaxPooling1D(2),
    # 一维卷积层
    tf.keras.layers.Conv1D(16, 3, activation="relu"),
    # 一维最大池化层
    tf.keras.layers.MaxPooling1D(2),
    # 展平层
    tf.keras.layers.Flatten(),
    # 全连接层
    tf.keras.layers.Dense(4)
])
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 conv1d (Conv1D)             (None, 16, 8)             48        
                                                                 
 max_pooling1d (MaxPooling1D  (None, 8, 8)             0         
 )                                                               
                                                                 
 conv1d_1 (Conv1D)           (None, 6, 16)             400       
                                                                 
 max_pooling1d_1 (MaxPooling  (None, 3, 16)            0         
 1D)                                                             
                                                                 
 flatten (Flatten)           (None, 48)                0         
                                                                 
 dense (Dense)               (None, 4)                 196       
                                                                 
=================================================================
Total params: 644
Trainable params: 644
Non-trainable params: 0
_________________________________________________________________
举报

相关推荐

0 条评论