相关疑难解决方法(0)

在Tensorflow后端运行Keras时如何获得可重现的结果

每次我在jupyter笔记本中使用Keras运行LSTM网络时,都会得到不同的结果,并且我在Google上搜索了很多,并且尝试了一些不同的解决方案,但是它们都不起作用,下面是我尝试过的一些解决方案:

  1. 设置numpy随机种子

    random_seed=2017 from numpy.random import seed seed(random_seed)

  2. 设置张量流随机种子

    from tensorflow import set_random_seed set_random_seed(random_seed)

  3. 设置内置随机种子

    import random random.seed(random_seed)

  4. 设置PYTHONHASHSEED

    import os os.environ['PYTHONHASHSEED'] = '0'

  5. 在jupyter笔记本kernel.json中添加PYTHONHASHSEED

    { "language": "python", "display_name": "Python 3", "env": {"PYTHONHASHSEED": "0"}, "argv": [ "python", "-m", "ipykernel_launcher", "-f", "{connection_file}" ] }

我的环境版本是:

Keras: 2.0.6
Tensorflow: 1.2.1
CPU or GPU: CPU
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

model = Sequential()
model.add(LSTM(16, input_shape=(time_steps,nb_features), return_sequences=True))
model.add(LSTM(16, input_shape=(time_steps,nb_features), return_sequences=False))
model.add(Dense(8,activation='relu'))        
model.add(Dense(1,activation='linear'))
model.compile(loss='mse',optimizer='adam')
Run Code Online (Sandbox Code Playgroud)

deep-learning lstm keras tensorflow

8
推荐指数
1
解决办法
5008
查看次数

使用Python中的Keras和TensorFlow无法重现结果

我有问题,我无法用Keras和ThensorFlow重现我的结果.

似乎最近在Keras文档站点上发布了针对此问题的解决方法,但不知何故,它对我不起作用.

我做错了什么?

我正在MBP Retina上使用Jupyter笔记本(没有Nvidia GPU).

# ** Workaround from Keras Documentation **

import numpy as np
import tensorflow as tf
import random as rn

# The below is necessary in Python 3.2.3 onwards to
# have reproducible behavior for certain hash-based operations.
# See these references for further details:
# https://docs.python.org/3.4/using/cmdline.html#envvar-PYTHONHASHSEED
# https://github.com/fchollet/keras/issues/2280#issuecomment-306959926

import os
os.environ['PYTHONHASHSEED'] = '0'

# The below is necessary for starting Numpy generated random numbers
# in a well-defined initial state.

np.random.seed(42)

# …
Run Code Online (Sandbox Code Playgroud)

python random python-3.x keras tensorflow

8
推荐指数
1
解决办法
2715
查看次数

使用带有TensorFlow后端的Keras重现结果

我正在使用Keras构建一个深度学习LSTM模型,使用TensorFlow后端.每次运行模型时,结果都不同.有没有办法修复种子以产生可重复的结果?谢谢!

python-3.x random-seed keras tensorflow

8
推荐指数
2
解决办法
3087
查看次数

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

相同的代码,在windows/ubuntu(Keras/Tensorflow)上的准确度非常不同

import pandas as pd
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
from keras.layers import LSTM
from keras.optimizers import Adam
from sklearn.preprocessing import MinMaxScaler

def create_dataset(dataset, datasetClass, look_back):
    dataX, dataY = [], []
    for i in range(len(dataset)-look_back-1):
        a = dataset[i:(i+look_back), 0]
        dataX.append(a)
        dataY.append(datasetClass[:,(i+look_back):(i+look_back+1)])

    return np.array(dataX), np.array(dataY)

def one_hot_encode(dataset):
    data = np.zeros((11, len(dataset)),dtype='int')
    for i in range(len(dataset)):
        data[dataset[i]-1,i] = 1
    return data

#Set a seed for repeatable results
np.random.seed(12)


dataframe = pd.read_csv('time-series.csv', usecols=[1], …
Run Code Online (Sandbox Code Playgroud)

windows ubuntu keras tensorflow

5
推荐指数
1
解决办法
609
查看次数

Tensorflow-Keras reproducibility problem on Google Colab

I have a simple code to run on Google Colab (I use CPU mode):

import numpy as np
import pandas as pd

## LOAD DATASET

datatrain = pd.read_csv("gdrive/My Drive/iris_train.csv").values
xtrain = datatrain[:,:-1]
ytrain = datatrain[:,-1]

datatest = pd.read_csv("gdrive/My Drive/iris_test.csv").values
xtest = datatest[:,:-1]
ytest = datatest[:,-1]

import tensorflow as tf
from tensorflow.keras.layers import Dense, Activation
from tensorflow.keras.utils import to_categorical

## SET ALL SEED

import os
os.environ['PYTHONHASHSEED']=str(66)

import random
random.seed(66)

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

from tensorflow.keras import backend as K
session_conf = tf.ConfigProto(intra_op_parallelism_threads=1, inter_op_parallelism_threads=1) …
Run Code Online (Sandbox Code Playgroud)

reproducible-research tensorflow google-colaboratory

5
推荐指数
1
解决办法
4394
查看次数

Tensorflow:相同随机种子的不同结果

我正在 tensorflow 中实现的健身房环境(BipedalWalker-v2)中运行强化学习程序。我手动设置了环境的随机种子,tensorflow 和 numpy 如下

os.environ['PYTHONHASHSEED']=str(42)
random.seed(42)
np.random.seed(42)
tf.set_random_seed(42)

env = gym.make('BipedalWalker-v2')
env.seed(0)

config = tf.ConfigProto(intra_op_parallelism_threads=1, inter_op_parallelism_threads=1)
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)
# run the graph with sess
Run Code Online (Sandbox Code Playgroud)

但是,每次运行我的程序时都会得到不同的结果(不更改任何代码)。为什么结果不一致,如果我想获得相同的结果应该怎么做?


更新:

我能想到的唯一可能引入随机性的地方(神经网络除外)是

  1. tf.truncated_normal用来生成随机噪声epsilon以实现噪声层
  2. 我用来np.random.uniform从重放缓冲区中随机选择样本

我还发现我在前 10 集中得到的分数非常一致,但随后开始有所不同。损失等其他因素也显示出类似的趋势,但在数字上并不相同。

更新 2

我还设置了“PYTHONHASHSEED”并按照@jaypops96 的描述使用单线程 CPU,但仍然无法重现结果。上面代码块中的代码已经更新

python random random-seed tensorflow openai-gym

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

如果 Keras 结果不可重复,那么比较模型和选择超参数的最佳做法是什么?

更新:这个问题是针对 Tensorflow 1.x 的。我升级到 2.0 并且(至少在下面的简单代码中)重现性问题似乎已在 2.0 上解决。这样就解决了我的问题;但我仍然很好奇 1.x 上针对此问题使用了哪些“最佳实践”。

在 keras/tensorflow 上训练完全相同的模型/参数/数据不会给出可重复的结果,并且每次训练模型时损失都显着不同。有很多关于此的 stackoverflow 问题(例如,如何在 keras 中获得可重现的结果),但推荐的解决方法似乎对我或 StackOverflow 上的许多其他人不起作用。好的,就是这样。

但是考虑到 keras 在张量流上的不可重复性的限制——比较模型和选择超参数的最佳实践是什么?我正在测试不同的架构和激活,但由于每次的损失估计都不同,我永远不确定一个模型是否比另一个更好。是否有处理此问题的最佳做法?

我认为这个问题与我的代码没有任何关系,但以防万一;这是一个示例程序:

import os
#stackoverflow says turning off the GPU helps reproducibility, but it doesn't help for me
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = ""
os.environ['PYTHONHASHSEED']=str(1)

import tensorflow as tf
import tensorflow.keras as keras
import tensorflow.keras.layers 
import random
import pandas as pd
import numpy as np

#StackOverflow says this is needed for reproducibility but it doesn't help for …
Run Code Online (Sandbox Code Playgroud)

python reproducible-research keras tensorflow

3
推荐指数
2
解决办法
2231
查看次数