每次我imdb_lstm.py从Keras框架运行示例时,我得到不同的结果(测试准确性)(https://github.com/fchollet/keras/blob/master/examples/imdb_lstm.py)代码包含np.random.seed(1337)在顶部,在任何keras之前进口.它应该防止它为每次运行生成不同的数字.我错过了什么?
更新:如何重现:
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)
sess = tf.Session()在Tensorflow 2.0环境中执行命令时,出现如下错误消息:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'tensorflow' has no attribute 'Session'
Run Code Online (Sandbox Code Playgroud)
系统信息:
重现步骤:
安装:
执行:
我有一个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) 每次我在jupyter笔记本中使用Keras运行LSTM网络时,都会得到不同的结果,并且我在Google上搜索了很多,并且尝试了一些不同的解决方案,但是它们都不起作用,下面是我尝试过的一些解决方案:
设置numpy随机种子
random_seed=2017
from numpy.random import seed
seed(random_seed)
设置张量流随机种子
from tensorflow import set_random_seed
set_random_seed(random_seed)
设置内置随机种子
import random
random.seed(random_seed)
设置PYTHONHASHSEED
import os
os.environ['PYTHONHASHSEED'] = '0'
在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) 我有问题,我无法用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) 我通过keras为R在R中构建了一个图像分类模型.
精度达到98%左右,而python的准确性却很差.
R的Keras版本是2.1.3,而python是2.1.5
以下是R型号代码:
model=keras_model_sequential()
model=model %>%
layer_conv_2d(filters = 32,kernel_size = c(3,3),padding = 'same',input_shape = c(187,256,3),activation = 'elu')%>%
layer_max_pooling_2d(pool_size = c(2,2)) %>%
layer_dropout(.25) %>% layer_batch_normalization() %>%
layer_conv_2d(filters = 64,kernel_size = c(3,3),padding = 'same',activation = 'relu') %>%
layer_max_pooling_2d(pool_size = c(2,2)) %>%
layer_dropout(.25) %>% layer_batch_normalization() %>% layer_flatten() %>%
layer_dense(128,activation = 'relu') %>%
layer_dropout(.25)%>%
layer_batch_normalization() %>%
layer_dense(6,activation = 'softmax')
model %>%compile(
loss='categorical_crossentropy',
optimizer='adam',
metrics='accuracy'
)
Run Code Online (Sandbox Code Playgroud)
我尝试在python中使用相同的输入数据重建相同的模型.
虽然,性能完全不同.精度甚至低于30%
因为R keras正在为run keras调用python.使用相同的模型架构,它们应该获得类似的性能.
我想知道这个问题是否由preprocess引起,但仍然显示我的python代码:
model=Sequential()
model.add(Conv2D(32,kernel_size=(3,3),activation='relu',input_shape=(187,256,3),padding='same'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(BatchNormalization())
model.add(Conv2D(64, (3, 3), activation='relu',padding='same'))
model.add(MaxPooling2D(pool_size=(2, 2))) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 RStudio 的 Keras 界面使神经网络训练可重现。在 R 脚本 ( ) 中设置种子set.seed(42)似乎不起作用。是否可以将播种作为参数传递给layer_dense()?我可以选择RandomUniform作为初始值设定项,但我很难同时传递种子参数。以下行会引发错误:
model %>% layer_dense(units = 12, activation = 'relu', input_shape = c(8), kernel_initializer = "RandomUniform(seed=1)")
但是可以添加一个层而无需尝试传递种子参数:
model %>% layer_dense(units = 12, activation = 'relu', input_shape = c(8), kernel_initializer = "RandomUniform")
RandomUniform假设根据Keras 初始值设定项文档采用种子参数。
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) keras ×6
python ×5
tensorflow ×5
r ×2
random ×2
keras-layer ×1
lstm ×1
numpy ×1
python-3.x ×1
rstudio ×1
theano ×1