нейронная сеть: почему мой код не воспроизводится? - PullRequest
0 голосов
/ 02 мая 2020

Я думал, что моя нейронная сеть будет воспроизводимой, но это не так! Результаты не сильно отличаются друг от друга, но, например, потеря составляет около 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)

Я думал, что я сделаю его воспроизводимым с помощью первых нескольких строк ... Может кто-нибудь помочь? Я много гуглил, но ничего не помогало. Это просто нормально, что есть небольшая разница? Я хотел бы сделать это точно (!) Воспроизводимым.

Кстати, пожалуйста, игнорируйте мои комментарии в коде ... я немец :) и вы должны знать, что я новичок в нейронных сетях!

Ответы [ 2 ]

1 голос
/ 02 мая 2020

Я предлагаю вам это

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)
0 голосов
/ 02 мая 2020

Я использую версию ответа 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)

Если это не работает попробуйте установить глобальное начальное число scikitlearn: https://github.com/scikit-learn/scikit-learn/issues/10237

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...