TensorFlow Learning Path
This document provides a comprehensive guide to learning TensorFlow, from the fundamental concepts to advanced applications. It is designed for beginners with some programming experience and a basic understanding of machine learning concepts.
1. Introduction to TensorFlow
TensorFlow is an open-source machine learning platform developed by Google. It provides a comprehensive ecosystem of tools, libraries, and community resources that lets researchers push the state-of-the-art in ML and developers easily build and deploy ML-powered applications.
- Why TensorFlow?
- Scalability: TensorFlow can run on CPUs, GPUs, and TPUs, and can be deployed on servers, mobile devices, and in the browser.
- Flexibility: TensorFlow provides a flexible architecture that allows you to build and deploy models on a variety of platforms.
- Ecosystem: TensorFlow has a large and active community, and a rich ecosystem of tools and libraries.
2. TensorFlow Basics
This section covers the fundamental building blocks of TensorFlow.
2.1. Tensors
A tensor is a multi-dimensional array. Tensors are the central data structure in TensorFlow. They are immutable, meaning once created, their value cannot be changed.
-
Creating Tensors: ```python import tensorflow as tf
A scalar (0-D tensor)
scalar = tf.constant(4, dtype=tf.int32) print(f"Scalar: {scalar}, Shape: {scalar.shape}, Dtype: {scalar.dtype}")
A vector (1-D tensor)
vector = tf.constant([1, 2, 3], dtype=tf.float32) print(f"Vector: {vector}, Shape: {vector.shape}, Dtype: {vector.dtype}")
A matrix (2-D tensor)
matrix = tf.constant([[1, 2, 3], [4, 5, 6]], dtype=tf.float16) print(f"Matrix: {matrix}, Shape: {matrix.shape}, Dtype: {matrix.dtype}")
A 3-D tensor
tensor_3d = tf.constant([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) print(f"3D Tensor: {tensor_3d}, Shape: {tensor_3d.shape}, Dtype: {tensor_3d.dtype}") ```
-
Tensor Operations: ```python # Basic math operations a = tf.constant(2) b = tf.constant(3) print(f"Addition: {tf.add(a, b)}") print(f"Multiplication: {tf.multiply(a, b)}")
Element-wise operations
tensor_a = tf.constant([1, 2, 3]) tensor_b = tf.constant([4, 5, 6]) print(f"Element-wise addition: {tensor_a + tensor_b}")
Matrix multiplication
matrix1 = tf.constant([[1, 2], [3, 4]]) matrix2 = tf.constant([[5, 6], [7, 8]]) print(f"Matrix multiplication: {tf.matmul(matrix1, matrix2)}")
Reshaping tensors
reshaped_tensor = tf.reshape(tensor_3d, shape=(2, 4)) print(f"Reshaped 3D Tensor to 2x4: {reshaped_tensor}") ```
-
Use Cases:
- Representing data (images, text, numerical data) in a format that TensorFlow can process.
- Performing mathematical computations efficiently on large datasets.
-
Project Idea:
- Create a program that generates random tensors of different shapes and performs various mathematical operations on them.
-
Resources:
2.2. Variables
Variables are special mutable tensors that represent the shared, persistent state of your model. They are used to store the parameters (weights and biases) of a model that are updated during training.
-
Creating Variables: ```python # Create a variable with an initial value v = tf.Variable(0.0, name='my_variable') print(f"Initial variable: {v}")
Assign a new value to the variable
v.assign(1.0) print(f"Assigned variable: {v}")
Use assign_add and assign_sub for incremental updates
v.assign_add(0.5) print(f"After assign_add: {v}") ```
-
Use Cases:
- Storing model weights and biases that are updated during the backpropagation process.
- Maintaining state in custom training loops.
-
Project Idea:
- Implement a simple linear regression model from scratch using TensorFlow variables to store the slope and intercept, and update them manually.
-
Resources:
2.3. Automatic Differentiation (GradientTape)
TensorFlow's tf.GradientTape API provides automatic differentiation, which is crucial for training machine learning models. It records operations performed during a forward pass and then uses that to compute the gradients of a function with respect to its inputs.
-
Example: ```python # Create a variable x = tf.Variable(3.0)
Create a function and record operations with GradientTape
with tf.GradientTape() as tape: y = x*2 + 2x + 1
Compute the gradient of y with respect to x
dy_dx = tape.gradient(y, x) print(f"Gradient of y=x^2+2x+1 at x=3: {dy_dx}") # Should be 2*3 + 2 = 8
Gradients with respect to multiple variables
x1 = tf.Variable(2.0) x2 = tf.Variable(3.0) with tf.GradientTape() as tape: z = x12 + x23 dz_dx1 = tape.gradient(z, x1) dz_dx2 = tape.gradient(z, x2) print(f"dz/dx1: {dz_dx1}, dz/dx2: {dz_dx2}") ```
-
Use Cases:
- Calculating gradients for backpropagation in neural networks.
- Implementing custom optimization algorithms.
-
Project Idea:
- Implement a simple gradient descent algorithm to find the minimum of a function using
tf.GradientTape.
- Implement a simple gradient descent algorithm to find the minimum of a function using
-
Resources:
2.4. [New] TensorFlow Datasets (tf.data)
Efficiently loading and preprocessing data is critical for training large models. The tf.data API helps you build complex input pipelines from simple, reusable pieces.
-
Topics:
- Creating
tf.data.Datasetfrom arrays, tensors, or files. - Applying transformations:
map,batch,shuffle,repeat. - Prefetching and caching for performance.
- Creating
-
Example: ```python import tensorflow as tf
Create a dataset from a list of numbers
dataset = tf.data.Dataset.from_tensor_slices([1, 2, 3, 4, 5])
Apply transformations
dataset = dataset.map(lambda x: x * 2) # Double each element dataset = dataset.shuffle(buffer_size=5) # Shuffle the elements dataset = dataset.batch(2) # Batch elements into groups of 2
Iterate over the dataset
for element in dataset: print(element) ```
-
Use Cases:
- Handling large datasets that don't fit into memory.
- Accelerating data loading and preprocessing during model training.
-
Project Idea:
- Build a data pipeline using
tf.datato load and preprocess an image dataset (e.g., CIFAR-10) for a classification task.
- Build a data pipeline using
-
Resources:
3. Building Models with Keras
Keras is a high-level API for building and training deep learning models. It is the recommended way to get started with TensorFlow due to its user-friendliness and flexibility.
3.1. The Sequential API
The Sequential API is the simplest way to build a model in Keras. It allows you to create a model layer by layer, suitable for models where each layer has exactly one input tensor and one output tensor.
-
Topics:
- Adding different types of layers (Dense, Conv2D, MaxPooling2D, Flatten, Dropout).
- Specifying input shape.
- Compilation:
optimizer,lossfunction,metrics. - Training:
fitmethod withx,y,epochs,batch_size. - Evaluation:
evaluatemethod. - Prediction:
predictmethod.
-
Example (Simple Image Classifier with Sequential API): ```python import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers
Load a sample dataset (e.g., MNIST handwritten digits)
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
Preprocess the data
x_train = x_train.reshape(-1, 784).astype("float32") / 255.0 x_test = x_test.reshape(-1, 784).astype("float32") / 255.0
Create a sequential model
model = keras.Sequential([ layers.Dense(128, activation="relu", input_shape=(784,)), layers.Dropout(0.2), layers.Dense(10, activation="softmax"), ])
Compile the model
model.compile( optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"], )
Train the model
model.fit(x_train, y_train, epochs=5, batch_size=32, verbose=0)
Evaluate the model
loss, accuracy = model.evaluate(x_test, y_test, verbose=0) print(f"Test Accuracy: {accuracy:.4f}") ```
-
Use Cases:
- Simple feed-forward neural networks.
- Basic convolutional neural networks (CNNs) for image classification.
- Recurrent neural networks (RNNs) for sequential data.
-
Project Idea:
- Build a simple image classifier for the Fashion MNIST dataset using the Sequential API.
-
Resources:
3.2. The Functional API
The Functional API is more flexible than the Sequential API. It allows you to build models with multiple inputs and outputs, and with shared layers, making it suitable for more complex architectures.
-
Topics:
- Defining input layers.
- Connecting layers by calling them on tensors.
- Creating models with
keras.Modelby specifyinginputsandoutputs. - Handling multiple inputs and outputs.
-
Example (Multi-input Model with Functional API): ```python import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers
Define two input layers
input_a = keras.Input(shape=(64,), name="input_a") input_b = keras.Input(shape=(128,), name="input_b")
Process input_a
x = layers.Dense(32, activation="relu")(input_a) x = layers.Dense(16, activation="relu")(x)
Process input_b
y = layers.Dense(64, activation="relu")(input_b) y = layers.Dense(16, activation="relu")(y)
Concatenate the outputs of both branches
combined = layers.concatenate([x, y])
Define an output layer
output = layers.Dense(1, activation="sigmoid", name="output")(combined)
Create the model
model = keras.Model(inputs=[input_a, input_b], outputs=output)
Print the model summary
model.summary() ```
-
Use Cases:
- Models with multiple input branches (e.g., combining image and text data).
- Models with multiple output heads (e.g., predicting both classification and bounding boxes).
- Models with shared layers (e.g., Siamese networks).
-
Project Idea:
- Build a model that takes both numerical and categorical features as input to predict a target variable.
-
Resources:
3.3. [New] Subclassing the Model API
For full control and maximum flexibility, you can subclass the tf.keras.Model class. This approach is particularly useful when you need to define custom forward passes, custom training logic, or models with non-standard layer connections.
-
Topics:
- Inheriting from
tf.keras.Model. - Defining layers in the
__init__method. - Implementing the forward pass in the
callmethod. - Custom training steps (optional, but common with this approach).
- Inheriting from
-
Example (Custom Model Subclassing): ```python import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers
class CustomModel(keras.Model): def init(self, num_classes=10): super(CustomModel, self).init() self.dense1 = layers.Dense(64, activation="relu") self.dense2 = layers.Dense(num_classes, activation="softmax")
def call(self, inputs): x = self.dense1(inputs) return self.dense2(x)Create an instance of the custom model
model = CustomModel(num_classes=10)
Build the model (required for summary and input shape inference)
model.build(input_shape=(None, 784)) # None for batch size
Print the model summary
model.summary() ```
-
Use Cases:
- Implementing novel research architectures.
- Models with complex data flow or control flow within the forward pass.
- When you need to define custom training, evaluation, or prediction steps.
-
Project Idea:
- Re-implement a simple Sequential or Functional API model using model subclassing to understand the differences and gain more control.
-
Resources:
4. Advanced Model Building
This section covers more advanced topics in model building, giving you finer control and enabling more complex architectures.
4.1. Custom Layers and Models
TensorFlow allows you to create your own custom layers and models by subclassing tf.keras.layers.Layer and tf.keras.Model respectively. This is useful for research, implementing novel architectures, or when existing layers don't meet your specific needs.
-
Topics:
- Subclassing
tf.keras.layers.Layer:__init__: Define layer-specific attributes.build: Create the layer's weights (called once with input shape).call: Define the layer's forward pass logic.
- Subclassing
tf.keras.Model: (Covered in 3.3, but reinforced here for advanced use cases)__init__: Define sub-layers and other model components.call: Define the model's forward pass, connecting sub-layers.
- Subclassing
-
Example (Custom Layer with trainable weights): ```python import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers
class CustomDense(layers.Layer): def init(self, units=32, activation=None, kwargs): super(CustomDense, self).init(kwargs) self.units = units self.activation = keras.activations.get(activation)
def build(self, input_shape): self.w = self.add_weight( shape=(input_shape[-1], self.units), initializer="glorot_uniform", trainable=True, name="kernel", ) self.b = self.add_weight( shape=(self.units,), initializer="zeros", trainable=True, name="bias", ) super(CustomDense, self).build(input_shape) # Must call at the end def call(self, inputs): output = tf.matmul(inputs, self.w) + self.b if self.activation is not None: output = self.activation(output) return output def get_config(self): config = super(CustomDense, self).get_config() config.update({"units": self.units, "activation": keras.activations.serialize(self.activation)}) return configExample usage in a Sequential model
model = keras.Sequential([ keras.Input(shape=(784,)), CustomDense(64, activation="relu"), CustomDense(10, activation="softmax"), ]) model.build() model.summary() ```
-
Use Cases:
- Implementing novel activation functions or regularization techniques.
- Creating layers with complex internal logic or state.
- Building models that require non-standard data flow or shared weights across different parts of the network.
-
Project Idea:
- Implement a custom attention layer or a custom recurrent cell using
tf.keras.layers.Layer.
- Implement a custom attention layer or a custom recurrent cell using
-
Resources:
4.2. Custom Training Loops
While model.fit() is convenient, custom training loops provide maximum flexibility to implement unique training algorithms, advanced regularization, or specific debugging needs. They leverage tf.GradientTape for automatic differentiation.
-
Topics:
- Defining a custom loss function.
- Defining a custom optimizer.
- Iterating over
tf.data.Dataset. - Using
tf.GradientTapeto compute gradients. - Applying gradients to update model variables.
- Tracking metrics manually.
-
Example (Custom Training Loop for a simple MLP): ```python import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers
1. Prepare data
(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
Create tf.data datasets
train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train)).shuffle(10000).batch(32) test_dataset = tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(32)
2. Define the model (using subclassing for demonstration)
class MLP(keras.Model): def init(self, num_classes=10): super(MLP, self).init() self.dense1 = layers.Dense(128, activation="relu") self.dropout = layers.Dropout(0.2) self.dense2 = layers.Dense(num_classes, activation="softmax")
def call(self, inputs): x = self.dense1(inputs) x = self.dropout(x) return self.dense2(x)model = MLP(num_classes=10)
3. Define loss, optimizer, and metrics
loss_fn = keras.losses.SparseCategoricalCrossentropy() optimizer = keras.optimizers.Adam(learning_rate=0.001)
train_acc_metric = keras.metrics.SparseCategoricalAccuracy() test_acc_metric = keras.metrics.SparseCategoricalAccuracy()
4. Implement the custom training step
@tf.function # Compile into a TensorFlow graph for speed def train_step(x, y): with tf.GradientTape() as tape: logits = model(x, training=True) loss_value = loss_fn(y, logits) grads = tape.gradient(loss_value, model.trainable_weights) optimizer.apply_gradients(zip(grads, model.trainable_weights)) train_acc_metric.update_state(y, logits) return loss_value
@tf.function def test_step(x, y): val_logits = model(x, training=False) test_acc_metric.update_state(y, val_logits)
5. Run the training loop
epochs = 3 for epoch in range(epochs): print(f"\nStart of epoch {epoch}") train_acc_metric.reset_states() test_acc_metric.reset_states()
for step, (x_batch_train, y_batch_train) in enumerate(train_dataset): loss_value = train_step(x_batch_train, y_batch_train) for x_batch_test, y_batch_test in test_dataset: test_step(x_batch_test, y_batch_test) print(f"Epoch {epoch}: Loss = {loss_value:.4f}, Train Acc = {train_acc_metric.result():.4f}, Test Acc = {test_acc_metric.result():.4f}")```
-
Use Cases:
- Implementing complex loss functions or regularization techniques not directly supported by
model.compile(). - Research and experimentation with new optimization algorithms.
- Fine-grained control over the training process for debugging or specific requirements.
- Implementing complex loss functions or regularization techniques not directly supported by
-
Project Idea:
- Implement a custom training loop for a Generative Adversarial Network (GAN) where the generator and discriminator are trained alternately.
-
Resources:
4.3. [New] Distributed Training
Training large models on massive datasets often requires distributing the workload across multiple GPUs or machines. TensorFlow provides tf.distribute.Strategy for efficient distributed training.
-
Topics:
- Understanding different distribution strategies (e.g.,
MirroredStrategy,MultiWorkerMirroredStrategy). - Adapting your model and data pipeline for distributed training.
- Synchronous vs. asynchronous training.
- Understanding different distribution strategies (e.g.,
-
Example (MirroredStrategy for multi-GPU training): ```python import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers
Create a MirroredStrategy. This will distribute variables and computation
across all available GPUs.
strategy = tf.distribute.MirroredStrategy() print(f'Number of devices: {strategy.num_replicas_in_sync}')
Open a strategy scope to build and compile the model
with strategy.scope(): model = keras.Sequential([ layers.Dense(128, activation="relu", input_shape=(784,)), layers.Dropout(0.2), layers.Dense(10, activation="softmax"), ])
model.compile( optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"], )Prepare data (same as before)
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data() x_train = x_train.reshape(-1, 784).astype("float32") / 255.0 y_train = y_train.astype("int64") # Ensure y_train is int64 for sparse_categorical_crossentropy
Create tf.data datasets
train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train)).shuffle(10000).batch(32) test_dataset = tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(32)
Train the model with distributed strategy
model.fit(train_dataset, epochs=3)
Evaluate the model
loss, accuracy = model.evaluate(test_dataset) print(f"Distributed Test Accuracy: {accuracy:.4f}") ```
-
Use Cases:
- Accelerating training for very large models or datasets.
- Leveraging multiple GPUs or TPUs in a single machine or across a cluster.
-
Project Idea:
- Experiment with
MirroredStrategyon a multi-GPU machine (if available) or simulate it using CPU devices to understand its impact on training speed.
- Experiment with
-
Resources:
5. TensorFlow for Production
This section covers how to deploy TensorFlow models to production, ensuring they are robust, scalable, and efficient in real-world applications.
5.1. Saving and Loading Models
TensorFlow provides flexible ways to save your trained models, allowing you to resume training, make predictions, or deploy them. The primary format is the TensorFlow SavedModel format.
-
Topics:
- Saving models in the SavedModel format (
model.save()). - Loading models (
tf.keras.models.load_model()). - Saving and loading only weights (
model.save_weights(),model.load_weights()). - Understanding the SavedModel directory structure.
- Saving models in the SavedModel format (
-
Example (Saving and Loading a Keras Model): ```python import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers
Create a simple model
model = keras.Sequential([ layers.Dense(64, activation="relu", input_shape=(784,)), layers.Dense(10, activation="softmax"), ]) model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"])
Save the entire model to a SavedModel directory
model.save('my_saved_model') print("Model saved to 'my_saved_model' directory.")
Load the saved model
loaded_model = keras.models.load_model('my_saved_model') loaded_model.summary()
You can also save/load only the weights
model.save_weights('my_model_weights.h5') print("Model weights saved to 'my_model_weights.h5'.")
Create a new model with the same architecture
new_model = keras.Sequential([ layers.Dense(64, activation="relu", input_shape=(784,)), layers.Dense(10, activation="softmax"), ]) new_model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"])
Load weights into the new model
new_model.load_weights('my_model_weights.h5') print("Weights loaded into new_model.") ```
-
Use Cases:
- Persisting trained models for later use or deployment.
- Sharing models with others.
- Resuming training from a checkpoint.
-
Project Idea:
- Train a small image classification model, save it, and then load it in a separate script to make predictions on new data.
-
Resources:
5.2. TensorFlow Serving
TensorFlow Serving is a flexible, high-performance serving system for machine learning models, designed for production environments. It allows you to deploy multiple versions of your models and manage their lifecycle.
-
Topics:
- Installing TensorFlow Serving.
- Exporting models for serving.
- Running TensorFlow Serving with Docker.
- Making prediction requests (REST API, gRPC).
- Model versioning and A/B testing.
-
Use Cases:
- Deploying machine learning models as scalable REST or gRPC APIs.
- Managing multiple versions of a model in production.
- Performing A/B testing on different model versions.
-
Project Idea:
- Deploy a trained TensorFlow model using TensorFlow Serving and make prediction requests from a client application (e.g., a Python script or a web application).
-
Resources:
5.3. [New] TensorFlow Lite for Mobile and Edge Devices
TensorFlow Lite is a lightweight, cross-platform solution for deploying machine learning models on mobile, embedded, and IoT devices. It enables on-device machine learning inference with low latency and a small binary size.
-
Topics:
- Converting TensorFlow models to TensorFlow Lite format (
.tflite). - Understanding TensorFlow Lite interpreter and delegates (GPU, Edge TPU).
- Deploying models on Android, iOS, and embedded Linux devices.
- Converting TensorFlow models to TensorFlow Lite format (
-
Example (Converting a Keras model to TensorFlow Lite): ```python import tensorflow as tf from tensorflow import keras
Create a simple model (or load a pre-trained one)
model = keras.Sequential([ keras.layers.Dense(64, activation="relu", input_shape=(784,)), keras.layers.Dense(10, activation="softmax"), ]) model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"])
Save the model in the SavedModel format first
tf.saved_model.save(model, "./tf_model")
Convert the SavedModel to TensorFlow Lite format
converter = tf.lite.TFLiteConverter.from_saved_model("./tf_model") tflite_model = converter.convert()
Save the TFLite model
with open('model.tflite', 'wb') as f: f.write(tflite_model) print("Model converted to TensorFlow Lite and saved as 'model.tflite'.") ```
-
Use Cases:
- Running machine learning models on smartphones for real-time applications (e.g., object detection in camera feed).
- Deploying AI capabilities to IoT devices with limited computational resources.
- Enabling offline inference for privacy-sensitive applications.
-
Project Idea:
- Convert a pre-trained image classification model (e.g., MobileNet) to TensorFlow Lite and deploy it on an Android or iOS device (requires mobile development skills).
-
Resources:
6. TensorFlow Ecosystem
This section covers the broader TensorFlow ecosystem, highlighting various tools and libraries that extend TensorFlow's capabilities for different use cases and deployment targets.
6.1. TensorFlow.js
TensorFlow.js is a library for training and deploying machine learning models in the browser and on Node.js. It enables interactive ML experiences directly in web applications.
-
Topics:
- Loading pre-trained models in JavaScript.
- Training models directly in the browser.
- Using WebGL for accelerated computations.
- [New] Converting Keras models to TensorFlow.js format.
-
Use Cases:
- Building interactive machine learning applications in the browser (e.g., real-time image classification from webcam).
- Running machine learning models on mobile devices via web views.
- Privacy-preserving ML where data stays on the client.
-
Project Idea:
- Create a simple web application that uses a pre-trained TensorFlow.js model to classify images uploaded by the user.
-
Resources:
6.2. TensorFlow Extended (TFX)
TensorFlow Extended (TFX) is an end-to-end platform for deploying production ML pipelines. It provides a set of libraries and components to build, deploy, and maintain ML systems.
-
Topics:
- Understanding TFX components (e.g., ExampleGen, StatisticsGen, SchemaGen, Trainer, Pusher).
- Building ML pipelines with TFX.
- Data validation and transformation.
- Model analysis and validation.
-
Use Cases:
- Building and managing production machine learning pipelines.
- Automating the process of training, evaluating, and deploying machine learning models.
- Ensuring data quality and model performance in production.
-
Project Idea:
- Set up a basic TFX pipeline to train and validate a simple classification model on a public dataset.
-
Resources:
6.3. [New] TensorBoard for Visualization and Debugging
TensorBoard is TensorFlow's visualization toolkit. It allows you to visualize your TensorFlow graph, plot metrics and loss, visualize weights, embed high-dimensional data into lower-dimensional spaces, and much more.
-
Topics:
- Logging scalars, images, histograms, and audio.
- Visualizing model graphs.
- Tracking training metrics and hyperparameters.
- Debugging TensorFlow programs.
-
Example (Using TensorBoard with Keras): ```python import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers import datetime
Load a sample dataset
(x_train, y_train), _ = keras.datasets.mnist.load_data() x_train = x_train.reshape(-1, 784).astype("float32") / 255.0
Create a simple model
model = keras.Sequential([ layers.Dense(128, activation="relu", input_shape=(784,)), layers.Dense(10, activation="softmax"), ]) model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"])
Define the TensorBoard callback
log_dir = "logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S") tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)
Train the model with the TensorBoard callback
model.fit(x_train, y_train, epochs=5, batch_size=32, callbacks=[tensorboard_callback])
print(f"Run
tensorboard --logdir {log_dir}in your terminal to view the results.") ``` -
Use Cases:
- Monitoring training progress in real-time.
- Comparing different model architectures or hyperparameter settings.
- Debugging model behavior and understanding internal representations.
-
Project Idea:
- Train a neural network and use TensorBoard to visualize its training metrics, computational graph, and weight distributions.
-
Resources: