【问题标题】:Reproduce same results on each run - Keras, Google Colab每次运行都重现相同的结果 - Keras,Google Colab
【发布时间】:2020-05-19 08:44:54
【问题描述】:

我在 Google Colab(使用 GPU)中运行以下代码:

import random
random.seed(1)
import numpy as np
from numpy.random import seed
seed(1)
from tensorflow import set_random_seed
set_random_seed(2)
import pandas as pd
from keras.layers.convolutional import Conv2D, MaxPooling2D
from keras.layers import Flatten, Dense, Lambda, SimpleRNN
from keras.optimizers import *
from keras.utils import np_utils
from keras.initializers import *
from sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score, roc_auc_score, auc, precision_recall_curve
from sklearn.metrics import confusion_matrix
from keras.callbacks import EarlyStopping
from keras import backend as K
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)


##Loading dataset train and validation files, the files are same for every run

es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=5)

print("***********************************************************************************************")

def make_model():
    model = Sequential()        
    model.add(Conv2D(10,(5,5), kernel_initializer=glorot_uniform(seed=1), input_shape = (22,10,1), use_bias = True, activation = "relu", strides = 1, padding = "valid"))
    model.add(MaxPooling2D(pool_size=(2,2)))    
    model.add(Flatten())
    model.add(Dense(20, kernel_initializer=glorot_uniform(seed=1), activation = "relu"))
    model.add(Lambda(lambda x: tf.expand_dims(x, axis=1)))
    model.add(SimpleRNN(20, kernel_initializer=glorot_uniform(seed=1), activation="relu",return_sequences=False))
    model.add(Dense(1, kernel_initializer=glorot_uniform(seed=1), activation="sigmoid"))    
    opti = SGD(lr = 0.01)
    model.compile(loss = "binary_crossentropy", optimizer = opti, metrics = ["accuracy"])

    return model

model = make_model()
model.fit(x_train, y_train, validation_data = (x_validation,y_validation), epochs = 50, batch_size = 20, verbose = 2, callbacks=[es])

尽管设置了所有种子值,但我对model 的预测结果在后续运行中有所不同。模型的训练和测试在同一个 Colab 单元中进行。

【问题讨论】:

标签: tensorflow google-colaboratory keras-layer tf.keras reproducible-research


【解决方案1】:

您正在处理在不同线程上相乘和相加的浮点数,因此可能以不同的顺序发生。浮点加法和乘法不可交换。见What Every Computer Scientist Should Know About Floating-Point Arithmetic

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 2011-08-07
    • 2020-01-28
    • 1970-01-01
    • 2012-05-02
    • 2016-07-31
    相关资源
    最近更新 更多