神经网络:为什么我的代码不可复制



我以为我的神经网络是可复制的,但事实并非如此!结果没有显著差异,但例如损失与一次运行相差约0.1。这是我的密码!

# Code reproduzierbar machen
from numpy.random import seed
seed(0)
from tensorflow import set_random_seed
set_random_seed(0)
# Importiere Datasets (Training und Test)
import pandas as pd
poker_train = pd.read_csv("C:/Users/elihe/Documents/Studium Master/WS 19 und 20/Softwareprojekt/poker-hand-training-true.data")
poker_test = pd.read_csv("C:/Users/elihe/Documents/Studium Master/WS 19 und 20/Softwareprojekt/poker-hand-testing.data")
from sklearn.preprocessing import OneHotEncoder
# Trainings- und Testset in Input und Output verwandeln
X_tr = poker_train.iloc[:, 0:10].values
y_tr = poker_train.iloc[:, 10:11].values
X_te = poker_test.iloc[:, 0:10].values
y_te = poker_test.iloc[:, 10:11].values
# Output in 0-1-Vektoren verwandeln
encode = OneHotEncoder(categories = 'auto')
y_train = encode.fit_transform(y_tr).toarray()
y_test = encode.fit_transform(y_te).toarray()
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_tr)
X_test = sc.transform(X_te)
# NN mit Keras erstellen
import keras
from keras.models import Sequential
from keras.layers import Dense
nen.add(Dense(400, input_dim = 10, activation = 'sigmoid'))
nen.add(Dense(400, activation = 'sigmoid'))
nen.add(Dense(10, activation = 'softmax'))
from keras.optimizers import RMSprop
nen.compile(loss='binary_crossentropy', optimizer=RMSprop(0.001), metrics=['accuracy'])
nen_fit = nen.fit(X_train, y_train,epochs=30, batch_size=15, verbose=1, validation_split = 0.2, shuffle = False)

我想我用前几行让它重现。。。有人能帮忙吗?我在谷歌上搜索了很多,但都无济于事。有一点不同是正常的吗?我想让它完全(!(可复制。

顺便说一句,请忽略我在代码中的评论。。我是德国人:(你必须知道我是神经网络的新手!

我建议你这个

import numpy as np
import random as rn
import tensorflow as tf
import keras
from keras import backend as K
#-----------------------------Keras reproducible------------------#
SEED = 1234
tf.set_random_seed(SEED)
os.environ['PYTHONHASHSEED'] = str(SEED)
np.random.seed(SEED)
rn.seed(SEED)
session_conf = tf.ConfigProto(
intra_op_parallelism_threads=1, 
inter_op_parallelism_threads=1
)
sess = tf.Session(
graph=tf.get_default_graph(), 
config=session_conf
)
K.set_session(sess)

我在这里使用Outcast的答案:为什么可以';即使我设置了随机种子,我在Keras中也能得到可重复的结果吗?

import os
import random
import numpy as np
seed_value = 1
# 1. Set `PYTHONHASHSEED` environment variable at a fixed value
os.environ['PYTHONHASHSEED'] = str(seed_value)
# 2. Set `python` built-in pseudo-random generator at a fixed value
random.seed(seed_value)
# 3. Set `numpy` pseudo-random generator at a fixed value
np.random.seed(seed_value)

如果不起作用,请尝试设置scikitslearn全球种子:https://github.com/scikit-learn/scikit-learn/issues/10237

最新更新