Files
keras-team--keras/integration_tests/tf_custom_fit_test.py
T
2026-07-13 12:20:15 +08:00

51 lines
1.5 KiB
Python

import numpy as np
import tensorflow as tf
import keras
def test_custom_fit():
class CustomModel(keras.Model):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.loss_tracker = keras.metrics.Mean(name="loss")
self.mae_metric = keras.metrics.MeanAbsoluteError(name="mae")
self.loss_fn = keras.losses.MeanSquaredError()
def train_step(self, data):
x, y = data
with tf.GradientTape() as tape:
y_pred = self(x, training=True)
loss = self.loss_fn(y, y_pred)
trainable_vars = self.trainable_variables
gradients = tape.gradient(loss, trainable_vars)
self.optimizer.apply(gradients, trainable_vars)
self.loss_tracker.update_state(loss)
self.mae_metric.update_state(y, y_pred)
return {
"loss": self.loss_tracker.result(),
"mae": self.mae_metric.result(),
}
@property
def metrics(self):
return [self.loss_tracker, self.mae_metric]
inputs = keras.Input(shape=(32,))
outputs = keras.layers.Dense(1)(inputs)
model = CustomModel(inputs, outputs)
model.compile(optimizer="adam")
x = np.random.random((64, 32))
y = np.random.random((64, 1))
history = model.fit(x, y, epochs=1)
assert "loss" in history.history
assert "mae" in history.history
print("History:")
print(history.history)
if __name__ == "__main__":
test_custom_fit()