可重复性很重要。在我目前正在进行的一个闭源机器学习项目中,很难实现这一点。应该检查哪些部分呢?
回答:
设置种子
计算机使用伪随机数生成器,这些生成器通过一个称为种子的值进行初始化。对于机器学习,你可能需要执行以下操作:
# 我听说这里的顺序很重要import randomrandom.seed(0)import numpy as npnp.random.seed(0)import tensorflow as tftf.set_random_seed(0)session_conf = tf.ConfigProto(intra_op_parallelism_threads=1, inter_op_parallelism_threads=1)sess = tf.Session(graph=tf.get_default_graph(), config=session_conf)from keras import backend as KK.set_session(sess) # 告诉keras使用已经设置种子的会话# 现在导入keras相关内容
另见: Keras常见问题解答:如何在开发过程中使用Keras获得可重复的结果?
sklearn
sklearn.model_selection.train_test_split 有一个 random_state
参数。
检查项目
- 我每次加载数据的顺序是否相同?
- 我是否以相同的方式初始化模型?
- 你是否使用了可能发生变化的外部数据?
- 你是否使用了可能发生变化的外部状态(例如
datetime.now
)?