动态暂停和恢复Python程序
我正在构建一个机器学习算法(比如神经网络),在这个算法中,类变量(也就是 numpy 矩阵)代表了系统的各种参数。
训练这个系统是通过不断更新所有的类变量来完成的。迭代的次数越多,效果就越好。我希望每天早上都能查看一下这些类变量,然后继续运行程序。
我是在一个交互式终端中调用这个程序的。以下是我想到的一些方法:
- 在终端打印出来 -> 矩阵太大了,没什么帮助。
- 保存到磁盘,然后在另一个终端中加载。
set_trace()
,但这需要提前知道什么时候暂停。
有没有办法在运行中暂停程序,修改类变量,然后再继续运行呢?
如果有人需要更多细节,可以在这里查看程序:github链接
2 个回答
3
如果你修改一下model.do_EM()这个方法,让它在每一步都保存当前的状态,并且检查一个配置文件,会怎么样呢?
def do_EM(self, n_iteration = 10):
self.visualizer.visualize(self.param_alpha, self.param_mu, self.param_sigma)
for i in range(n_iteration):
print "iteration:", i
self.step_E()
print "done step_E. ",
self.step_M()
print "done step_M. "
self.visualizer.visualize(self.param_alpha, self.param_mu, self.param_sigma)
# Save current state
self.log.write( ... )
# Check for config changes
self.config.update( ... )
4
我对numpy不太熟悉,不过这里有一个简单的类,可以实现暂停和恢复的功能:
class Program():
def run(self):
while 1:
try:
self.do_something()
except KeyboardInterrupt:
break
def do_something(self):
print("Doing something")
# usage:
a = Program()
a.run()
# will print a lot of statements
# if you hit CTRL+C it will stop
# then you can run it again with a.run()