每次我在jupyter笔记本中使用Keras运行LSTM网络时,我得到了不同的结果,我搜索了很多,我尝试了一些不同的解决方案,但它们都不起作用,这里有一些我试过的解决方案:
设置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 notebook 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
这是我的代码:
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')
答案 0 :(得分:3)
您的模型定义中肯定缺少种子。可以在此处找到详细的文档:https://keras.io/initializers/。
本质上,您的图层使用随机变量作为其参数的基础。因此,每次都会得到不同的输出。
一个例子:
int main() {
static int i = 5;
if (--i) {
printf("%d ", i);
main();
}
}
Keras本身有一个关于在其FAQ部分中获得可重现结果的部分:(https://keras.io/getting-started/faq/#how-can-i-obtain-reproducible-results-using-keras-during-development)。它们具有以下代码片段以产生可重现的结果:
model.add(Dense(1, activation='linear',
kernel_initializer=keras.initializers.RandomNormal(seed=1337),
bias_initializer=keras.initializers.Constant(value=0.1))
答案 1 :(得分:0)
Keras + Tensorflow。
第1步,禁用GPU。
import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = ""
第2步,植入代码中包含的库,例如“ tensorflow,numpy,random”。
import tensorflow as tf
import numpy as np
import random as rn
sd = 1 # Here sd means seed.
np.random.seed(sd)
rn.seed(sd)
os.environ['PYTHONHASHSEED']=str(sd)
from keras import backend as K
config = tf.ConfigProto(intra_op_parallelism_threads=1,inter_op_parallelism_threads=1)
tf.set_random_seed(sd)
sess = tf.Session(graph=tf.get_default_graph(), config=config)
K.set_session(sess)
确保这两段代码都包含在代码的开头,那么结果将是可重复的。
答案 2 :(得分:0)
我通过添加 os.environ['TF_DETERMINISTIC_OPS'] = '1'
这里有一个例子:
import os
os.environ['TF_DETERMINISTIC_OPS'] = '1'
#rest of the code
#TensorFlow version 2.3.1