【问题标题】:Pause Python program on the fly (and resume)即时暂停 Python 程序(并恢复)
【发布时间】:2014-05-03 12:05:13
【问题描述】:

我正在构建一个机器学习算法(如神经网络),其中类变量(即numpy 矩阵)代表系统的各种参数

通过迭代更新所有类变量来训练系统。迭代次数越多越好。我想每天早上起床检查班级变量。之后我想恢复程序

我在交互式终端中调用程序。这是我能想到的:

  1. 打印到终端 -> 矩阵太大,没有帮助
  2. 保存到磁盘并加载到另一个终端
  3. set_trace(),但需要事先知道何时暂停

是否可以在运行中暂停程序并使用类变量然后恢复?

如果有人需要更多详细信息,程序在这里:github link

【问题讨论】:

  • 是否可以在每次迭代时将状态保存到文件中,并检查自上次读取以来是否修改了另一个文件?如果配置文件已更改,请加载新参数并继续运行。
  • 如果您只想阅读进度并且不想编辑/更改它,为什么不让它每 N 次迭代将矩阵写入文件。假设每次迭代花费的时间大致相同,您应该能够找到大致适合您认为方便的时间窗口的一定数量的迭代。

标签: python numpy pandas machine-learning neural-network


【解决方案1】:

我对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()

【讨论】:

  • 又短又甜,+1 :)
【解决方案2】:

如果修改 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( ... )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 2015-02-21
    相关资源
    最近更新 更多