相关疑难解决方法(0)

如何在keras中获得可重现的结果

每次我imdb_lstm.py从Keras框架运行示例时,我得到不同的结果(测试准确性)(https://github.com/fchollet/keras/blob/master/examples/imdb_lstm.py)代码包含np.random.seed(1337)在顶部,在任何keras之前进口.它应该防止它为每次运行生成不同的数字.我错过了什么?

更新:如何重现:

  1. 安装Keras(http://keras.io/)
  2. 执行https://github.com/fchollet/keras/blob/master/examples/imdb_lstm.py 几次.它将训练模型并输出测试精度.
    预期结果:每次运行的测试精度都相同.
    实际结果:每次运行的测试精度都不同.

UPDATE2:我在Windows 8.1上使用MinGW/msys运行它,模块版本:
theano 0.7.0
numpy 1.8.1
scipy 0.14.0c1

更新3:我把问题缩小了一点.如果我用GPU运行示例(设置theano flag device = gpu0),那么每次都会得到不同的测试精度,但是如果我在CPU上运行它,那么一切都按预期工作.我的显卡:NVIDIA GeForce GT 635)

python numpy theano keras

62
推荐指数
6
解决办法
2万
查看次数

哪些种子必须设置在哪里实现100%的训练结果的再现性?

在一般的张量流设置中

model = construct_model()
with tf.Session() as sess:
    train_model(sess)
Run Code Online (Sandbox Code Playgroud)

其中construct_model()包含模型定义,包括权重(tf.truncated_normal)的随机初始化并train_model(sess)执行模型的训练 -

我必须设置哪些种子,以确保重复运行上面的代码片段之间的100%可重复性?该文件tf.random.set_random_seed可能是简洁的,但给我留下了有点混乱.我试过了:

tf.set_random_seed(1234)
model = construct_model()
    with tf.Session() as sess:
        train_model(sess)
Run Code Online (Sandbox Code Playgroud)

但每次都得到不同的结果.

python random-seed tensorflow

7
推荐指数
1
解决办法
2050
查看次数

了解 tensorflow 内部/内部并行线程

我想更多地了解这两个参数:intra 和 inter op parallelism threads

session_conf = tf.ConfigProto(
  intra_op_parallelism_threads=1,
  inter_op_parallelism_threads=1)
Run Code Online (Sandbox Code Playgroud)

我读了这篇文章,其中有一个很好的解释:TensorFlow: inter- and intra-op parallelism configuration

但我正在寻求确认并在下面提出新问题。我在 keras 2.0.9、tensorflow 1.3.0 中运行我的任务:

  1. 当两者都设置为 1 时,是否意味着,例如在具有 4 个内核的计算机上,四个内核将只共享 1 个线程?
  2. 为什么在速度方面使用 1 个线程似乎对我的任务影响不大?我的网络具有以下结构:dropout、conv1d、maxpooling、lstm、globalmaxpooling、dropout、dense。上面引用的帖子说,如果有很多矩阵乘法和减法运算,使用多线程设置会有所帮助。我对下面的数学知之甚少,但我想我的模型中有很多这样的矩阵运算?但是,将两个参数从 0 设置为 1 只会在 10 分钟的任务中看到 1 分钟的减速。
  3. 为什么多线程可能是不可重现结果的来源?请参阅结果无法在 Python 中使用 Keras 和 TensorFlow 重现。这是我在做科学实验时需要使用单线程的主要原因。当然,随着时间的推移,tensorflow 一直在改进,为什么在发布中没有解决这个问题?

提前谢谢了

tensorflow

4
推荐指数
1
解决办法
4233
查看次数

构建 Keras 项目以在 GPU 中实现可重现的结果

我正在编写一个 tensorflow.Keras 包装器来执行 ML 实验。

我需要我的框架能够执行配置 yaml 文件中指定的实验并在 GPU 中并行运行。

然后我需要保证,如果我再次运行该实验,即使不是完全相同的结果,我也会得到相当接近的结果。

为了确保这一点,我的训练脚本在开头包含这些行,遵循官方文档中的指导原则:

# Set up random seeds
random.seed(seed)
np.random.seed(seed)
tf.set_random_seed(seed)
Run Code Online (Sandbox Code Playgroud)

这已被证明是不够的。

我运行了 4 次相同的配置,并绘制了结果:

在此处输入图片说明

如您所见,运行之间的结果差异很大。

如何在 Keras 中设置训练课程以确保在 GPU 中训练时获得相当相似的结果?这甚至可能吗?

可以在此处找到完整的培训脚本。

我的一些同事只使用纯 TF,他们的结果似乎更加一致。更重要的是,他们似乎没有播种任何随机性,只是为了确保训练和验证拆分始终相同。

python gpu random-seed keras tensorflow

2
推荐指数
1
解决办法
2530
查看次数

标签 统计

python ×3

tensorflow ×3

keras ×2

random-seed ×2

gpu ×1

numpy ×1

theano ×1