Hands-On Tutorial

Building Your First Neural Network with TensorFlow

June 15, 2023
20 min read
Vishamber

Step-by-step guide to building your first neural network using TensorFlow and Keras. Learn neural network fundamentals with practical Python code examples.

Python Basics

Basic understanding of Python programming and data structures

Code Editor

Jupyter Notebook, VS Code, or any Python IDE

TensorFlow

TensorFlow 2.x installed in your environment

ML Concepts

Basic understanding of machine learning concepts

Understanding Neural Networks

Neural networks are computing systems inspired by the human brain. They consist of interconnected nodes (neurons) organized in layers that process information and learn patterns from data.

Basic Neural Network Structure

Input Layer → Hidden Layers → Output Layer

Key Concept: Neural networks learn by adjusting the weights between neurons based on the error of their predictions, a process called backpropagation.

Step-by-Step Implementation

Step 1: Install and Import TensorFlow

First, ensure you have TensorFlow installed. Then import the necessary libraries.

Python
# Install TensorFlow (if not already installed)
# pip install tensorflow

import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt

# Check TensorFlow version
print("TensorFlow version:", tf.__version__)

Step 2: Load and Prepare the Data

We'll use the MNIST dataset - a collection of 70,000 handwritten digits.

Python
# Load MNIST dataset
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

# Normalize pixel values (0-255) to (0-1)
x_train = x_train / 255.0
x_test = x_test / 255.0

# Reshape data for the neural network (flatten 28x28 images to 784 pixels)
x_train = x_train.reshape(-1, 28*28)
x_test = x_test.reshape(-1, 28*28)

# Print dataset shapes
print("Training data shape:", x_train.shape)
print("Test data shape:", x_test.shape)

Data Insight: The MNIST dataset contains 60,000 training images and 10,000 test images, each 28x28 pixels representing digits 0-9.

Step 3: Build the Neural Network Model

Create a sequential model with input, hidden, and output layers.

Python
# Create a sequential model
model = keras.Sequential([
    # Input layer with 784 neurons (28x28 pixels)
    keras.layers.Dense(128, activation='relu', input_shape=(784,)),
    # Hidden layer with 64 neurons
    keras.layers.Dense(64, activation='relu'),
    # Output layer with 10 neurons (for digits 0-9)
    keras.layers.Dense(10, activation='softmax')
])

# Display model architecture
model.summary()

Architecture Details: Our model has 784 input neurons, 128 neurons in the first hidden layer, 64 in the second hidden layer, and 10 output neurons (one for each digit).

Step 4: Compile the Model

Configure the model for training by specifying the optimizer, loss function, and metrics.

Python
# Compile the model
model.compile(
    optimizer='adam',
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy']
)

print("Model compiled successfully!")

Compilation Explanation: Adam optimizer for efficient learning, sparse categorical crossentropy for multi-class classification, and accuracy as the metric.

Step 5: Train the Model

Train the neural network on our training data.

Python
# Train the model
history = model.fit(
    x_train,
    y_train,
    epochs=10,
    batch_size=32,
    validation_split=0.2,
    verbose=1
)

print("Training completed!")

Training Tip: Start with fewer epochs (5-10) to ensure your model is working correctly before training longer.

Step 6: Evaluate Model Performance

Test the trained model on unseen data to evaluate its performance.

Python
# Evaluate on test data
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=0)

print(f'Test accuracy: {test_acc:.4f}')
print(f'Test loss: {test_loss:.4f}')

Expected Results: With this architecture, you may achieve ≈97-98% accuracy on the test set after 10 epochs.

Step 7: Make Predictions

Use the trained model to make predictions on new data.

Python
# Make predictions on test data
predictions = model.predict(x_test)

# Predicted class for the first test sample
predicted_class = np.argmax(predictions[0])
actual_class = y_test[0]

print(f'Predicted: {predicted_class}, Actual: {actual_class}')

# Display confidence scores
print("Confidence scores:", predictions[0])

Complete Code Example

Here's the complete code in one block for easy copying and execution:

Python - Complete Code
# Complete Neural Network with TensorFlow
import tensorflow as tf
from tensorflow import keras
import numpy as np

# 1. Load and prepare data
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
x_train = x_train / 255.0
x_test = x_test / 255.0
x_train = x_train.reshape(-1, 28*28)
x_test = x_test.reshape(-1, 28*28)

# 2. Build model
model = keras.Sequential([
    keras.layers.Dense(128, activation='relu', input_shape=(784,)),
    keras.layers.Dense(64, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])

# 3. Compile model
model.compile(
    optimizer='adam',
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy']
)

# 4. Train model
history = model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2)

# 5. Evaluate model
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f'Final Test Accuracy: {test_acc:.4f}')

Next Steps in Your Neural Network Journey

Advanced Architectures

Explore CNNs for image data and RNNs for sequential data

Hyperparameter Tuning

Learn to optimize learning rates, batch sizes, and layer configs

Model Deployment

Deploy your trained models to production environments

Real Projects

Apply your skills to real-world datasets and problems

Congratulations! You've successfully built and trained your first neural network. This foundation will serve you well as you explore more complex architectures and applications of deep learning.