我是神经网络新手,目前正在使用 TensorFlow。对于一个实验,我想构建一个模型,该模型对于相同的输入始终产生相同的输出。然而,我最初尝试使用一个简单的测试并将
batch_size
设置为等于训练数据的大小并没有实现此目标:
model = keras.Sequential([keras.layers.Dense(1)])
model.compile( loss="MSE", metrics=[keras.metrics.BinaryAccuracy()])
model.fit(
training_inputs,
training_targets,
epochs=5,
batch_size=1000,
validation_data=(val_inputs, val_targets)
)
我怀疑默认优化器
SGD
(随机梯度下降)可能会导致随机输出。
我的问题是:
SGD
)之外,上述代码中是否还有其他因素可以在上述神经网络模型的输出中引入随机性?感谢您的协助。
除了默认优化器(SGD)之外,上述代码中是否还有其他因素可以在上述神经网络模型的输出中引入随机性?
另外两个因素是层权重将使用随机值初始化;数据洗牌(如果启用)也将是随机性的来源。
如何修改提供的代码以确保模型针对相同的输入产生相同的输出?
在脚本开始时为各种随机数生成器设置随机种子:
import numpy as np
import random
import tensorflow as tf
#Set seeds for consistent results each run
seed_value = 0
np.random.seed(seed_value)
random.seed(seed_value)
tf.random.set_seed(seed_value)
如果您在笔记本中工作,并且多次运行某个单元(在上面的播种之外),那么如果该单元依赖于随机生成器,则该单元的每次运行都会给您不同的结果。因此,请确保将种子也放置在该单元格内。这样,每次运行单元时,它将在同一位置初始化。
可能也值得一看 this 答案,了解有关设置
PYTHONHASHSEED
环境变量的注释。我不需要配置它。您的用例可能需要也可能不需要它。