如何保存python随机种子进度?
How to save python random seed progress?
我正在 Colab 上训练强化学习程序,希望保持其可重复性,所以我在开始时设置了随机种子
import random
random.seed(1)
import numpy as np
np.random.seed(1)
问题是 Colab 会不时终止我的执行,因此我需要保存一些检查点(例如模型参数)才能继续执行。现在我的问题是如何保存“播种”进度?我发现如果我在恢复时重新初始化我的种子,生成的随机数会回到初始执行。
例如
>>> random.seed(40)
>>> random.random()
0.4586
>>> random.random()
0.8778
# the next is >>> random.random()
# 0.0318
# while continue execution
>>> random.seed(40)
>>> random.random()
0.4586 # I want this to be 0.0318
谢谢!
感谢@jasonharper 的评论指出了正确的方向!
- 对于随机模块,使用 getstate() 和 setstate()。
e.g.
>>> random.seed(40)
>>> random.random()
0.4586
>>> random.random()
0.8778
>>> state = random.getstate()
>>> random.random()
0.0318
>>> random.setstate(state)
>>> random.random()
0.0318
ref - https://www.w3schools.com/python/ref_random_setstate.asp
- 对于 numpy.random,使用 get_state() 和 set_state()。工作原理如下
e.g.
>>> import numpy as np
>>> np.random.seed(1)
>>> np.random.rand(1,1)
array([[0.417022]])
>>> state = np.random.get_state()
>>> np.random.rand(1,1)
array([[0.72032449]])
>>> np.random.set_state(state)
>>> np.random.rand(1,1)
array([[0.72032449]])
参考 -
https://numpy.org/doc/stable/reference/random/generated/numpy.random.get_state.html;
https://numpy.org/doc/stable/reference/random/generated/numpy.random.set_state.html#numpy.random.set_state
我正在 Colab 上训练强化学习程序,希望保持其可重复性,所以我在开始时设置了随机种子
import random
random.seed(1)
import numpy as np
np.random.seed(1)
问题是 Colab 会不时终止我的执行,因此我需要保存一些检查点(例如模型参数)才能继续执行。现在我的问题是如何保存“播种”进度?我发现如果我在恢复时重新初始化我的种子,生成的随机数会回到初始执行。
例如
>>> random.seed(40)
>>> random.random()
0.4586
>>> random.random()
0.8778
# the next is >>> random.random()
# 0.0318
# while continue execution
>>> random.seed(40)
>>> random.random()
0.4586 # I want this to be 0.0318
谢谢!
感谢@jasonharper 的评论指出了正确的方向!
- 对于随机模块,使用 getstate() 和 setstate()。
e.g.
>>> random.seed(40)
>>> random.random()
0.4586
>>> random.random()
0.8778
>>> state = random.getstate()
>>> random.random()
0.0318
>>> random.setstate(state)
>>> random.random()
0.0318
ref - https://www.w3schools.com/python/ref_random_setstate.asp
- 对于 numpy.random,使用 get_state() 和 set_state()。工作原理如下
e.g.
>>> import numpy as np
>>> np.random.seed(1)
>>> np.random.rand(1,1)
array([[0.417022]])
>>> state = np.random.get_state()
>>> np.random.rand(1,1)
array([[0.72032449]])
>>> np.random.set_state(state)
>>> np.random.rand(1,1)
array([[0.72032449]])
参考 - https://numpy.org/doc/stable/reference/random/generated/numpy.random.get_state.html; https://numpy.org/doc/stable/reference/random/generated/numpy.random.set_state.html#numpy.random.set_state