I have the following Keras/TensorFlow code:
my_initializer = keras.initializers.RandomNormal(mean=0.0, stddev=0.05, seed=1)
my_model = keras.models.Sequential([
keras.layers.Dense(200, kernel_initializer=my_initializer, bias_initializer=my_initializer, activation="relu",input_shape=[len(features)]),
keras.layers.Dense(100, kernel_initializer=my_initializer, bias_initializer=my_initializer, activation="relu"),
keras.layers.Dense(50, kernel_initializer=my_initializer, bias_initializer=my_initializer, activation="relu"),
keras.layers.Dense(25, kernel_initializer=my_initializer, bias_initializer=my_initializer, activation="relu"),
keras.layers.Dense(1, kernel_initializer=my_initializer, bias_initializer=my_initializer)
])
my_model.compile(loss="mean_squared_error", optimizer="adam")
history = my_model.fit(train, train_y, epochs=70, batch_size=32)
As far as I know, I always run it with the same training data. After training, I print model parameters:
for layer in my_model.layers: print(layer.get_config(), layer.get_weights())
After every training, the parameters are different and the trained model produces different results on the validation data (the difference is 5-10% on each validation example; the overal performance is much more stable).
As far as I know, I do not use dropout (at list I did not enable it explicitly). Initial model parameter values are initialized with a seed (see the code).
Does anyone have any idea what could be wrong? I am relatively new to neural nets.