我正在建立一个不太明显的连接架构的神经网络。我归结为4个输入块,每个输入都有自己的路径通向最终输出层,并在几个步骤之间合并它们。
我在R上使用mxnet。我定义了4 mx.symbol.Variable("data")
,每个都是' chunk的输入。输入。图表上只显示1(graph.viz(out)
)。我可以理解,我应该只提供一个大输入向量。但是......如何拆分输入向量? (哦,并且确定,mxnet中state.size
的{{1}},指向内存块的数量,等于#输入和输出,对吗?)
代码(最小例子):
lstm
所以问题是:如何提供2个输入,或者如何在2中分割1个输入向量? (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
和in1
似乎没有成功(
- 编辑1
可以想象,符号变量的名称前两行
in2
应该是不同的。我很确定他们应该更喜欢:
in1 <- mx.symbol.Variable("data") # 7 values
in2 <- mx.symbol.Variable("data") # 7 values
但是,更改它们并不会改变视觉计算图。好吧,它确实:现在再次只显示1个输入,但不是输入(绿色圆圈),而是作为实际层(粉红色矩形)。这似乎没有帮助我......
答案 0 :(得分: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
似乎没问题