Bird
Raised Fist0
TensorFlowml~8 mins

Functional API basics in TensorFlow - Model Metrics & Evaluation

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
Metrics & Evaluation - Functional API basics
Which metric matters for Functional API basics and WHY

When learning the Functional API, the key metric to watch is training loss and validation loss. These show how well the model is learning from data. Since the Functional API lets you build flexible models, watching loss helps you know if your model structure is working well.

Accuracy is also important for classification tasks to see if the model predicts correctly. But loss gives a clearer signal during training.

Confusion matrix example

For classification models built with the Functional API, a confusion matrix helps understand prediction errors:

      Actual \ Predicted | Positive | Negative
      -------------------|----------|---------
      Positive           |    50    |   10    
      Negative           |    5     |   35    
    

Here, True Positives (TP) = 50, False Negatives (FN) = 10, False Positives (FP) = 5, True Negatives (TN) = 35.

Precision vs Recall tradeoff with examples

Using the Functional API, you can build models for different tasks. Depending on the task, you choose metrics:

  • Precision: Important when false alarms are bad. Example: Email spam filter. You want to avoid marking good emails as spam.
  • Recall: Important when missing positive cases is bad. Example: Disease detection. You want to catch all sick patients.

Functional API lets you customize models to improve these metrics by changing layers or connections.

What "good" vs "bad" metric values look like

For a simple classification model built with the Functional API:

  • Good: Loss steadily decreases during training and validation. Accuracy above 80% on validation. Precision and recall balanced above 75%.
  • Bad: Loss stays high or increases. Accuracy stuck near random chance (e.g., 50% for two classes). Precision or recall very low (below 50%), showing poor predictions.
Common pitfalls in metrics when using Functional API
  • Accuracy paradox: High accuracy can be misleading if classes are imbalanced. For example, 95% accuracy if model always predicts the majority class.
  • Data leakage: Using test data during training can inflate metrics falsely.
  • Overfitting indicators: Training loss much lower than validation loss means model memorizes training data but fails on new data.
  • Ignoring metric choice: Not selecting metrics that fit the problem (e.g., using accuracy for imbalanced data) leads to wrong conclusions.
Self-check question

Your Functional API model shows 98% accuracy but only 12% recall on fraud detection. Is it good for production? Why or why not?

Answer: No, it is not good. The low recall means the model misses most fraud cases, which is dangerous. Even with high accuracy, the model fails to catch fraud, so it should be improved before use.

Key Result
Training and validation loss are key metrics to track model learning with Functional API; precision and recall guide task-specific performance.

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