【转载】Keras.layers.Conv2D参数详解 搭建图片分类 CNN (卷积神经网络)

filters:卷积核(就是过滤器)的数目(即输出的维度)

kernel_size:单个整数或由两个整数构成的list/tuple,卷积核(过滤器)的宽度和长度。(kernel n.核心,要点,[计]内核)如为单个整数,则表示在各个空间维度的相同长度。

strides:单个整数或由两个整数构成的list/tuple,为卷积的步长。如为单个整数,则表示在各个空间维度的相同步长。任何不为1的strides均与任何不为1的dilation_rata均不兼容。

padding:补0策略,为"valid", "same" 。
"valid"不填充,eg:图像28*28,过滤器5*5,步长为5,最后三行三列舍弃,输出大小为:[(28-3-5)/5]+1=5,即输出图像是5*5的,代表只进行有效的卷积,即对边界数据不处理。
"same"填充,当滑动步长大于1时:填充数=K-I%S(K:卷积核边长,I:输入图像边长,S:滑动步长),滑动步长为1时,填充数是卷积核边长减1,eg:5*5的图用3*3的核,步长为1时same填充之后是7*7,代表保留边界处的卷积结果,通常会导致输出shape与输入shape相同,因为卷积核移动时在边缘会出现大小不够的情况。

1. 导入keras

from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

2. Conv2D

构建卷积层。用于从输入的高维数组中提取特征。卷积层的每个过滤器就是一个特征映射,用于提取某一个特征,过滤器的数量决定了卷积层输出特征个数,或者输出深度。因此,图片等高维数据每经过一个卷积层,深度都会增加,并且等于过滤器的数量。 

Keras.layers.Conv2D 搭建图片分类 CNN (卷积神经网络)

Conv2D(filters, kernel_size, strides, padding, activation=‘relu’, input_shape)

  • filters: 过滤器数量
  • kernel_size: 指定(方形)卷积窗口的高和宽的数字
  • strides: 卷积步长, 默认为 1
  • padding: 卷积如何处理边缘。选项包括 ‘valid’ 和 ‘same’。默认为 ‘valid’
  • acti
<think> 我们正在讨论的是TensorFlow中的tf.keras.layers.Convolution2D层。根据引用[1]和[2],我们可以知道Convolution2D实际上就是Conv2D,因为在引用[1]中使用了`tf.keras.layers.Convolution2D`,而引用[2]指向了Conv2D的官方文档。在TensorFlow 2.x中,通常使用`Conv2D`,但`Convolution2D`可能是其别名(为了兼容性)或者旧版本的用法。 根据引用[2](官方文档),我们主要关注Conv2D参数。同时,引用[3]提供了一些关于池化层的参数说明,但这里我们关注的是卷积层。 在TensorFlow中,卷积层(Conv2D)的常用参数包括: - `filters`:整数,表示输出空间的维度(即卷积中滤波器的数量)。 - `kernel_size`:一个整数或2个整数的元组/列表,指定卷积窗口的高度和宽度。可以是一个整数,为所有空间维度指定相同的值。 - `strides`:一个整数或2个整数的元组/列表,指定卷积沿高度和宽度的步幅。默认为(1,1)。 - `padding`:`"valid"`或`"same"`(不区分大小写)。`"valid"`表示不填充,`"same"`表示填充以使输出具有与输入相同的高度和宽度(当步长为1时)。 - `data_format`:字符串,`channels_last`(默认)或`channels_first`。输入维度的顺序。`channels_last`对应(batch, height, width, channels),`channels_first`对应(batch, channels, height, width)。 - `activation`:要使用的激活函数。如果未指定,则不应用激活(即线性激活:a(x)=x)。 - `use_bias`:布尔值,是否使用偏置向量。 - `kernel_initializer`:卷积核的初始化器。 - `bias_initializer`:偏置向量的初始化器。 - `kernel_regularizer`:卷积核的正则化项。 - `bias_regularizer`:偏置向量的正则化项。 - `activity_regularizer`:输出层的正则化函数。 - `kernel_constraint`:卷积核的约束函数。 - `bias_constraint`:偏置向量的约束函数。 在引用[1]中,我们看到一个例子: ```python la = tf.keras.layers.Convolution2D(32,(3,3)) ``` 这里,第一个参数32表示滤波器的数量(filters),第二个参数(3,3)表示卷积核的大小(kernel_size)。 因此,我们可以这样使用: ```python from tensorflow.keras.layers import Conv2D # 通常我们导入为Conv2D # 创建一个卷积层,32个滤波器,每个滤波器大小为3x3,使用默认步长(1,1)和'valid'填充 conv_layer = Conv2D(filters=32, kernel_size=(3,3)) ``` 注意:在TensorFlow 2.x中,推荐使用`Conv2D`,因为`Convolution2D`可能是为了兼容旧版本而保留的别名。实际上,在TF2.1中,`tf.keras.layers.Convolution2D`就是`Conv2D`的别名(参考官方文档)。 下面是一个更完整的例子,包括创建模型: ```python import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D model = Sequential() model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))) model.add(Conv2D(64, (3, 3), activation='relu')) ``` 在这个例子中,第一个卷积层有32个3x3的滤波器,激活函数为ReLU,输入形状为(28,28,1)(channels_last格式)。第二个卷积层有64个3x3的滤波器。 另外,关于`data_format`,默认是`channels_last`,但如果你需要也可以设置为`channels_first`,但要注意输入形状的调整。 总结:`tf.keras.layers.Convolution2D`等同于`Conv2D`,使用方法和参数一致。主要参数是`filters`和`kernel_size`,其他参数如`strides`、`padding`、`activation`等根据需求设置。 由于用户要求的是`Convolution2D`,我们可以直接按照上述方式使用。 注意:在TensorFlow 2.0及以上版本,通常使用`tf.keras.layers.Conv2D`,但`Convolution2D`仍然可用,不过官方文档中主要使用`Conv2D`。 因此,在回答时,我们应指出这一点,并给出使用示例。 </think> 下面我将详细介绍 `tf.keras.layers.Convolution2D()` 的使用方法,该函数在 TensorFlow 2.x 中主要用于构建卷积神经网络CNN)。根据您提供的引用和官方文档[^2],以下是核心知识点和使用指南: ### 1. 基础语法 ```python tf.keras.layers.Convolution2D( filters, # 卷积核数量(整数) kernel_size, # 卷积核尺寸(整数或元组) strides=(1, 1), # 步长(默认1) padding='valid', # 填充方式:'valid'或'same' data_format=None, # 数据格式:'channels_last'或'channels_first' activation=None, # 激活函数:如'relu','sigmoid' use_bias=True, # 是否使用偏置 kernel_initializer='glorot_uniform', # 卷积核初始化 bias_initializer='zeros' # 偏置初始化 ) ``` ### 2. 关键参数详解 | 参数 | 说明 | 示例值 | |------|------|--------| | **`filters`** | 输出特征图的通道数(卷积核数量) | 32, 64 | | **`kernel_size`** | 卷积窗口尺寸(高度, 宽度) | (3,3), 5 | | `strides` | 卷积步长(垂直, 水平) | (2,2), (1,1) | | **`padding`** | `'valid'`:不填充<br>`'same'`:输出尺寸与输入相同 | 'same' | | **`data_format`** | `'channels_last'`:(batch,h,w,channels)<br>`'channels_first'`:(batch,channels,h,w) | 'channels_last' | | `activation` | 激活函数(None表示线性) | 'relu', 'softmax' | | `use_bias` | 是否添加偏置向量 | True/False | ### 3. 使用示例 ```python import tensorflow as tf # 示例1:基础卷积层 conv_layer = tf.keras.layers.Convolution2D( filters=64, kernel_size=(3, 3), strides=(1, 1), padding='same', activation='relu' ) # 示例2:在Sequential模型中使用 model = tf.keras.Sequential([ tf.keras.layers.Input(shape=(28, 28, 1)), tf.keras.layers.Convolution2D(32, kernel_size=3, padding='same'), tf.keras.layers.ReLU(), # 分离激活层 tf.keras.layers.Convolution2D(64, kernel_size=(5,5), strides=2) ]) ``` ### 4. 重要注意事项 1. **命名说明**:`Convolution2D` 是 `Conv2D` 的别名,两者完全等效[^1] ```python # 以下两种写法等价 tf.keras.layers.Conv2D(...) tf.keras.layers.Convolution2D(...) ``` 2. **输入格式**: - `channels_last`:(batch_size, height, width, channels) - `channels_first`:(batch_size, channels, height, width) 3. **输出尺寸计算**: - `valid`填充:$output = \lfloor \frac{input - kernel}{stride} \rfloor + 1$ - `same`填充:$output = \lceil \frac{input}{stride} \rceil$ ### 5. 参数优化建议 - **小尺寸卷积核**:(3×3)(5×5) 计算量更小且效果更好 - **步长选择**:通常使用 (1,1),下采样时可用 (2,2) - **激活函数**:ReLU 及其变种(LeakyReLU)最常用 - **初始化**:`he_normal` 初始化对ReLU效果更好 > 提示:TensorFlow 2.x 推荐直接使用 `tf.keras.layers.Conv2D()` 以获得更好的兼容性[^2]
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值