Bird
Raised Fist0
TensorFlowml~5 mins

Functional API basics in TensorFlow

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
The Functional API lets you build flexible machine learning models by connecting layers like building blocks. It helps create models with multiple inputs or outputs easily.
You want to build a model with more than one input, like images and text together.
You need a model that has multiple outputs, such as predicting both price and category.
You want to create complex models with shared layers or non-linear connections.
You want clear and easy-to-read model structure for debugging or sharing.
You want to reuse parts of a model in different places.
Syntax
TensorFlow
from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model

inputs = Input(shape=(input_size,))
x = Dense(units, activation='relu')(inputs)
outputs = Dense(output_size, activation='softmax')(x)
model = Model(inputs=inputs, outputs=outputs)
Use Input() to define the shape of your input data.
Connect layers by calling them like functions on tensors.
Examples
A simple model with one input layer of size 10, one hidden layer with 32 units, and one output unit for binary classification.
TensorFlow
inputs = Input(shape=(10,))
x = Dense(32, activation='relu')(inputs)
outputs = Dense(1, activation='sigmoid')(x)
model = Model(inputs, outputs)
A model with two inputs of different sizes that are processed separately and then combined before the output.
TensorFlow
import tensorflow as tf
input1 = Input(shape=(20,))
input2 = Input(shape=(5,))
x1 = Dense(16, activation='relu')(input1)
x2 = Dense(8, activation='relu')(input2)
concat = tf.keras.layers.concatenate([x1, x2])
outputs = Dense(3, activation='softmax')(concat)
model = Model([input1, input2], outputs)
Sample Model
This example builds a simple model with one input layer of size 4, one hidden layer, and an output layer for 3 classes. It trains on random data and prints predictions for new random inputs.
TensorFlow
import tensorflow as tf
from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model
import numpy as np

# Define input shape
inputs = Input(shape=(4,))

# Add a hidden layer
x = Dense(8, activation='relu')(inputs)

# Output layer for 3 classes
outputs = Dense(3, activation='softmax')(x)

# Create the model
model = Model(inputs=inputs, outputs=outputs)

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

# Generate some random data
x_train = np.random.random((100, 4))
y_train = np.random.randint(0, 3, 100)

# Train the model
history = model.fit(x_train, y_train, epochs=3, batch_size=10, verbose=0)

# Make predictions on new data
x_test = np.random.random((5, 4))
predictions = model.predict(x_test)

# Print predictions
print(predictions)
OutputSuccess
Important Notes
The Functional API is more flexible than the Sequential API and can handle complex models.
Always define inputs first, then connect layers step-by-step.
You can name layers and inputs for easier debugging.
Summary
The Functional API helps build flexible and complex models by connecting layers explicitly.
Use Input() to start and Model() to finalize your model.
It supports multiple inputs and outputs, unlike the simpler Sequential API.

Practice

(1/5)
1. What is the main advantage of using TensorFlow's Functional API over the Sequential API?
easy
A. It allows building models with multiple inputs and outputs.
B. It automatically tunes hyperparameters.
C. It requires less code to build simple models.
D. It only supports linear stacks of layers.

Solution

  1. Step 1: Understand Functional API capabilities

    The Functional API allows explicit connections between layers, supporting complex architectures.
  2. Step 2: Compare with Sequential API

    Sequential API only supports simple linear stacks, while Functional API supports multiple inputs and outputs.
  3. Final Answer:

    It allows building models with multiple inputs and outputs. -> Option A
  4. Quick Check:

    Functional API = multiple inputs/outputs [OK]
Hint: Functional API supports complex models with multiple inputs/outputs [OK]
Common Mistakes:
  • Thinking Functional API is simpler for linear models
  • Confusing hyperparameter tuning with model building
  • Assuming Sequential API supports multiple inputs
2. Which of the following is the correct way to start defining a model using the Functional API?
easy
A. inputs = tf.keras.Input(shape=(32,))
B. inputs = tf.keras.layers.Dense(32)
C. model = tf.keras.Model()
D. model = tf.keras.Sequential()

Solution

  1. Step 1: Identify how to define input in Functional API

    Functional API starts with tf.keras.Input() to define the input shape.
  2. Step 2: Check other options

    Sequential() is for Sequential API, Model() requires inputs and outputs, Dense is a layer, not input.
  3. Final Answer:

    inputs = tf.keras.Input(shape=(32,)) -> Option A
  4. Quick Check:

    Start Functional API with Input() [OK]
Hint: Use Input() to start Functional API models [OK]
Common Mistakes:
  • Using Sequential() instead of Input() to start
  • Trying to create Model() without inputs and outputs
  • Confusing layers with input definitions
3. What will be the output shape of the model defined below?
inputs = tf.keras.Input(shape=(10,))
x = tf.keras.layers.Dense(5)(inputs)
outputs = tf.keras.layers.Dense(2)(x)
model = tf.keras.Model(inputs, outputs)
print(model.output_shape)
medium
A. (None, 10)
B. (10, 2)
C. (None, 5)
D. (None, 2)

Solution

  1. Step 1: Trace the model layers

    Input shape is (10,), first Dense layer outputs (5,), second Dense outputs (2,).
  2. Step 2: Understand output shape format

    Output shape includes batch size None, so final output shape is (None, 2).
  3. Final Answer:

    (None, 2) -> Option D
  4. Quick Check:

    Output shape = (None, 2) [OK]
Hint: Output shape matches last layer units with batch None [OK]
Common Mistakes:
  • Confusing input shape with output shape
  • Ignoring batch dimension None
  • Mixing layer output sizes
4. Identify the error in this Functional API model code:
inputs = tf.keras.Input(shape=(8,))
x = tf.keras.layers.Dense(4)(inputs)
outputs = tf.keras.layers.Dense(1)(inputs)
model = tf.keras.Model(inputs=inputs, outputs=outputs)
medium
A. Input shape must be (4,), not (8,).
B. Output layer should connect to x, not inputs.
C. Model() requires no arguments.
D. Dense layers cannot be used in Functional API.

Solution

  1. Step 1: Check layer connections

    The output layer is connected directly to inputs, skipping the intermediate Dense layer x.
  2. Step 2: Correct the output connection

    Output should connect to x to use the transformed data, not inputs.
  3. Final Answer:

    Output layer should connect to x, not inputs. -> Option B
  4. Quick Check:

    Output must connect to last layer, not input [OK]
Hint: Connect outputs to last layer, not inputs [OK]
Common Mistakes:
  • Connecting output directly to inputs
  • Changing input shape unnecessarily
  • Misunderstanding Model() arguments
5. You want to build a model with two inputs: one for images (shape 64x64x3) and one for metadata (shape 10). Which Functional API code snippet correctly defines the inputs?
hard
A. img_input = tf.keras.layers.Input(shape=(64,64,3)) meta_input = tf.keras.layers.Input(shape=(10,))
B. inputs = tf.keras.Input(shape=(64,64,3,10))
C. img_input = tf.keras.Input(shape=(64,64,3)) meta_input = tf.keras.Input(shape=(10,))
D. inputs = tf.keras.Input(shape=(64,64,3)) inputs = tf.keras.Input(shape=(10,))

Solution

  1. Step 1: Define separate inputs for each data type

    Functional API allows multiple inputs by defining each with tf.keras.Input and correct shapes.
  2. Step 2: Check each option for correctness

    img_input = tf.keras.Input(shape=(64,64,3)) meta_input = tf.keras.Input(shape=(10,)) correctly defines two inputs separately; B merges shapes incorrectly; A uses wrong module; D overwrites inputs variable.
  3. Final Answer:

    img_input = tf.keras.Input(shape=(64,64,3)) meta_input = tf.keras.Input(shape=(10,)) -> Option C
  4. Quick Check:

    Multiple inputs need separate Input() calls [OK]
Hint: Use separate Input() for each input tensor [OK]
Common Mistakes:
  • Combining input shapes incorrectly
  • Using layers.Input instead of keras.Input
  • Overwriting input variables