keras Conv2D参数详解

Conv2D layer 二维卷积层

本文是对keras的英文API DOC的一个尽可能保留原意的翻译和一些个人的见解,会补充一些对个人对卷积层的理解。这篇博客写作时本人正大二,可能理解不充分。

Conv2D class

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
)

二维卷积层(例如空间卷积图像)。

这一层创建了一个卷积核,它与这一层的输入卷积以产生一个输出张量。
如果 use_bias为真,则创建一个偏差向量并添加到输出中。
最后,如果activation不是None,它也应用于输出。

当使用此层作为模型的第一层时,提供关键字参数input_shape(整数元组,不包括样本轴(不需要写batch_size)),例如。
input_shape=(128, 128, 3)表示 128x128的 RGB 图像data_format="channels_last"

这个data_format参数是这样影响input_shape工作的如果不填写,默认是channels_last,否则可以填写channels_first。前者的会把input_shape这个三元组给识别成(batch_size, height, width, channels),后者则会识别成(batch_size, channels, height, width)不过样本轴不需要自己填写(不然反而会报错)

Examples

>>> # The inputs are 28x28 RGB images with `channels_last` and the batch   
>>> # size is 4.  
>>> input_shape = (4, 28, 28, 3) 
>>> x = tf.random.normal(input_shape) 
>>> y = tf.keras.layers.Conv2D( ...
                               2,3,activation='relu',input_shape=input_shape[1:])(x) 
>>> print(y.shape) (4, 26, 26, 2) 
>>> # With `dilation_rate` as 2.   
>>> input_shape = (4, 28, 28, 3) 
>>> x = tf.random.normal(input_shape) 
>>> y = tf.keras.layers.Conv2D( ... 
                   2,3,activation='relu',dilation_rate=2,input_shape=input_shape[1:])(x) 
>>> print(y.shape) (4, 24, 24, 2) 
>>> # With `padding` as "same".   
>>> input_shape = (4, 28, 28, 3) 
>>> x = tf.random.normal(input_shape) 
>>> y = tf.keras.layers.Conv2D( ... 
2, 3, activation='relu', padding="same", input_shape=input_shape[1:])(x) 
>>> print(y.shape) (4, 28, 28, 2) 
>>> # With extended batch shape [4, 7]:   
>>> input_shape = (4, 7, 28, 28, 3) 
>>> x = tf.random.normal(input_shape) 
>>> y = tf.keras.layers.Conv2D( ... 
2, 3, activation='relu', input_shape=input_shape[2:])(x) 
>>> print(y.shape) (4, 7, 26, 26, 2) 

参数[以下方框内注释内容为个人理解,仅供参考]

  • filters: 整数,输出空间的维数(即在卷积中输出滤波器的数量)。[注:此处认为是与input_shape的通道数一样,比如是RGB就是3,是灰度图就是1]

  • kernel_size:一个整数或2个整数的元组/列表,指定二维卷积窗口的高度和宽度。
    可以是单个整数,为所有空间维度指定相同的值。

  • strides: 一个整数或两个整数的元组/列表,指定沿高度和宽度的卷积的步长。可以是单个整数,为所有空间维度指定相同的值。
    指定任何strides值!= 1与指定任何dilation_rate值!= 1是不兼容的。

  • padding: one of "valid" or "same" (不区分大小写).[注:卷积会导致输出图像越来越小,图像边界信息丢失,若想保持卷积后的图像大小不变,需要设置padding参数为same]

  • data_format: 一个字符串参数, 要么是 channels_last (默认) ,要么就是 channels_first. 是输入的维度顺序排列理解。 channels_last 对应着 (batch_size, height, width, channels) ,而 channels_first 对应的输入为 (batch_size, channels, height, width). 他默认为 在~/.keras/keras.json.中的image_data_format 的值 如果你不设置这个地方,它就会是channels_last.

  • dilation_rate: 一个整数或两个整数的元组/列表,指定用于扩展卷积的扩展率。可以是单个整数,为所有空间维度指定相同的值。该参数定义了卷积核处理数据时各值的间距。 在相同的计算条件下,该参数提供了更大的感受野。该参数经常用在实时图像分割中。当网络层需要较大的感受野,但计算资源有限而无法提高卷积核数量或大小时,可以考虑使用。

    ​ 下图为卷积核为3,扩展率为2的和没有padding的二维卷积

    img

  • groups: A positive integer specifying the number of groups in which the input is split along the channel axis. Each group is convolved separately with filters / groups filters. The output is the concatenation of all the groups results along the channel axis. Input channels and filters must both be divisible by groups.

  • activation: 使用激活函数。 如果不特别指定,将不会使用任何的激活函数 ( 具体的可选项可以参考keras.activations).

  • use_bias: Boolean类型, 这一层是否有bias单元.

  • kernel_initializer: 默认是GlorotUniform ,通过输入和输出单元个数来推演权重矩阵尺寸 ( 可选项在 keras.initializers).

  • bias_initializer: kernel bias单元的初始化器,默认是0 ( 可选项在 keras.initializers).

  • kernel_regularizer: Regularizer function applied to the kernel weights matrix (see keras.regularizers).

  • bias_regularizer: Regularizer function applied to the bias vector ( see keras.regularizers).

  • activity_regularizer: Regularizer function applied to the output of the layer (its “activation”) ( see keras.regularizers).

  • kernel_constraint: Constraint function applied to the kernel matrix ( see keras.constraints).

  • bias_constraint: Constraint function applied to the bias vector ( see keras.constraints).

Returns

一个四阶张量 activation(conv2d(inputs, kernel) + bias).

Raises

  • ValueError: if padding is "causal".
  • ValueError: 当 strides > 1 而且 dilation_rate > 1.

img

卷积层的卷积核大小为什么要大于1?

为了有感受野这一个东西存在。

为什么卷积核都是奇数的?

因为即使有padding=same的情况下,他不能保证输入的尺寸等于输出的尺寸

是不是越大的卷积核大小越好?

在达到相同感受野的情况下,卷积核越小,计算量越小,一般用的都是3X3


I n p u t = ( C i n ( 通 道 数 ) , H i n ( 高 ) , W i n ( 宽 ) ) Input=(Cin(通道数),Hin(高),Win(宽)) Input=(CinHinWin)

K e r n e l = ( K w ( 卷 积 核 的 宽 ) , K h ( 高 ) ) Kernel=(Kw(卷积核的宽),Kh(高)) Kernel=(Kw,Kh)

P a d d i n g = ( 0 ∣ 1 ) Padding=(0|1) Padding=(01)

$Strides= $ 这个定不了所以留空


H o u t ( 输 出 层 图 像 的 高 ) = H i n − K h + 2 P S + 1 Hout(输出层图像的高)=\displaystyle\frac{Hin-Kh+2P}{S}+1 Hout(=SHinKh+2P+1

输出层图像的宽可以类比。

C o u t ( 输 出 的 通 道 数 ) = 上 面 f l i t e r s 参 数 的 个 数 Cout(输出的通道数)=上面fliters参数的个数 Cout=fliters


W e i g h t s   P a r a m s = K w ∗ K h ∗ C i n ∗ C o u t Weights\ Params=Kw* Kh *Cin*Cout Weights Params=KwKhCinCout

B i a s   P a r a m s = C o u t Bias\ Params=Cout Bias Params=Cout


F e a t u r e   m a p : i n p u t = H i n ∗ W i n ∗ C i n Feature \ map:input=Hin*Win*Cin Feature map:input=HinWinCin

O u t p u t = H o u t ∗ W o u t ∗ C o u t Output=Hout*Wout*Cout Output=HoutWoutCout

  • 19
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
这段代码使用了 TensorFlow 和 Keras 库来创建、编译、训练和保存一个基本的卷积神经网络模型。以下是代码的详细解析: 1. 导入库 ```python import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers ``` 这里导入了 TensorFlow 和 Keras 库以及其中的一些模块和类。 2. 创建模型 ```python model = keras.Sequential([ layers.Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3)), layers.MaxPooling2D((2, 2)), layers.Conv2D(64, (3, 3), activation='relu'), layers.MaxPooling2D((2, 2)), layers.Conv2D(64, (3, 3), activation='relu'), layers.Flatten(), layers.Dense(64, activation='relu'), layers.Dense(6, activation='softmax') ]) ``` 这段代码创建了一个序列模型,它由一系列层组成。首先是一个卷积层,它包含 32 个过滤器(即输出通道数),每个过滤器大小为 3x3,激活函数为 ReLU。这层的输入形状为 (224, 224, 3),即图像大小为 224x224,通道数为 3。接着是一个最大池化层,它的池化窗口大小为 2x2。然后再次添加一个卷积层,它包含 64 个过滤器,大小为 3x3,ReLU 激活函数。接着是另一个最大池化层。最后添加一个具有 64 个神经元和 ReLU 激活函数的密集层,以及一个具有 6 个神经元和 softmax 激活函数的输出层。 3. 编译模型 ```python model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) ``` 这段代码编译了模型,指定了优化器、损失函数和评估指标。这里使用 Adam 优化器,交叉熵损失函数和准确率评估指标。 4. 加载数据集 ```python train_dataset = keras.preprocessing.image_dataset_from_directory( 'path/to/training/folder', validation_split=0.2, subset='training', seed=123, image_size=(224, 224), batch_size=32) validation_dataset = keras.preprocessing.image_dataset_from_directory( 'path/to/training/folder', validation_split=0.2, subset='validation', seed=123, image_size=(224, 224), batch_size=32) ``` 这段代码使用 Keras 提供的 `image_dataset_from_directory` 函数从文件夹中加载训练和验证数据集。这里指定了数据集所在文件夹的路径、验证集占总数据集的比例、随机种子、图像大小和批量大小等参数。 5. 训练模型 ```python model.fit(train_dataset, epochs=10, validation_data=validation_dataset) ``` 这段代码使用 `fit` 函数对模型进行训练,指定了训练数据集、训练轮数和验证数据集等参数。 6. 保存模型 ```python model.save('path/to/save/model') ``` 这段代码使用 `save` 函数将训练好的模型保存到指定路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值