首页 > 解决方案 > keras - 是否可以使整个模型或层序列递归重复?

问题描述

我想做类似以下的事情:

count = 0
myinput = Input(shape=(100,5))
#this is where we return to
while count < 10:
  lstm1 = LSTM(5,return_sequences=True)(myinput)
  merged = Concatenate(axis=1)([lstm1,myinput])  #I think that's the right axis lol.  Just an example
  myinput = LSTM(5,return_sequences=True)(merged)
  count += 1

result = Dense(1, activation='sigmoid')(myinput)

这只是一个例子,我永远不想专门制作这样的网络。但无论如何,这段代码当然会创建一个与 lstm1、merged、myinput 的规范相对应的层序列——并重复该序列 10 次。所以,30个不同的层。

我只想要 3 层,我希望它在 while 循环中重新使用这些层。这意味着只有在特定次数的重复之后 lstm1 才不再接受输入。否则,网络将永远持续下去。

这是可能的吗?谢谢你。

标签: pythontensorflowkerasneural-networkrecurrent-neural-network

解决方案


如果您知道:

  • 您正在增加每次迭代的步骤数。(从 100 开始,接下来是 200,接下来是 300,等等)

然后就很简单了:

originalInput = Input((100,5))
myinput = originalInput

lstm1 = LSTM(5,return_sequences=True)
lstm2 = LSTM(5,return_sequences=True)

for i in range(10):
    out = lstm1(myinput)
    out = Concatenate(axis=1)([out, myinput])
    out = lstm2(out)
    myinput = out

model = Model(originalInput, out)

连接轴:

  • 0:样本或示例(批量大小) - 你几乎不会改变它
  • 1:时间步长(最初为 100)
  • 2:单位或特征 (5)

推荐阅读