import keras
def get_model():
model = keras.Sequential()
model.add(keras.layers.Dense(1))
model.compile(
optimizer=keras.optimizers.RMSprop(learning_rate=0.1),
loss="mean_squared_error",
metrics=["mean_absolute_error"],
)
return model
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
x_train = x_train.reshape(-1, 784).astype("float32") / 255.0
x_test = x_test.reshape(-1, 784).astype("float32") / 255.0
x_train = x_train[:1000]
y_train = y_train[:1000]
x_test = x_test[:1000]
y_test = y_test[:1000]
class CustomCallback(keras.callbacks.Callback):
def __init__(self, x, y):
super().__init__()
self.x = x
self.y = y
def on_epoch_end(self, epoch, logs=None):
y_pred = self.model.predict(self.x, verbose=0)
score = self.model.compute_metrics(self.x, self.y, y_pred, sample_weight=None)
print()
print(score)
model = get_model()
model.fit(
x_train,
y_train,
batch_size=256,
epochs=5,
verbose=1,
callbacks=[CustomCallback(x_train, y_train)],
)
Epoch 1/5
1/4 ━━━━━━━━━━━━━━━━━━━━ 1s 526ms/step - loss: 25.3436 - mean_absolute_error: 4.2441
{'loss': 242.523193359375, 'mean_absolute_error': 6.016280174255371}
4/4 ━━━━━━━━━━━━━━━━━━━━ 1s 57ms/step - loss: 256.4755 - mean_absolute_error: 10.3880
Epoch 2/5
1/4 ━━━━━━━━━━━━━━━━━━━━ 0s 27ms/step - loss: 6.6658 - mean_absolute_error: 2.1646
{'loss': 6.03378438949585, 'mean_absolute_error': 1.8999731540679932}
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step - loss: 6.2043 - mean_absolute_error: 2.0708
Epoch 3/5
1/4 ━━━━━━━━━━━━━━━━━━━━ 0s 24ms/step - loss: 4.1691 - mean_absolute_error: 1.6324
{'loss': 4.564587593078613, 'mean_absolute_error': 1.7218464612960815}
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 4.4746 - mean_absolute_error: 1.7039
Epoch 4/5
1/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - loss: 4.4333 - mean_absolute_error: 1.7299
{'loss': 4.227972030639648, 'mean_absolute_error': 1.6317805051803589}
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 4.2346 - mean_absolute_error: 1.6612
Epoch 5/5
1/4 ━━━━━━━━━━━━━━━━━━━━ 0s 24ms/step - loss: 3.7971 - mean_absolute_error: 1.5549
{'loss': 5.39981746673584, 'mean_absolute_error': 2.682666063308716}
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 42ms/step - loss: 4.6834 - mean_absolute_error: 1.7220
<keras.src.callbacks.history.History at 0x7fa5642bba60>
- About printing log, why printing caused in the middle of epoch, when it should be after finishing the epoch.
Epoch 1/5
1/4 ━━━━━━━━━━━━━━━━━━━━ 1s 526ms/step - loss: 25.3436 - mean_absolute_error: 4.2441
{'loss': 242.523193359375, 'mean_absolute_error': 6.016280174255371}
4/4 ━━━━━━━━━━━━━━━━━━━━ 1s 57ms/step - loss: 256.4755 - mean_absolute_error: 10.3880
- About score, it should match but callback gives loss 242 and logs gives 256 - callback gives mae 6.01 and log gives 10.3.