一個維卷積網絡確實發現很難理解輸入尺寸到卷積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