TensorFlow provides implemention of Sequential model with tk.keras.Sequential
API. Sequential model is used when each layer has only one input tensor and one
output tensor.
In this tutorial we will learn how to build Sequential model with tf.keras
from scratch and will analyze model's layers.
Instantiate Sequential model with three layers
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.layers.Dense(3, activation="relu", name="firstLayer"),
tf.keras.layers.Dense(4, activation="tanh", name="secondLayer"),
tf.keras.layers.Dense(2, name="lastLayer"),
])
With the above snippet we have instantiated a Sequential model with three layers.
"relu"
activatation function
"tanh"
activation function"linear"
activation function would be applied
for this layer
Till now we have just instantiated the model, we have not actually "build"
the model, if we try to run model.weights
now, it will thorw an error ,
lets try it with below snippet
print(model.weights)
Output
ValueError: Weights for model sequential_13 have not yet been created.
Weights are created when the Model is first called on inputs or `build()`
is called with an `input_shape`.
Lets build the model now, we will do it by two methods
Method 1 : Build the model by providng explicit input
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.layers.Dense(3, activation="relu", name="firstLayer"),
tf.keras.layers.Dense(4, activation="tanh", name="secondLayer"),
tf.keras.layers.Dense(2, name="lastLayer"),
])
# Create a input and pass it to model
input = tf.random.normal((3,4))
output = model(input)
Execute model.weights
again and this time it should run without
any errors
print(model.weights)
You should see output similar to as shown below
[<tf.Variable 'sequential/firstlayer/kernel:0' shape=(4, 3) dtype=float32, numpy=
array([[ 0.05237347, -0.5885333 , 0.8455621 ],
[-0.23029417, -0.42183632, 0.85601246],
[-0.0988304 , 0.13164008, 0.46770597],
......
Method 2 : Build the model by instantiating with input shape
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.Input((12,)),
tf.keras.layers.Dense(3, activation="relu", name="firstLayer"),
tf.keras.layers.Dense(4, activation="tanh", name="secondLayer"),
tf.keras.layers.Dense(2, name="lastLayer"),
])
As we added one extra layer for input shape(tf.keras.Input((12,)))
, so
in this case explicitly passing input to the model is not required,
Execute model.weights
again and it should run without any errors
print(model.weights)
You should see output similar to as shown below
[<tf.Variable 'firstlayer/kernel:0' shape=(12, 3) dtype=float32, numpy=
array([[ 0.23396462, 0.16387159, 0.41509408],
[ 0.1252827 , -0.59924555, -0.11882699],
[ 0.3434235 , 0.58942086, 0.3280686 ],
[ 0.15097857, 0.49042028, -0.02682376],
[ 0.3386299 , -0.44764125, 0.17891586],
[ 0.11055166, 0.5378074 , -0.41883433],
..................
Let's analyze the layers of the model
Details for input shape, output shape, bias and activation function for first layer
print(model.layers[0].input_shape)
print(model.layers[0].output_shape)
print(model.layers[0].bias.numpy())
print(model.layers[0].activation)
Output
(None, 12)
(None, 3)
[0. 0. 0.]
<function relu at 0x7fec36f522f0>
Details for input shape, output shape, bias and activation function for second layer
print(model.layers[1].input_shape)
print(model.layers[1].output_shape)
print(model.layers[1].bias.numpy())
print(model.layers[1].activation)
Output
(None, 3)
(None, 4)
[0. 0. 0. 0.]
<function tanh at 0x7fec36f52378>
Details for input shape, output shape, bias and activation function for last layer
print(model.layers[2].input_shape)
print(model.layers[2].output_shape)
print(model.layers[2].bias.numpy())
print(model.layers[2].activation)
Output
(None, 4)
(None, 2)
[0. 0.]
<function linear at 0x7fec36f52598>
Once the model is built , we can use built-in APIs like
model.compile()
, model.fit()
,
model.evaluate()
, model.predict()
for
training, evaluation, and predictions.
Category: TensorFlow