一. 函数的作用
该函数的主要作用是实现一维卷积(conv1d)操作。所谓的一维卷积可以理解为是二维卷积(conv2d)在某一维度上简化,传统的二维卷积是用卷积核在特征图像的width和height两个方向上按一定的stride进行滑窗卷积操作,而一维卷积则可以看成是二维卷积在width或者height方向上的简化。
二. 函数的参数说明
1. 函数的整体结构如下:
tf.nn.conv1d(value, filters, stride, padding, use_caduu_on_gpu, data_format, name, input, dilations)
2. 函数中各个参数解释如下:
- value: 表示输入的样本(特征),其格式的确定可以分为以下两种情况:
若data_format为‘NWC’,则其格式为:[batch, in_width, in_channels],batch表示批量样本(特征)数,in_width表示样本(特征)的维度,in_channels表示样本(特征)的通道数;
若data_format为‘NCW’,则其格式为:[batch, in_channels, in_width],batch表示批量样本(特征)数,in_channels表示样本(特征)的通道数,in_width表示样本(特征)的维度。
- filters: 表示卷积核,其格式为:[filter_width, in_channels, out_channels],filter_width表示卷积核的大小,in_channels表示样本(特征)的通道数,out_channels表示卷积之后的通道数。
- stride: 表示在卷积过程中卷积核每移动的步长,通常为一个int型的整数或长度为3的列表,如:[1,2,1]。
- padding: 表示是否在卷积过程中对输入的样本(特征)进行补0操作。
- use_caduu_on_gpu: 一个布尔型变量,默认为‘True’。
- data_format: 表示数据格式的标识符,通常取‘NWC’或者‘NCW’二者之一,默认为为前者。
- name: 定义该操作的名称。
- input: Alias for value,一般不考虑。
- dilations: 表示卷积的膨胀因子,一般为一个int型的整数或长度为3的列表,默认值为1。如果设定值>1,则认为该维度上每个过滤器元素之间将有k-1个位置跳过。
注意:若dilations参数采用长度为3的int列表表示,则批次尺寸和深度尺寸的膨胀必须为1!
三. 函数的使用
1. 未采用膨胀卷积时的情况
#*******************************导入相关模块***********************************#
import tensorflow as tf
import numpy as np
#*******************************计算图声明*************************************#
#--------------------定义一个指定的、维度为[2,7,1]的输入
X = np.array( [[1,2,3,4,3,2,1],[1,1,1,3,2,2,2]], dtype=float).reshape([2,7,1])
#--------------------定义一个核为[1,2]、维度为[2,1,1]的卷积核
W = np.array([1,2], dtype=float).reshape( [2,1,1] )
#--------------------进行一维卷积
Y = tf.nn.conv1d( X, W, stride=1, padding='VALID', dilations=1 ) #未采用膨胀
#*******************************创建会话*************************************#
with tf.Session() as sess:
Y = sess.run(Y)
#--------------------模型的输出
[[5., 8., 11., 10., 7., 4],
[3., 3., 7., 7., 6., 6]]
2. 采用膨胀卷积时的情况(空洞数为2,即dilations=3)
#*******************************导入相关模块***********************************#
import tensorflow as tf
import numpy as np
#*******************************计算图声明*************************************#
#--------------------定义一个指定的、维度为[2,7,1]的输入
X = np.array( [[1,2,3,4,3,2,1],[1,1,1,3,2,2,2]], dtype=float).reshape([2,7,1])
#--------------------定义一个核为[1,2]、维度为[2,1,1]的卷积核
W = np.array([1,2], dtype=float).reshape( [2,1,1] )
#--------------------进行一维卷积
Y = tf.nn.conv1d( X, W, stride=1, padding='VALID', dilations=3 ) #未采用膨胀
#*******************************创建会话*************************************#
with tf.Session() as sess:
Y = sess.run(Y)
#--------------------模型的输出
[[9., 8., 7., 6],
[7., 5., 5., 7]]