Keras中Conv1D的使用及说明
作者:脉望虫
Conv1D
keras.layers.Conv1D(filters, kernel_size, strides=1, padding='valid', data_format='channels_last', dilation_rate=1, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
1D 卷积层 (例如时序卷积)。
该层创建了一个卷积核,该卷积核以 单个空间(或时间)维上的层输入进行卷积, 以生成输出张量。 如果 use_bias 为 True, 则会创建一个偏置向量并将其添加到输出中。 最后,如果 activation 不是 None,它也会应用于输出。
当使用该层作为模型第一层时,需要提供 input_shape 参数(整数元组或 None),例如, (10, 128) 表示 10 个 128 维的向量组成的向量序列, (None, 128) 表示 128 维的向量组成的变长序列。
参数
filters
: 整数,输出空间的维度 (即卷积中滤波器的输出数量)。kernel_size
: 一个整数,或者单个整数表示的元组或列表, 指明 1D 卷积窗口的长度。strides
: 一个整数,或者单个整数表示的元组或列表, 指明卷积的步长。 指定任何 stride 值 != 1 与指定 dilation_rate 值 != 1 两者不兼容。padding
: “valid”, “causal” 或 “same” 之一 (大小写敏感) “valid” 表示「不填充」。 “same” 表示填充输入以使输出具有与原始输入相同的长度。 “causal” 表示因果(膨胀)卷积, 例如,output[t] 不依赖于 input[t+1:], 在模型不应违反时间顺序的时间数据建模时非常有用。data_format
: 字符串, “channels_last” (默认) 或 “channels_first” 之一。输入的各个维度顺序。 “channels_last” 对应输入尺寸为 (batch, steps, channels) (Keras 中时序数据的默认格式) 而 “channels_first” 对应输入尺寸为 (batch, channels, steps)。dilation_rate
: 一个整数,或者单个整数表示的元组或列表,指定用于膨胀卷积的膨胀率。 当前,指定任何 dilation_rate 值 != 1 与指定 stride 值 != 1 两者不兼容。activation
: 要使用的激活函数。 如未指定,则不使用激活函数 (即线性激活: a(x) = x)。use_bias
: 布尔值,该层是否使用偏置向量。kernel_initializer
: kernel 权值矩阵的初始化器 。bias_initializer
: 偏置向量的初始化器 。kernel_regularizer
: 运用到 kernel 权值矩阵的正则化函数。bias_regularizer
: 运用到偏置向量的正则化函数。activity_regularizer
: 运用到层输出(它的激活值)的正则化函数 。kernel_constraint
: 运用到 kernel 权值矩阵的约束函数。bias_constraint
: 运用到偏置向量的约束函数。
输入尺寸
3D 张量 ,尺寸为 (batch_size, steps, input_dim)
输出尺寸
3D 张量,尺寸为 (batch_size, new_steps, filters)。 由于填充或窗口按步长滑动,steps 值可能已更改
输入输出尺寸的理解
一般在2D卷积中,输入尺寸很直观,为 (samples, rows, cols, channels),即为样本数,行数、列数和通道数四维信息,但是若以此推断,在Conv1D总两维信息就足够,中间却夹杂了一个steps,那这个steps如何去理解呢?
理解steps参数,我们应该跳出图像的思维,1D卷积通常施用在时序数据中,在时序数据的输入中:
batch_size
: 输入的样本数steps
: 时间维度,个人认为可以理解成量化后的时间长度,也就是多少个时刻input_dim
: 每个时刻的特征数量
keras Conv1D 一维卷积的输入维度
报错情况
expected conv1d_1_input to have 3 dimensions, but got array with shape (1, 56)
问题原因
维数不匹配
解决方法
数组的维数是(1,56),但神经网络维数与数组维数相反,应该使用(56,1)或(None,1)
同时神经网络的输入数据应改成三维,即reshape为(1,56,1)
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。