我们已经训练了一个模型,并希望在几种不同的方法中使用它,每种方法都会改变它。但是,第一个方法调用会污染后续调用的模型。
理想情况下,我们只想对模型进行深度复制,然后将副本传递给变异方法。
这可能吗?还是有更好的选择?
我们已经训练了一个模型,并希望在几种不同的方法中使用它,每种方法都会改变它。但是,第一个方法调用会污染后续调用的模型。
理想情况下,我们只想对模型进行深度复制,然后将副本传递给变异方法。
这可能吗?还是有更好的选择?
当然。GPflow 2.0.0-rc1 有一个深拷贝的实现,但它被称为deepcopy_components
Artem 的回答适用于 GPflow 2.0 的 rc1 候选版本。在最终的 2.0 版本中,函数是gpflow.utilities.deepcopy
.
您还可以使用 获取模型的不可变* 快照,该快照gpflow.utilities.freeze
返回具有每个的模型tf.Variable
并gpflow.Parameter
替换为tf.Tensor
。
*不可变,因为它不能被训练