[Python] How to have reproducibility with Keras, Tensorflow?

Discussão em 'Python' iniciado por Stack, Fevereiro 5, 2025.

  1. Stack

    Stack Membro Participativo

    I am not getting the same accuracy and loss each time I run the following code. I followed the instructions from previous posts, but I couldn't resolve it. What could be the problem?

    import os
    os.environ['TF_ENABLE_ONEDNN_OPTS'] = '0'
    os.environ["TF_DETERMINISTIC_OPS"] = "1"
    os.environ["TF_CUDNN_DETERMINISTIC"] = "1"
    ...
    ...

    SEED=65
    tf.keras.utils.set_random_seed(SEED)
    tf.config.experimental.enable_op_determinism()
    random.seed(SEED)
    np.random.seed(SEED)
    tf.random.set_seed(SEED)

    training, test, trainingtarget, testtarget = train_test_split((df.loc[:,"input_alarm_1":"input_alarm_"+str(num_backtracking_events)]), df.loc[:,"output_failure"], test_size=0.25, random_state=SEED)

    training = np.asarray(training).astype('float32')
    trainingtarget = np.asarray(trainingtarget).astype('float32')
    test = np.asarray(test).astype('float32')
    testtarget = np.asarray(testtarget).astype('float32')

    initializer = tf.keras.initializers.GlorotUniform(seed=SEED)

    model = keras.Sequential(
    [
    layers.Dense(600, activation="relu", input_shape=(num_backtracking_events,), kernel_initializer=initializer),
    layers.Dense(300, activation="relu", kernel_initializer=initializer),
    layers.Dense(100, activation="relu", kernel_initializer=initializer),
    layers.Dense(1, activation="sigmoid", kernel_initializer=initializer),
    #dropout?
    ]
    )

    #compile model
    model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])

    #fit
    history = model.fit(training, trainingtarget, batch_size=10, epochs=50, validation_split=0.1)

    # evaluate the keras model
    test_loss, test_acc = model.evaluate(test, testtarget)
    print('Accuracy: %.2f' % (test_acc*100))
    print('Loss: %.2f' % (test_loss*100))

    Continue reading...

Compartilhe esta Página