TensorFlow-tf.nn.conv2d 函数

本文详细介绍了TensorFlow中tf.nn.conv2d函数的功能与用法,包括其参数含义及内部运算过程,帮助读者理解如何使用该函数进行图像的二维卷积操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在建立卷积模型时遇到tf.nn.conv2d函数。

tf.nn.conv2d(input,filter,strides,padding,use_cudnn_on_gpu=None,name=None)

此函数的作用是在给定四维输入(input)和权重W(filter)的情况下计算二维卷积。

参数解释:

input:

一个Tensor,每个元素的格式必须为float32或float64.

input的形状:[batch,in_height,in_width,in_channels],

batch为训练过程中每迭代一次迭代的照片数。

in_height,in_width分别为图片的高和宽

in_channels为图片的道。

filter:

一个Tensor,每个元素的类型和input类型一致。

filter的形状:[filter_height,filter_width,in_channels,out_channels]

分别为权重的height,width,输入的channels和输出的channels

stride:

长度为4的list,元素类型为int。表示每一维度滑动的步长。

需要注意的是,strides[0]=strides[3]=1.

padding:

可选参数为"Same","VALID"

边距,一般设为0,即padding='SAME'

use_cudnn_on_gpu:

bool类型,有True和False两种选择。

name:

此操作的名字


函数执行以下操作:

1.将参数filter变为一个二维矩阵,形状为:[filter_height*filter_width*in_channels,output_channels]

2.将输入(input)转化为一个具有如下形状的Tensor,形状为:[batch,out_height,out_width,filter_height * filter_width * in_channels]

3.将filter矩阵和步骤2得到的矩阵相乘。


函数的返回值:

元素类型和input相同。

output[b, i, j, k] =sum_{di, dj, q} input[b, strides[1] * i + di, strides[2] * j + dj, q] * filter[di, dj, q, k]


### TensorFlow `tf.nn.conv2d` 参数说明 #### 输入参数 (`input`) 输入张量是一个四维张量,形状通常为 `[batch_size, height, width, in_channels]` 或者 `[batch_size, in_channels, height, width]`(取决于 `data_format` 的设置)。它表示一批图像或其他二维数据。 - **`batch_size`**: 批次大小,即一次处理多少样本。 - **`height`, `width`**: 图像的高度和宽度。 - **`in_channels`**: 输入特征图的数量。 此参数的具体定义可以参考[^2]。 --- #### 卷积核 (`filter`) 卷积操作的核心部分,用于提取特征的滤波器矩阵。其形状为 `[filter_height, filter_width, in_channels, out_channels]`: - **`filter_height`, `filter_width`**: 卷积核的高度和宽度。 - **`in_channels`**: 输入通道数,需与 `input` 中的 `in_channels` 匹配。 - **`out_channels`**: 输出通道数,决定了生成的特征图数量。 关于 `filter` 和其他 API 中 `filters` 的区别可参见[^3]。 --- #### 步幅 (`strides`) 步幅控制卷积窗口移动的速度,也是一个长度为 4 的列表,默认值为 `[1, stride_height, stride_width, 1]`。其中只有中间两个维度有效,分别对应高度方向和宽度方向上的滑动距离。具体解释如下: - **`stride_height`**, **`stride_width`**: 高度和宽度方向上每次移动的距离。 更多细节可见于[^1]。 --- #### 填充方式 (`padding`) 指定如何填充输入边界的数据,有两种模式可供选择: - **`VALID`**: 不进行任何填充,仅当卷积核完全覆盖时才计算输出像素。 - **`SAME`**: 自动调整边缘填充使得输出尺寸等于输入尺寸除以步长向下取整的结果。 上述两种模式的功能描述来源于。 --- #### GPU 加速选项 (`use_cudnn_on_gpu`) 该布尔型标志决定是否利用 cuDNN 库加速 GPU 上的操作,默认开启此项功能以便提高性能效率。 --- #### 数据格式 (`data_format`) 指定了输入张量的空间布局形式,默认采用 `'NHWC'` 表示顺序依次为批量、高宽以及颜色分量;另一种可能的形式是 `'NCHW'` ,此时色彩信息位于空间位置之前。 --- #### 膨胀率 (`dilations`) 膨胀因子允许扩大感受野而无需增加额外参数数目,典型应用是在空洞卷积中实现更大范围内的上下文关联分析。默认情况下均为单位向量意味着标准无扩张行为[^4]。 --- #### 名称前缀 (`name`) 提供给当前节点的一个字符串标识符,便于调试或可视化网络结构时区分不同层的作用域名称管理。 ```python import tensorflow as tf # Example usage of tf.nn.conv2d input_tensor = tf.random.normal([10, 28, 28, 3]) # Batch size: 10; Height & Width: 28x28; Channels: 3 conv_filter = tf.Variable(tf.random.truncated_normal([5, 5, 3, 6])) # Filter Size: 5x5; Input Channels: 3; Output Channels: 6 output = tf.nn.conv2d(input=input_tensor, filters=conv_filter, strides=[1, 1, 1, 1], padding="SAME", data_format="NHWC", dilations=[1, 1, 1, 1]) print(output.shape) # Expected Shape: (10, 28, 28, 6) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值