tensorflow中tensor的维度顺序默认是 [batch, height, width, channel]
2D卷积层
keras.layers.Conv2D(filters,
kernel_size,
strides=(1, 1),
padding='VALID',
data_format=None,
dilation_rate=(1, 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)
参数详解
- filters: 卷积中滤波器的数量,表示输出张量的通道数
- kernel_size: 卷积窗口的宽度和高度
- strides: 卷积沿宽度和高度方向的步长
- padding: '
VALID
' 或 'SAME
','VALID
'表示无填充,'SAME
'表示用0填充- data_format: 表示输入张量的维度顺序,默认为 [batch, height, width, channel]
- dilation_rate: 膨胀卷积的膨胀率
- activation: 要使用的激活函数
- use_bias: 布尔值,该层是否使用偏置向量
- kernel_initializer:
kernel
权值矩阵的初始化器- bias_initializer: 偏置向量的初始化器
- kernel_regularizer: 运用到
kernel
权值矩阵的正则化函数- bias_regularizer: 运用到偏置向量的正则化函数
- activity_regularizer: 运用到层输出(它的激活值)的正则化函数
- kernel_constraint: 运用到
kernel
权值矩阵的约束函数- bias_constraint: 运用到偏置向量的约束函数
卷积后的矩阵尺寸大小计算公式
输入大小为 W ×W,kernel_size为 F×F,strides为 S,输出大小为 N ×N
当 padding='
VALID
' 时,当 padding='SAME' 时,
示例
from tensorflow.keras.layers import Conv2D
import tensorflow as tf
import numpy as np
# 定义一个卷积层,用0填充
conv1 = Conv2D(filters=32,
kernel_size=[3, 3],
strides=[2, 2],
padding='same')
# 定义一个卷积层,无填充
conv2 = Conv2D(filters=32,
kernel_size=[3, 3],
strides=[2, 2],
padding='valid')
# 生成一个维度为[64, 5, 5, 3]的矩阵
x = np.random.random((64, 5, 5, 3))
# 转成tensor类型,第一个维度64表示batch
# numpy中的数据类型和tensorflow中的数据类型完全兼容,所以这一步可以省略
x = tf.convert_to_tensor(x)
print(x.shape) # [64, 5, 5, 3]
# 进行卷积
y1 = conv1(x)
print(y.shape) # [64, 3, 3, 32]
# 进行卷积
y2 = conv2(x)
print(y.shape) # [64, 2, 2, 32]