У меня есть обученная модель, сохраненная в model_path, и я хочу продолжить ее обучение на фиксированном наборе данных несколько раз, каждый раз начиная с состояния, в котором она была сохранена. Если я выполню одну и ту же оптимизацию для одного и того же фиксированного набора обучающих данных с явным определением генераторов случайных начальных чисел для Python, Numpy и Tensorflow, я ожидаю те же результаты в том же наборе тестов. Я следовал инструкциям Keras FAQ по воспроизводимым результатам, и это, похоже, не помогло.
Моя модель представляет собой стопку флюса и линейный слой сверху. Нет нормализации партии или отсева. Единственным источником случайности может быть инициализация веса 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.
Что скрывает эти различия?