tf.nn.conv1d

本文详细解释了TensorFlow中tf.nn.conv1d函数的工作原理,通过实例展示了如何使用该函数进行一维卷积操作。内容包括卷积核的形状、步长、填充等参数设置,以及卷积过程的数学解析。通过将一维卷积类比为二维卷积,帮助读者更好地理解矩阵乘法在卷积运算中的应用。
摘要由CSDN通过智能技术生成

conv1d 一维卷积

tf.nn.conv1d(
    value,
    filters,
    stride,
    padding,
    use_cudnn_on_gpu=None,
    data_format=None,
    name=None
)
  • value的格式为:[batch, in_width, in_channels],batch为样本维,in_width为宽度维,表示样本的宽度,in_channels维通道维,表示样本有多少个通道,对应到本文输入[batch, sequence_length, hidden_size]
  • [filter_width, in_channels, out_channels] filter_width可以看作每次与value进行卷积的行数,in_channels表示value一共有多少列(与value中的in_channels相对应)。out_channels表示输出通道,可以理解为一共有多少个卷积核,即卷积核的数目。
  • stride:一个整数,表示步长,每次(向下)移动的距离。
  • padding:‘SAME’或’VALID’
  • use_cudnn_on_gpu:可选的bool,默认为True。
  • data_format:一个可选的string,可以是"NWC"和"NCW";默认为"NWC",数据按[batch,in_width,in_channels]的顺序存储;"NCW"格式将数据存储为[batch, in_channels, in_width]。
  • name:操作的名称(可选)。

我们来理解一下怎么运算的
一个conv2d [128,128,3] 卷积核[3,3,64] ==> [128,128,64] 计算改变了通道数,实际上是每一个通道的卷积核与输入所有通道做计算。
类比一下 conv1d 卷积核变为1维 也就是filter_width,每一个新通道与旧的所有通道相乘,然后多个卷积核相加,实际上是一个矩阵相乘,旧通道为行乘新通道列,看做两个矩阵运算就得出了所有的旧通道*所有的新通道。矩阵运算完再做卷积核的运算应该会简洁很多。

看个例子:

import keras
import keras.backend as K

x = K.variable([[[0.5,0.5,0.5], [1.0,1.0,1.0], [1.5,1.5,1.5], [2.0,2.0,2.0], [2.5,2.5,2.5]]])  # (1,5,3)
# 卷积核大小3  输出通道5
cnn = keras.layers.Conv1D(5, 3, activation='relu', padding='same', kernel_initializer=keras.initializers.Ones(), bias_initializer=keras.initializers.Zeros())(x)
print(K.eval(cnn)) # shape: (1, 5, 5)

# (1*0.5+1*0.5+1*0.5)*3 3:通道
array([[[ 4.5,  4.5,  4.5,  4.5,  4.5],
        [ 9. ,  9. ,  9. ,  9. ,  9. ],
        [13.5, 13.5, 13.5, 13.5, 13.5],
        [18. , 18. , 18. , 18. , 18. ],
        [13.5, 13.5, 13.5, 13.5, 13.5]]], dtype=float32)

TensorFlow函数:tf.nn.conv1d

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值