我在model_path中保存了一个受过训练的模型,并且我希望从固定的数据状态开始,多次对一组固定的数据进行训练。如果我在相同的固定训练数据集上运行相同的优化,并且明确定义了Python,Numpy和Tensorflow的随机种子生成器,那么我期望在相同的测试集上获得相同的结果。我按照Keras FAQ上有关可重复结果的说明进行操作,但这似乎无济于事。
我的模型是一堆relus和顶部的线性层。没有批次规范化或退出。随机性的唯一来源可能是He权重初始化,但由于我已经训练了加载的模型,所以它实际上并没有出现。
for i in range(3):
# set random seeds
tf.set_random_seed(42)
np.random.seed(42)
random.seed(42)
# get training and test data
x_test = scaler.transform(df.iloc[150:350,0:12].values)
y_test = df.iloc[150:350,12].values
X = scaler.transform(df.iloc[0:150,0:12].values)
Y = df.iloc[0:150,12].values
# load and fit model
model = load_model(model_path)
model.compile(loss='mae', optimizer='adam')
_ = model.fit(X, Y, batch_size=150, epochs=20, verbose=0, shuffle=False)
# evaluate model
mae = model.evaluate(x=x_test, y=y_test, steps=test_amount//50, verbose=0)
print('MAE: ', mae)
K.clear_session()
tf.reset_default_graph()
这将导致:
MAE: 12.2394380569458
MAE: 12.65652847290039
MAE: 9.243626594543457
此外,我没有在GPU上运行。 造成这些差异的原因是什么?
答案 0 :(得分:-1)
尝试将优化程序从'adam'
更改为SGD。我遇到了完全相同的问题,这解决了。