【问题标题】:neural network: Why is my code not reproducible?神经网络:为什么我的代码不可重现?
【发布时间】:2020-05-02 12:24:43
【问题描述】:

我认为我的神经网络可以重现,但事实并非如此!结果没有显着差异,但例如损失与一次运行相差约 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)

我认为我可以通过前几行使其可重现...有人可以帮忙吗?我用谷歌搜索了很多,但没有任何帮助。有一点点差异是正常的吗?我想让它完全(!)可重现。

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

【问题讨论】:

    标签: python tensorflow keras neural-network


    【解决方案1】:

    我建议你this

    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)
    

    【讨论】:

      【解决方案2】:

      我在这里使用 Outcast 的一个版本的答案:Why can't I get reproducible results in Keras even though I set the random seeds?

          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)
      

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

      【讨论】:

      • 谢谢,我尝试了其他答案的建议,所以我不能说它是否有效 :) 但谢谢!
      猜你喜欢
      • 1970-01-01
      • 2018-01-26
      • 2018-02-05
      • 2013-05-12
      • 2020-03-30
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多