CNTK:克隆单层
CNTK: cloning a single layer
我目前的目标是从已经训练好的模型中克隆一个层。
第一个问题是 clone()
方法从提供的节点克隆了整个图,这不是我想要的。
所以我尝试通过从节点检索其权重来手动克隆它(在本例中为密集层),如下所示:
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 &'
clone()
方法不一定克隆整个图。它允许您通过 substitutions
参数 "cut out" 一张图。 substitutions
参数指定要克隆的图形部分的输入节点;基本上你想剪的地方。
例如,要克隆堆栈的中间层,识别
- 它的根,我们称它为
layer_root
- 它的输入。假设有一个输入节点,您将其存储为
layer_input
那么你应该可以根据下面的代码草图克隆这部分:
substitutions = {
layer_input : C.placeholder(name='cloned_layer_input')
}
cloned_layer = layer_root.clone(clone_method, substitutions)
substitutions
一旦命中layer_input
就会导致clone()
停止克隆,在克隆中,将其替换为占位符。
结果将是一个可调用的,就像层库的任何层(如 C.Dense()
)或用 @C.Function
定义的任何函数一样,我相信你正在寻找什么。