tf.estimator shuffle - 随机种子?

时间:2017-10-30 06:57:02

标签: python random tensorflow deep-learning tensorflow-estimator

当我反复运行tf.estimator.LinearRegressor时,结果每次都略有不同。我猜这是因为shuffle=True在这里:

input_fn = tf.estimator.inputs.numpy_input_fn(
    {"x": x_train}, y_train, batch_size=4, num_epochs=None, shuffle=True)

尽管这样做很好,但是当我试图通过在nptf中播种随机数生成器来确定它时:

np.random.seed(1)
tf.set_random_seed(1)

每次结果仍然略有不同。我错过了什么?

1 个答案:

答案 0 :(得分:3)

tf.set_random_seed设置图级种子,但它不是随机性的唯一来源,因为还有操作级种子,需要为每个操作提供。

不幸的是,tf.estimator.inputs.numpy_input_fn没有提供seed参数和shuffle来将它们传递给基础操作(source code)。因此,_enqueue_data函数始终获取seed=None,这将重置您提前设置的任何种子。顺便说一下,有趣的是要注意许多底层feed函数使用标准python random.seed进行随机播放,而不是tensorflow random(参见_ArrayFeedFn_OrderedDictNumpyFeedFn等)。

摘要:目前无法保证shuffle=True的稳定执行,至少使用当前的API。您唯一的选择是自己洗牌并传递shuffle=False