Introduction
Keras Functional API enables building complex architectures with shared layers, multiple inputs, and outputs.
Basic Functional Model
from tensorflow import keras
from tensorflow.keras import layers
inputs = keras.Input(shape=(784,))
x = layers.Dense(64, activation='relu')(inputs)
x = layers.Dense(32, activation='relu')(x)
outputs = layers.Dense(10, activation='softmax')(x)
model = keras.Model(inputs=inputs, outputs=outputs, name='mnist_model')
model.summary()
Multiple Inputs/Outputs
# Multiple inputs
text_input = keras.Input(shape=(None,), dtype='int32', name='text')
image_input = keras.Input(shape=(28, 28, 1), name='image')
# Embedding for text
x1 = layers.Embedding(10000, 64)(text_input)
x1 = layers.GlobalAveragePooling1D()(x1)
# CNN for image
x2 = layers.Conv2D(32, 3, activation='relu')(image_input)
x2 = layers.GlobalAveragePooling2D()(x2)
# Concatenate
concatenated = layers.Concatenate()([x1, x2])
outputs = layers.Dense(10, activation='softmax')(concatenated)
model = keras.Model(inputs=[text_input, image_input], outputs=outputs)
Shared Layers
# Shared encoder for two inputs
shared_dense = layers.Dense(64, activation='relu')
input_a = keras.Input(shape=(784,), name='input_a')
input_b = keras.Input(shape=(784,), name='input_b')
encoded_a = shared_dense(input_a)
encoded_b = shared_dense(input_b)
merged = layers.Concatenate()([encoded_a, encoded_b])
outputs = layers.Dense(1)(merged)
model = keras.Model(inputs=[input_a, input_b], outputs=outputs)
Accessing Layer Outputs
# Get intermediate layer outputs
layer_output = model.get_layer('dense_1').output
intermediate_model = keras.Model(inputs=model.input, outputs=layer_output)
Practice Problems
- Build model with multiple inputs
- Create shared layer for twin network
- Access intermediate layer outputs
- Implement functional API with custom layers
- Combine CNN and RNN