How can Tensorflow be used to build a normalization layer for the abalone dataset?

A normalization layer can be built using TensorFlow's Normalization preprocessing layer to handle the abalone dataset. This layer adapts to the features by pre-computing mean and variance values for each column, which are then used to standardize the input data during training and inference.

Read More: What is TensorFlow and how Keras work with TensorFlow to create Neural Networks?

The abalone dataset contains measurements of abalone (a type of sea snail), and the goal is to predict age based on physical measurements like length, diameter, height, and weight.

Setting Up the Environment

First, let's import the necessary libraries and load the abalone dataset ?

import tensorflow as tf
from tensorflow.keras import layers, preprocessing
import pandas as pd

# Load the abalone dataset
abalone_train = pd.read_csv("https://storage.googleapis.com/download.tensorflow.org/data/abalone_train.csv")
print("Dataset shape:", abalone_train.shape)
print("First few rows:")
print(abalone_train.head())
Dataset shape: (3320, 9)
First few rows:
   Length  Diameter  Height  Whole_weight  Shucked_weight  Viscera_weight  Shell_weight Sex  Age
0   0.435     0.335   0.110        0.334           0.1355          0.0775        0.0965   F    7
1   0.585     0.450   0.125        0.874           0.3545          0.2075        0.2250   F   10
2   0.655     0.510   0.160        1.092           0.4960          0.2390        0.2850   F   10
3   0.545     0.425   0.125        0.768           0.2940          0.1495        0.2600   F    9
4   0.545     0.420   0.130        0.879           0.3740          0.1695        0.2300   F   11

Preparing Features for Normalization

Extract the feature columns (excluding the target variable 'Age') ?

# Separate features from target
feature_columns = ['Length', 'Diameter', 'Height', 'Whole_weight', 
                  'Shucked_weight', 'Viscera_weight', 'Shell_weight']
abalone_features = abalone_train[feature_columns].values

print("Features shape:", abalone_features.shape)
print("Sample feature values:")
print(abalone_features[:3])
Features shape: (3320, 7)
Sample feature values:
[[0.435  0.335  0.11   0.334  0.1355 0.0775 0.0965]
 [0.585  0.45   0.125  0.874  0.3545 0.2075 0.225 ]
 [0.655  0.51   0.16   1.092  0.496  0.239  0.285 ]]

Building the Normalization Layer

Create and adapt the normalization layer to the training features ?

print("Building a normalization layer")
normalize = preprocessing.Normalization()

# Adapt the normalization layer to the training data
normalize.adapt(abalone_features)

print("Normalization layer statistics:")
print("Mean values:", normalize.mean.numpy())
print("Variance values:", normalize.variance.numpy())
Building a normalization layer
Normalization layer statistics:
Mean values: [0.52394578 0.40788253 0.13952711 0.82847435 0.35936147 0.18059639
 0.23883133]
Variance values: [0.01201202 0.00938439 0.00172533 0.24576992 0.04909825 0.01095642
 0.01881802]

Creating the Complete Model

Build a sequential model with the normalization layer followed by dense layers ?

print("Adding dense layers to create the model")
norm_abalone_model = tf.keras.Sequential([
    normalize,
    layers.Dense(64, activation='relu'),
    layers.Dense(32, activation='relu'),
    layers.Dense(1)
])

# Compile the model
norm_abalone_model.compile(
    optimizer='adam',
    loss='mae',
    metrics=['mae', 'mse']
)

print("Model architecture:")
norm_abalone_model.build(input_shape=(None, 7))
norm_abalone_model.summary()
Adding dense layers to create the model
Model architecture:
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 normalization (Normalizatio  (None, 7)               15        
 n)                                                              
                                                                 
 dense (Dense)               (None, 64)                512       
                                                                 
 dense_1 (Dense)             (None, 32)                2080      
                                                                 
 dense_2 (Dense)             (None, 1)                 33        
                                                                 
=================================================================
Total params: 2,640
Trainable params: 2,625
Non-trainable params: 15

Key Benefits of Normalization

  • Stable Training: Prevents features with larger scales from dominating the learning process
  • Faster Convergence: Helps the optimizer find the optimal solution more quickly
  • Consistent Preprocessing: The layer remembers normalization parameters for inference
  • No Manual Scaling: Automatically handles mean subtraction and variance scaling

Conclusion

TensorFlow's normalization layer automatically standardizes input features using computed mean and variance values. This preprocessing step is crucial for neural network training as it ensures all features contribute equally to the learning process, leading to more stable and efficient training.

Updated on: 2026-03-25T16:04:20+05:30

228 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements