一个维卷积网络确实发现很难理解输入尺寸到卷积1D layer在keras:输入尺寸在keras
输入形状
三维张量与形状:(样本,步骤, input_dim)。
输出形状
三维张量与形状:(样本,new_steps,nb_filter)。步骤值可能因填充而改变。
我希望我的网络能够接受时间序列的价格(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个左右神经元的隐藏层中,然后在外层输出带有softmax的4个神经元。
picture (it's quite awful sorry!)
所以理想情况下,卷积层将采取尺寸的二维张量:
(minibatch_size,101)
和输出一个三维尺寸
的张量(minibatch_size, 91,no_of_featuremaps)
但是,keras层似乎需要输入调用中的维度ed步骤。我试过了解这一点,但仍然不太明白。在我的情况下,步骤应该是1,因为矢量中的每一步都是时间增加1?另外,什么是new_step?
另外,如何将积分层(一个三维张量)的输出转化为适合标准隐藏层(即密集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(拼合())抛出一个范围超过有效边界错误。有趣的是,这个错误是不抛出恰好这个代码:
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的conv层还是(None,1,101),我应该知道的有什么重要的不同?为什么(无,1,101)不起作用?
啊好的我有点看。因此,如果我的数据不仅仅是价格与时间的关系,而且还包括价格,降雨量和每次市场的交易量,我会给第一层提供一些维度(sample_size,101,3)? – Nick
我也尝试过类似这样的事情,而flatten图层会抛出一个奇怪的错误(某种溢出?) – Nick
conv = Sequential() conv.add(Convolution1D(64,10,input_shape =(1,101) )) conv.add(激活( 'RELU')) conv.add(MaxPooling1D(2)) conv.add(拼合()) conv.add(密集(10)) conv.add(激活( 'tanh')) conv.add(Dense(4)) conv.add(Activation('softmax')) – Nick