python - 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 才不再接受输入。否则,网络将永远持续下去。
这是可能的吗?谢谢你。
解决方案
如果您知道:
- 您正在增加每次迭代的步骤数。(从 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)
推荐阅读
- javascript - 我的 HTML 标记中有许多部分使用相同的类,如何为每个部分使用一个函数?
- javascript - 使用 crypto.subtle.digest 生成给定文件的摘要是否可行?
- typescript - babel-plugin-module-resolver 不适用于 react native 和 typescript
- java - 为什么可以将 java 可为空的返回值分配给 Kotlin Non-Nullable 变量?
- botframework - 微软机器人框架:turncontext
- c# - 由 Bot Framework 遥测生成的事件未出现在 Application Insights 中
- airflow - Airflow SSH 操作员错误:遇到 RSA 密钥,应为 OPENSSH 密钥
- prolog - 如何为其他谓词中的列表元素添加约束?
- javascript - 使用 SocketIO 和 node.js,只有我发送的消息在聊天室中不可见
- terraform - Terraform - 如何获取在 for_each 块中创建的资源的引用