参考: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