tensorflow conv1d的理解和实现

参考:1、https://blog.csdn.net/qq_16320025/article/details/89396718?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase

 

2、https://blog.csdn.net/weixin_40532625/article/details/105628460?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1.nonecase

 

在自然语言处理(NLP)领域,甚至图像处理的时候,我们可能会用到一维卷积(conv1d).以为卷积可以看作是二维卷积(conv2d)的简化,二维卷积是将一个特征图在width和height两个方向上进行滑动窗操作,对应位置进行相乘求和;而一维卷积则只是在width或者说height方向上进行滑动窗口并相乘求和

#  tensorflow中的 conv1d 和conv2d 的区别:conv1d是单通道的,conv2d是多通道,
#  conv1d适合处理文本序列,conv2d适合处理图像。

# tf.nn.conv1d(value, filters, stride, padding)
# value 的形状:[batch, in_width, in_channels]
#
# batch 表示多少个样本
# in_width 表示样本的宽度
# in_channels 表示样本有多少个通道
# 可看作一个平铺开的二维数组:[batch, 行数, 列数];
#
# filter 的形状:[filter_width, in_channels, out_channels]
#
# filter_width 表示与 value 进行卷积的行数/每次
# in_channels 表示 value 一共有多少列 = value 中的 in_channels
# out_channels 表示卷积核数目
#  
# stride :步长

# output 的形状:[batch, out_width, out_channels]

def my_conv1d_column(input_v, weight, bias, step_size=1):
    dims_v = input_v.shape
    if len(dims_v) == 2:
        input_v = tf.expand_dims(input_v, 0)  # 0表示第一维

    dims_w = weight.shape
    if len(dims_w) == 2:
        weight = tf.expand_dims(weight, 0)  # 0表示第一维
    conv_result = tf.nn.conv1d(input_v, weight, step_size, 'VALID')

    dims_b = bias.shape
    if len(dims_b) == 2:
        bias = tf.expand_dims(bias, 0)  # 0表示第一维

    conv_result = tf.add(conv_result, bias)
    return conv_result

 

你可能感兴趣的:(tensorflow学习,python)