tf.nn.conv2d的用法,请举例说明
时间: 2024-05-05 15:18:52 浏览: 128
tf.nn.conv2d是 TensorFlow 中的一个二维卷积函数,用于实现卷积神经网络中的卷积层。它的用法如下:
```python
tf.nn.conv2d(
input,
filter,
strides,
padding,
use_cudnn_on_gpu=True,
data_format='NHWC',
dilations=[1, 1, 1, 1],
name=None
)
```
其中,参数说明如下:
- input:输入的四维张量,shape为 [batch, height, width, channels]。
- filter:滤波器的四维张量,shape为 [filter_height, filter_width, in_channels, out_channels],其中 in_channels 与 input 张量的 channels 维度一致,out_channels 为输出通道数。
- strides:卷积核的步长,格式为 [batch_stride, height_stride, width_stride, channel_stride]。
- padding:填充方式,可以为 'SAME' 或 'VALID',表示是否使用零填充。
- use_cudnn_on_gpu:是否使用当前 GPU 设备的 cuDNN 实现。
- data_format:输入数据的格式,可以为 'NHWC' 或 'NCHW'。
- dilations:膨胀系数,表示卷积核的扩张率。
- name:节点名称。
举个例子,输入图片为一张 $100\times 100$ 的 RGB 图片,卷积核大小为 $3\times 3$,输出通道为 $32$,步长为 $1\times 1$,填充方式为 'VALID':
```python
import tensorflow as tf
input = tf.placeholder(tf.float32, [None, 100, 100, 3])
filter = tf.Variable(tf.random_normal([3, 3, 3, 32]))
conv = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='VALID')
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
output = sess.run(conv, feed_dict={input: np.random.rand(1, 100, 100, 3)})
print(output.shape) # (1, 98, 98, 32)
```
以上代码通过 tf.nn.conv2d 实现了一次卷积操作,并得到了输出的张量。
阅读全文