【发布时间】:2017-03-28 21:27:38
【问题描述】:
我有一个预训练的 Seq-to-Seq 槽标注器网络,其最简单的形式如下:
Network_1 = Sequential ([
Embedding(emb_dim)
Recurrence(LSTM(LSTM_dim))
Dense(num_labels)
])
我想将其输出用作另一个网络中的初始层。基本上,我想将 network_1(预训练)中的嵌入连接到 network_2 中的嵌入层,如下所示:
Network_2 = Sequential ([
Concat_embeddings ( Embedding(emb_dim), Network_1_embed() )
Recurrence(LSTM(LSTM_dim))
(Label('encoded_h'), Label('encoded_c'))
])
def Network_1_embed():
loaded_model = load_model(path_to_network_1_saved_model);
cloned_model = loaded_model.clone(CloneMethod.freeze);
return cloned_model
def Concat_embeddings(emb1, emb2):
X=Placeholder();
return splice(emb1(X), emb2(X))
这给了我以下错误 ValueError: Times: 形状为“[50360]”的右操作数的 1 个前导维度与形状为“[293]”的左操作数的尾随维度不匹配
作为参考,我们得到 [293],因为 emb_dim=256,num_network_1_labels=37,而 [50360] 是 network_2 输入的词汇量。 Network_1 在训练时也具有相同的词汇表映射,因此它可以采用相同的输入,并为每个标记输出一个 37 维向量。 我该如何进行这项工作? 谢谢
【问题讨论】:
标签: cntk