相关疑难解决方法(0)

如何使用TensorFlow获得稳定的结果,设置随机种子

我试图用不同的参数多次运行神经网络,以便校准网络参数(丢失概率,学习率ed).但是我遇到的问题是,当我在循环中运行网络时,运行网络同时保持参数相同仍然给我一个不同的解决方案,如下所示:

filename = create_results_file()
for i in range(3):
  g = tf.Graph()
  with g.as_default():
    accuracy_result, average_error = network.train_network(
        parameters, inputHeight, inputWidth, inputChannels, outputClasses)
    f, w = get_csv_writer(filename)
    w.writerow([accuracy_result, "did run %d" % i, average_error])
    f.close()
Run Code Online (Sandbox Code Playgroud)

在设置网络的图层和错误功能之前,我在train_network函数的开头使用以下代码:

np.random.seed(1)
tf.set_random_seed(1)
Run Code Online (Sandbox Code Playgroud)

我还尝试在创建TensorFlow图形之前添加此代码,但我在结果输出中不断获得不同的解决方案.

我正在使用AdamOptimizer并使用初始化网络权重tf.truncated_normal.此外,我正在使用np.random.permutation为每个纪元改变传入的图像.

python numpy tensorflow

56
推荐指数
6
解决办法
3万
查看次数

Tensorflow`set_random_seed`无效

打电话tf.set_random_seed(SEED)没影响,我可以告诉......

例如,在IPython笔记本中多次运行下面的代码每次都会产生不同的输出:

import tensorflow as tf
tf.set_random_seed(42)
sess = tf.InteractiveSession()
a = tf.constant([1, 2, 3, 4, 5])
tf.initialize_all_variables().run()
a_shuf = tf.random_shuffle(a)
print(a.eval())
print(a_shuf.eval())
sess.close()
Run Code Online (Sandbox Code Playgroud)

如果我明确设置种子:a_shuf = tf.random_shuffle(a, seed=42),每次运行后输出都是相同的.但是,如果我已经打电话,为什么我需要设置种子tf.set_random_seed(42)


使用numpy的等效代码正常工作:

import numpy as np
np.random.seed(42)
a = [1,2,3,4,5]
np.random.shuffle(a)
print(a)
Run Code Online (Sandbox Code Playgroud)

python tensorflow

15
推荐指数
1
解决办法
1万
查看次数

哪些种子必须设置在哪里实现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
查看次数

如何在张量流中“重置”随机序列

我有一个包含 GB 变量的图和一个随机函数(例如 VAE)。我希望能够运行一个函数,并且始终使用相同的随机序列(例如,输入大量的 x,并且始终获得完全相同的 z 和 y)。

我可以使用随机种子来实现这一点,这样每次从头开始运行脚本(即初始化会话)时我总是得到相同的序列。不过,我希望能够在不破坏会话的情况下重置随机序列,这样我就可以一遍又一遍地调用我的函数(并获得相同的序列)。销毁并重新初始化会话并不是很理想,因为我丢失了 GB 的变量,并且每次重新加载都是浪费。再次设置随机种子(tf.set_random_seed)似乎没有影响(我认为来自 tf.set_random_seed 的种子以某种方式与操作种子结合并在创建时烘焙到操作中?)

有没有办法解决?

我已经阅读了有关张量流中随机种子的文档和大量帖子(例如TensorFlow:将种子重置为常量值不会产生重复结果Tensorflow `set_random_seed` 不起作用TensorFlow:不可重复结果如何获得Tensorflow 中可重现的结果如何使用 TensorFlow 获得稳定的结果,设置随机种子)但是我无法得到我想要的行为。

例如玩具代码

import tensorflow as tf
tf.set_random_seed(0)
a = tf.random_uniform([1], seed=1)

def foo(s, a, msg):
    with s.as_default(): print msg, a.eval(), a.eval(), a.eval(), a.eval()


s = tf.Session()
foo(s, a, 'run1 (first session):')

# resetting seed does not reset sequence. is there anything else I can do?
tf.set_random_seed(0)
foo(s, a, 'run2 …
Run Code Online (Sandbox Code Playgroud)

python random deterministic tensorflow

5
推荐指数
0
解决办法
532
查看次数

标签 统计

python ×4

tensorflow ×4

deterministic ×1

numpy ×1

random ×1

random-seed ×1