相关疑难解决方法(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万
查看次数

TensorFlow:不可重复的结果

问题

我有一个Python脚本,它使用TensorFlow创建一个多层感知器网络(带有丢失),以便进行二进制分类.即使我一直小心设置Python和TensorFlow种子,但我得到了不可重复的结果.如果我跑一次然后再跑,我会得到不同的结果.我甚至可以运行一次,退出Python,重新启动Python,再次运行并获得不同的结果.

我试过的

我知道有些人发布了关于在TensorFlow中获得不可重复结果的问题(例如,"如何获得稳定的结果...","set_random_seed无效......","如何在TensorFlow中获得可重现的结果"),以及答案通常被证明是错误的使用/理解tf.set_random_seed().我已经确保实施所提供的解决方案,但这并没有解决我的问题.

一个常见的错误是没有意识到这tf.set_random_seed()只是一个图级别的种子,并且多次运行脚本会改变图形,解释不可重复的结果.我使用以下语句打印出整个图表并验证(通过差异)即使结果不同,图表也是相同的.

print [n.name for n in tf.get_default_graph().as_graph_def().node]
Run Code Online (Sandbox Code Playgroud)

我也使用函数调用,tf.reset_default_graph()tf.get_default_graph().finalize()避免对图形进行任何更改,即使这可能是过度杀伤.

(相关)守则

我的脚本长约360行,所以这里是相关的行(显示了剪切代码).ALL_CAPS中的任何项目都是在Parameters下面的块中定义的常量.

import numpy as np
import tensorflow as tf

from copy import deepcopy
from tqdm import tqdm  # Progress bar

# --------------------------------- Parameters ---------------------------------
(snip)

# --------------------------------- Functions ---------------------------------
(snip)

# ------------------------------ Obtain Train Data -----------------------------
(snip)

# ------------------------------ Obtain Test Data -----------------------------
(snip)

random.seed(12345)
tf.set_random_seed(12345)

(snip)

# ------------------------- Build the …
Run Code Online (Sandbox Code Playgroud)

python random tensorflow

13
推荐指数
2
解决办法
5630
查看次数

标签 统计

python ×3

tensorflow ×3

numpy ×1

random ×1