Custom Model Implementation with TensorFlow/Keras API
While TensorFlow/Keras provides high-level model building APIs (Sequential, Functional API), certain projects require full control over the model’s architecture, forward pass, and training loop.
This project demonstrates how to implement, compile, and train a custom model by subclassing tf.keras.Model and integrating custom layers, losses, and metrics.
The notebook implements a custom model workflow in these steps:
- Custom Layer Implementation – Define layers with specific initialization, regularization, and forward pass behavior.
 - Custom Model Class – Subclass 
tf.keras.Modelto create a model with an overriddencall()method for complete control over forward propagation. - Loss Function – Implement and integrate a custom loss function.
 - Compilation – Use 
model.compile()with the custom loss, optimizer, and evaluation metrics. - Training – Fit the model to data using 
model.fit()with a validation split. - Evaluation – Inspect training metrics and validate model performance.
 
From the code:
- TensorFlow – Model subclassing, custom layers, training loop management.
 - Keras (via TensorFlow) – Optimizers, metrics, compilation.
 - NumPy – Data preparation and preprocessing.
 
Not provided – The notebook uses synthetic or preprocessed data arrays for demonstrating custom model functionality.
Requirements:
pip install tensorflow numpyRun the notebook:
jupyter notebook "custom model.ipynb"or in JupyterLab:
jupyter lab "custom model.ipynb"Execute cells sequentially to follow the workflow from model definition to training.
- Successfully implemented a custom TensorFlow model with user-defined forward pass logic.
 - Integrated a custom loss function for task-specific optimization.
 - Verified training workflow compatibility with built-in Keras 
fitAPI. - Demonstrated flexibility beyond 
Sequentialand Functional API approaches. 
Sample output snippet:
Epoch 1/5
loss: 0.1234 - mean_absolute_error: 0.0456 - val_loss: 0.1100 - val_mean_absolute_error: 0.0421
Custom loss output example:
tf.Tensor(0.002345, shape=(), dtype=float32)
Model summary:
Model: "CustomModel"
_________________________________________________________________
 Layer (type)                Output Shape              Param #
=================================================================
 dense (Dense)               (None, X)                 Y
 ...
=================================================================
- Subclassing 
tf.keras.Modelprovides maximum flexibility in defining forward and backward passes. - Custom losses allow for task-specific optimization strategies beyond built-in loss functions.
 - Even with custom components, integration with 
model.fit()and the Keras training loop is seamless. - Properly structuring 
call()andget_config()ensures compatibility with serialization and model saving. 
💡 Some interactive outputs (e.g., plots, widgets) may not display correctly on GitHub. If so, please view this notebook via nbviewer.org for full rendering.
Mehran Asgari Email: imehranasgari@gmail.com GitHub: https://github.com/imehranasgari
This project is licensed under the Apache 2.0 License – see the LICENSE file for details.