tf.keras.layers.Conv?D函数

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
_________________________________________________________________
2、tf.keras.layers.Conv2D函数
函数原型
tf.keras.layers.Conv2D(
    filters,
    kernel_size,
    strides=(1, 1),
    padding='valid',
    data_format=None,
    dilation_rate=(1, 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
)
函数说明

二维卷积层一般用于图像处理、计算机视觉领域。在两个维度上面进行卷积。
在这里插入图片描述
二维卷积的操作与一位卷积的操作类似,只是增加了一个维度。如上图所示,输入矩阵的大小为5×5,卷积核矩阵的大小为3×3,在x, y 方向移动步长为(1, 1),采用了填充的方式(SAME)进行卷积。结果得到一个与输入矩阵大小一样的矩阵(5×5)。

二维卷积的计算公式与一维卷积的计算公式类似,假设输入图像的大小为F×F,卷积核矩阵大小为K×K,步长为(S,S),如果填充方式为VALID,输出图像大小为N×N,则有N = (F - K / S) + 1;如果填充方式为SAME,则有N = F / S

参数filters、kernel_size、strides、padding等等,这些参数的含义与一维卷积层中对应的参数的含义一样,不同的是参数的形式不同。比如在Conv1D中kernel_size=5表示卷积核的大小为5,在Conv2D中kernel_size就应该为(5, 5)表示卷积核的大小为5×5。

参数dilation_rate表示扩张率,用于核矩阵的扩张。可以是单个整数,为所有空间维度指定相同的值。

二维卷积层的输入数据必须是四维的,形状为(batch_size, height, width, channels),batch_size表示批处理数据的大小,height表示数据的高度,width表示数据的宽度,channels表示通道数。

函数使用
model = tf.keras.Sequential([
    # 输入层,输出形状(None, 128, 128, 3)
    tf.keras.layers.InputLayer(input_shape=(128, 128, 3)),
    # 二维卷积层,输出形状(None, 42, 42, 16)
    tf.keras.layers.Conv2D(16, (5, 5), (3, 3), activation="relu"),
    # 二维最大池化层,输出形状(None, 21, 21, 16)
    tf.keras.layers.MaxPooling2D((2, 2)),
    # 二维卷积层,输出形状(None, 5, 5, 32)
    tf.keras.layers.Conv2D(32, (5, 5), (4, 4), activation="relu"),
    # 二维最大池化层,输出形状(None, 1, 1, 32)
    tf.keras.layers.MaxPooling2D((5, 5)),
    # 展平层,输出形状(None, 32)
    tf.keras.layers.Flatten(),
    # 全连接层,输出形状(None, 4)
    tf.keras.layers.Dense(4)
])
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 conv2d (Conv2D)             (None, 42, 42, 16)        1216      
                                                                 
 max_pooling2d (MaxPooling2D  (None, 21, 21, 16)       0         
 )                                                               
                                                                 
 conv2d_1 (Conv2D)           (None, 5, 5, 32)          12832     
                                                                 
 max_pooling2d_1 (MaxPooling  (None, 1, 1, 32)         0         
 2D)                                                             
                                                                 
 flatten (Flatten)           (None, 32)                0         
                                                                 
 dense (Dense)               (None, 4)                 132       
                                                                 
=================================================================
Total params: 14,180
Trainable params: 14,180
Non-trainable params: 0
_________________________________________________________________
3、tf.keras.layers.Conv3D函数
函数原型
tf.keras.layers.Conv3D(
    filters,
    kernel_size,
    strides=(1, 1, 1),
    padding='valid',
    data_format=None,
    dilation_rate=(1, 1, 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
)
函数说明

三维卷积层用于医学领域、视频处理领域(检测人物行为),用于三个维度的卷积。
在这里插入图片描述
三维卷积对数据集应用三维过滤器,过滤器向3个方向(x,y,z)移动,计算低层特征表示。输出形状是一个三维体积空间,如立方体或长方体。有助于视频、三维医学图像等的目标物检测。

参数的含义与Conv1D和Conv2D类似,这里不再赘述。三维卷积的输入形状为五维张量(batch_size, frames, height, width, channels),batch_size为批处理数据的大小,frams可以理解为视频中的帧数,其中每一帧为一幅图像,height为图像的高度,width为图像的宽度,channels为图像通道数。输出形状也是一个五维张量。

函数使用
model = tf.keras.Sequential([
    # 输入层,输出形状(None, 128, 128, 128, 3)
    tf.keras.layers.InputLayer(input_shape=(128, 128, 128, 3)),
    # 三维卷积层,输出形状(None, 42, 42, 42, 16)
    tf.keras.layers.Conv3D(16, (5, 5, 5), (3, 3, 3), activation="relu"),
    # 三维最大池化层,输出形状(None, 21, 21, 21, 16)
    tf.keras.layers.MaxPooling3D((2, 2, 2)),
    # 三维卷积层,输出形状(None, 5, 5, 5, 32)
    tf.keras.layers.Conv3D(32, (5, 5, 5), (4, 4, 4), activation="relu"),
    # 三维最大池化层,输出形状(None, 1, 1, 1, 32)
    tf.keras.layers.MaxPooling3D((5, 5, 5)),
    # 展平层,输出形状(None, 32)
    tf.keras.layers.Flatten(),
    # 全连接层,输出形状为(None, 16)
    tf.keras.layers.Dense(16, activation="relu"),
    # 全连接层,输出形状(None, 4)
    tf.keras.layers.Dense(4, activation="tanh")
])
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 conv3d (Conv3D)             (None, 42, 42, 42, 16)    6016      
                                                                 
 max_pooling3d (MaxPooling3D  (None, 21, 21, 21, 16)   0         
 )                                                               
                                                                 
 conv3d_1 (Conv3D)           (None, 5, 5, 5, 32)       64032     
                                                                 
 max_pooling3d_1 (MaxPooling  (None, 1, 1, 1, 32)      0         
 3D)                                                             
                                                                 
 flatten (Flatten)           (None, 32)                0         
                                                                 
 dense (Dense)               (None, 16)                528       
                                                                 
 dense_1 (Dense)             (None, 4)                 68        
                                                                 
=================================================================
Total params: 70,644
Trainable params: 70,644
Non-trainable params: 0
_________________________________________________________________
  • 12
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不负韶华ღ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值