将维输入到一维卷积网络中

缺口

真的很难理解keras中的卷积1d的输入尺寸

输入形状

具有以下形状的3D张量:(样本,步长,input_dim)。

输出形状

具有以下形状的3D张量:(样本,new_steps,nb_filter)。steps值可能由于填充而发生了变化。

我希望我的网络输入一个时间序列的价格(顺序为101)并输出4个概率。我目前运行良好的非卷积网络(训练集为28000)如下所示:

standardModel = Sequential()
standardModel.add(Dense(input_dim=101, output_dim=100, W_regularizer=l2(0.5), activation='sigmoid'))
standardModel.add(Dense(4, W_regularizer=l2(0.7), activation='softmax'))

为了改善这一点,我想从输入层制作一个特征图,该特征图的长度为10。(因此具有10个共享权重和1个共享偏差)。然后,我想使用最大池化并将其馈入40个左右神经元的隐藏层,然后在外层将其与4个具有softmax的神经元一起输出。

图片(非常抱歉!)

因此,理想情况下,卷积层将采用2d张量的维数:

(minibatch_size,101)

并输出尺寸的3d张量

(minibatch_size,91,no_of_featuremaps)

但是,keras层似乎在称为step的输入中需要一个尺寸。我试过了解这一点,但仍然不太了解。在我的情况下,应该将步长设为1,因为向量中的每个步长都会使时间增加1?另外,什么是new_step?

另外,如何将池化层(3d张量)的输出转换为适合2d张量形式的标准隐藏层(即Dense keras层)的输入?

更新:在给出了非常有用的建议之后,我尝试制作一个像这样的卷积网络:

conv = Sequential()
conv.add(Convolution1D(64, 10, input_shape=(1,101)))
conv.add(Activation('relu'))
conv.add(MaxPooling1D(2))
conv.add(Flatten())
conv.add(Dense(10))
conv.add(Activation('tanh'))
conv.add(Dense(4))
conv.add(Activation('softmax'))

行conv.Add(Flatten())抛出一个超出有效范围错误的范围。有趣的是,不仅此代码不会引发此错误

conv = Sequential()
conv.add(Convolution1D(64, 10, input_shape=(1,101)))
conv.add(Activation('relu'))
conv.add(MaxPooling1D(2))
conv.add(Flatten())

正在做

print conv.input_shape
print conv.output_shape

结果是

(None, 1, 101
(None, -256)

被退回

更新2:

已变更

conv.add(Convolution1D(64, 10, input_shape=(1,101)))

conv.add(Convolution1D(10, 10, input_shape=(101,1))

它开始工作。但是,将(None,101,1)输入到1d转换层或(None,1,101)是我应该注意的重要区别吗?为什么(None,1,101)不起作用?

马辛·莫耶科(MarcinMożejko)

之所以如此,是因为Keras设计者打算将一维卷积框架解释为处理序列的框架。要完全理解它们之间的差异,请尝试想象您具有多个特征向量的序列。然后,您的输出将至少是二维的-第一个维度与时间有关,而其他维度与要素有关。一维卷积框架旨在以某种方式将此时间维加粗,并尝试在数据中找到重复出现的模式-而不是执行经典的多维卷积变换。

在您的情况下,您必须简单地重塑数据以使其具有形状(dataset_size,101,1)-因为您只有一个功能。使用numpy.reshape函数可以很容易地做到这一点要了解新步骤的含义-您必须了解您正在随着时间进行卷积-因此您更改了数据的时间结构-这导致了新的时间连接结构。为了使您的数据成为适合密集/静态图层的格式,请使用keras.layers.flatten图层-与经典卷积情况相同。

更新:正如我之前提到的那样,输入的第一个维度与时间有关。因此,(1, 101)之间的区别(101, 1)在于,在第一种情况下,您有一个具有101个功能部件的时间步,而在第二种情况下,您有一个具有1个功能部件的101个时间步。您第一次更改后提到的问题的起因是在此类输入上进行大小为2的合并。只有一个时间步长-您不能在大小为2的时间窗口中合并任何值-仅仅是因为没有足够的时间步长来做到这一点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

keras中一维卷积网络的输入形状

来自分类Dev

向量的一维卷积

来自分类Dev

CNN 的一维卷积

来自分类Dev

张量流中的基本一维卷积

来自分类Dev

keras 中的一维卷积序列

来自分类Dev

如何使用一维卷积完成二维卷积?

来自分类Dev

如何将FFT用于一维反卷积?

来自分类Dev

将一维数组的元素插入到二维数组中的特定位置

来自分类Dev

vb.net-将一维数组插入到二维数组中

来自分类Dev

在Pytorch中的张量上应用一维卷积

来自分类Dev

将一维数组存储到二维

来自分类Dev

卷积以降低一维向量的维数

来自分类Dev

Python:一维数组循环卷积

来自分类Dev

一维卷积的对称边界条件

来自分类Dev

scanf()到C中的一维数组

来自分类Dev

scanf()到C中的一维数组

来自分类Dev

将二维数组的元素复制到另一个二维数组中

来自分类Dev

mySQL,从二维到一维

来自分类Dev

实际输入到FFT,然后iFFT返回到一维数组中的实际数据

来自分类Dev

将数据存储在一维数组中

来自分类Dev

将一维项目列表排序到子级/父级结构中

来自分类Dev

Cuda:将一维数组从 CPU 复制到 GPU

来自分类Dev

将数据插入到二维byte []数组中

来自分类Dev

如何执行一维“有效”卷积?

来自分类Dev

我如何在theano中进行一维卷积

来自分类Dev

Tensorflow:如何应用一维卷积特征/通道虎钳?

来自分类Dev

一维数组到可变大小的java矩阵中

来自分类Dev

一维数组到可变大小的java矩阵中

来自分类Dev

ConvNets 中的每次卷积都会增加维数吗?