Store/Reload CNTK 训练器、模型、输入、输出
Store/Reload CNTK Trainer, Model, Inputs, Outputs
存放训练器和所有必要组件的最佳方式是什么?
1.存储:
- trainer 的存储检查点:使用其
trainer.save_checkpoint(filename, external_state={})
功能
- 另外单独存储模型:使用
z.save(filename)
方法,每个cntk操作都有。您还可以获得 z = trainer.model
.
2。重新加载:
- 恢复模型:使用
C.load_model(...)
。 (不要对 Cntk 1 中已弃用的持久命名空间感到困惑。)
- 从恢复的模型中获取输入。
- 恢复训练器本身:使用
trainer.restore_from_checkpoint
作为例子。显示 here。问题是,这个函数已经需要一个训练对象,它可能必须以与用于创建检查点的训练相同的方式初始化!?
我现在如何恢复训练器使用的误差函数中的标签输入?在下面的代码中,我标记了我认为存储后必须恢复的变量。
z = C.layers.Dense(.... )
loss = error = C.squared_error(z, **l**)
**trainer** = C.Trainer(**z**, (loss, error), [mylearner], my_tensorboard_writer)
您可以恢复您的训练器,但实际上我更喜欢只加载我的模型 m
。原因很简单,创建一个全新的训练器要容易得多,因为这样你就可以更容易地改变训练器的所有其他参数。
然后你可以从加载的模型中获取输入变量(如果你的网络只有一个输入):
input_var = m.arguments[0]
那么您需要模型的输出:
output = m(input_var)
并使用目标输出定义损失函数 target_output
:
C.squared_error(output, target_output)
使用您的模型和损失函数,您可以从那里重新创建您的训练器,根据需要设置学习率等
存放训练器和所有必要组件的最佳方式是什么?
1.存储:
- trainer 的存储检查点:使用其
trainer.save_checkpoint(filename, external_state={})
功能 - 另外单独存储模型:使用
z.save(filename)
方法,每个cntk操作都有。您还可以获得z = trainer.model
.
2。重新加载:
- 恢复模型:使用
C.load_model(...)
。 (不要对 Cntk 1 中已弃用的持久命名空间感到困惑。) - 从恢复的模型中获取输入。
- 恢复训练器本身:使用
trainer.restore_from_checkpoint
作为例子。显示 here。问题是,这个函数已经需要一个训练对象,它可能必须以与用于创建检查点的训练相同的方式初始化!?
我现在如何恢复训练器使用的误差函数中的标签输入?在下面的代码中,我标记了我认为存储后必须恢复的变量。
z = C.layers.Dense(.... )
loss = error = C.squared_error(z, **l**)
**trainer** = C.Trainer(**z**, (loss, error), [mylearner], my_tensorboard_writer)
您可以恢复您的训练器,但实际上我更喜欢只加载我的模型 m
。原因很简单,创建一个全新的训练器要容易得多,因为这样你就可以更容易地改变训练器的所有其他参数。
然后你可以从加载的模型中获取输入变量(如果你的网络只有一个输入):
input_var = m.arguments[0]
那么您需要模型的输出:
output = m(input_var)
并使用目标输出定义损失函数 target_output
:
C.squared_error(output, target_output)
使用您的模型和损失函数,您可以从那里重新创建您的训练器,根据需要设置学习率等