我真的很喜欢顺序符号,因为它使我的代码紧凑。我注意到在文档中它读取顺序促进权重共享,因此在以下代码块中所有参数都是共享的:
lay = Sequential ([F, G, H])
y = lay (x)
z = lay (x)
如何以创建两个不同实例但仍允许模型描述重用的方式使用 Sequential?所以 y 和 z 有自己的权重,但我只在代码中写过 Sequential 一次?(尽量保持我的代码紧凑)
我从 Frank Seide 那里得到了两条离线建议。
方法一是在 cntk.ops 中使用 CloneMethod
lay = Sequential ([F, G, H])
lay2 = lay.clone(CloneMethod.clone) (x)
y = lay (x)
z = lay2 (x)
另一种方法是在外部使用函数
def createLayer():
return Sequential ([F, G, H])
lay = createLayer()
lay2 = createLayer()
y = lay (x)
z = lay2 (x)
如果你想在一行上做所有事情,你也可以做这样的事情
createLayer = lambda : Sequential([Embedding,Recurrence(LSTM(100)),sequence.last))
y = createLayer() (x)
z = createLayer() (x)