CNTK:克隆单层

时间:2018-02-02 12:05:14

标签: python machine-learning deep-learning cntk

我目前的目标是从已经训练过的模型中克隆单个图层。

第一个问题是clone()方法从提供的节点克隆整个图形,这不是我想要的。

所以我尝试通过从节点中检索其权重来手动克隆它(在本例中为Dense图层),如下所示:

node = C.logging.graph.find_by_name(model, 'node')
C.layers.Dense(node.shape, init=node.W.value, init_bias=node.b.value)

不幸的是,由于我收到以下阴影错误,因此无效:

TypeError: in method 'random_initializer_with_rank', argument 1 of type 'CNTK::ParameterInitializer const &'

1 个答案:

答案 0 :(得分:1)

clone()方法不一定克隆整个图。它可以让你“切断”#34;一段图表,通过substitutions参数。 substitutions参数指定要克隆的图形部分的输入节点;基本上你想要削减它。

例如,要克隆堆栈的中间层,请标识

  • 它的根,我们称之为layer_root
  • 其输入。我们假设有一个输入节点,您将其存储为layer_input

然后你应该能够根据以下代码草图克隆这个部分:

substitutions = {
    layer_input : C.placeholder(name='cloned_layer_input')
}
cloned_layer = layer_root.clone(clone_method, substitutions)

substitutions会导致clone()在点击layer_input后停止克隆,并在克隆中将其替换为占位符。

结果将是一个可调用的,就像层lib的任何层(如C.Dense())或用@C.Function定义的任何函数一样,我相信你正在寻找的东西。