keras 为什么不能用相同的结果重复训练模型?

ss2ws0br  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(124)

我试图复制我的模型的结果。但是每次运行它,结果都不一样(即使重新启动google colab的运行时)。这是模型

# set random seed
tf.random.set_seed(42)

# 1. Create the model
model_1 = tf.keras.models.Sequential([
    tf.keras.layers.Dense(1, input_shape=[1])
    ])

# 2. Compile the model
model_1.compile(loss=tf.keras.losses.mae,
            optimizer=tf.keras.optimizers.SGD(),
            metrics=["mae"])

# 3. Fit the model
model_1.fit(X_train, y_train, epochs=100)

X_trainy_train是两个Tensor,每个Tensor都有shape=(40,)dtype=int32

# 4. make a prediction
y_pred = model.predict(X_test)

# 5. mean absolute error
mae = tf.metrics.mean_absolute_error(y_true=y_test,
                                     y_pred=tf.squeeze(tf.constant(y_pred)))

X_testy_test是两个Tensor,每个Tensor都有shape=(10,)dtype=int32
现在,每次运行上面的代码时,我都会得到mae的不同值,例如:8.63,21.26,14.96,14.93,14.84,...
我期望得到相同的运行,因为我在构建和训练模型之前设置了随机种子。
如何准确再现模特的表现?

vojdkbi0

vojdkbi01#

由于您正在使用Keras,因此可能会有不同的种子。这是记录here
Keras有一个功能来设置这些种子:

# Set the seed using keras.utils.set_random_seed. This will set:
# 1) `numpy` seed
# 2) `tensorflow` random seed
# 3) `python` random seed
keras.utils.set_random_seed(812)

也许你还需要:

# This will make TensorFlow ops as deterministic as possible, but it will
# affect the overall performance, so it's not enabled by default.
# `enable_op_determinism()` is introduced in TensorFlow 2.9.
tf.config.experimental.enable_op_determinism()

相关问题