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

Tensorflow 2.0-AttributeError:模块'tensorflow'没有属性'Session'

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)

系统信息:

  • 操作系统平台和发行版:Windows 10
  • python版本:3.7.1
  • Tensorflow版本:2.0.0-alpha0(随pip一起安装)

重现步骤:

安装:

  1. 点安装-升级点
  2. pip install tensorflow == 2.0.0-alpha0
  3. 点安装keras
  4. 点安装numpy == 1.16.2

执行:

  1. 执行命令:将tensorflow导入为tf
  2. 执行命令:sess = tf.Session()

python keras tensorflow tensorflow2.0

29
推荐指数
4
解决办法
4万
查看次数

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
查看次数

在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
查看次数

R中python keras和keras之间的准确度不同

我通过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)

python r keras

6
推荐指数
1
解决办法
170
查看次数

使用 RStudio 的 Keras 界面使神经网络训练可重现

我正在尝试使用 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 初始值设定项文档采用种子参数。

r rstudio keras keras-layer

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

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
查看次数