2017-08-03 18 views
0

我正在製作一個不太明顯的連接體系結構的神經網絡。我歸結爲4塊輸入,每塊輸入都有自己的路徑,將它們合併成幾個步驟。 我在R上使用mxnet。我定義了4個mx.symbol.Variable("data"),每個輸入都是輸入的「塊」。圖上只顯示1(graph.viz(out))。我可以理解,我應該只提供1個大的輸入向量。然而......我如何分割輸入向量? (哦,可以肯定,在mxnet一個lstmstate.size,它指向存儲塊,等於#輸入和輸出的數目,是嗎?)如何拆分mxnet神經網絡的輸入?

代碼(最小示例):

in1 <- mx.symbol.Variable("data1") # 7 values 
in2 <- mx.symbol.Variable("data2") # 7 values 

l1.1 <- mx.symbol.RNN(in1, name="lstm1.1", mode="lstm", num.layers=1, state.size=7) # first nn on the first 7 inputs 
l1.2 <- mx.symbol.RNN(in2, name="lstm1.2", mode="lstm", num.layers=1, state.size=7) # second nn on the last 7 inputs 
l2 <- mx.symbol.RNN(data=l1.1+l1.2, name="lstml2", mode="lstm", num.layers=1, state.size=14) # state.size must be 14, since each input separate has 7 

out.dens <- mx.symbol.FullyConnected(c.lstm, name="out-dens", num.hidden=4) # 

pred <- mx.symbol.LinearRegressionOutput(out, name="pred") 

graph.viz(pred) # only lstm1.1 has a data input 

所以問題是:如何提供2個輸入,或如何將1個輸入向量分成2個? (in1in2似乎並沒有制定出精細)

- 編輯1

可以想象的是象徵性的變量前兩行 in1 <- mx.symbol.Variable("data") # 7 values in2 <- mx.symbol.Variable("data") # 7 values 的名稱應該是不同的。我很確定他們應該,更像是: in1 <- mx.symbol.Variable("data1") # 7 values in2 <- mx.symbol.Variable("data2") # 7 values

但是,改變它們並不會改變視覺計算圖。那麼,它確實:現在再次只顯示1個輸入,但不是輸入(綠色圓圈),而是作爲實際圖層(粉紅色矩形)。這似乎並沒有幫助我......

回答

1

第一線更改爲:

input <- mx.symbol.Variable("data") 

in1 <- mx.symbol.slice(input, begin=0, end=6) 
in2 <- mx.symbol.slice(input, begin=7, end=13) 

,並且不添加,但使用concat

l2 <- mx.symbol.concat(c(l1.1, 1.2), num.args=14) 
l2 <- mx.symbol.RNN(data=l2, name="lstml2", mode="lstm", num.layers=1, state.size=14) # state.size must be 14, since each input separate has 7 

似乎是確定