keras/integration_tests/model_visualization_test.py
2023-05-07 20:40:36 -07:00

302 lines
9.0 KiB
Python

import keras_core
from keras_core.utils.model_visualization import plot_model
def plot_sequential_model():
model = keras_core.Sequential(
[
keras_core.Input((3,)),
keras_core.layers.Dense(4, activation="relu"),
keras_core.layers.Dense(1, activation="sigmoid"),
]
)
plot_model(model, "sequential.png")
plot_model(model, "sequential-show_shapes.png", show_shapes=True)
plot_model(
model,
"sequential-show_shapes-show_dtype.png",
show_shapes=True,
show_dtype=True,
)
plot_model(
model,
"sequential-show_shapes-show_dtype-show_layer_names.png",
show_shapes=True,
show_dtype=True,
show_layer_names=True,
)
plot_model(
model,
"sequential-show_shapes-show_dtype-show_layer_names-show_layer_activations.png",
show_shapes=True,
show_dtype=True,
show_layer_names=True,
show_layer_activations=True,
)
plot_model(
model,
"sequential-show_shapes-show_dtype-show_layer_names-show_layer_activations-show_trainable.png",
show_shapes=True,
show_dtype=True,
show_layer_names=True,
show_layer_activations=True,
show_trainable=True,
)
plot_model(
model,
"sequential-show_shapes-show_dtype-show_layer_names-show_layer_activations-show_trainable-LR.png",
show_shapes=True,
show_dtype=True,
show_layer_names=True,
show_layer_activations=True,
show_trainable=True,
rankdir="LR",
)
plot_model(
model,
"sequential-show_layer_activations-show_trainable.png",
show_layer_activations=True,
show_trainable=True,
)
def plot_functional_model():
inputs = keras_core.Input((3,))
x = keras_core.layers.Dense(4, activation="relu", trainable=False)(inputs)
residual = x
x = keras_core.layers.Dense(4, activation="relu")(x)
x = keras_core.layers.Dense(4, activation="relu")(x)
x = keras_core.layers.Dense(4, activation="relu")(x)
x += residual
residual = x
x = keras_core.layers.Dense(4, activation="relu")(x)
x = keras_core.layers.Dense(4, activation="relu")(x)
x = keras_core.layers.Dense(4, activation="relu")(x)
x += residual
x = keras_core.layers.Dropout(0.5)(x)
outputs = keras_core.layers.Dense(1, activation="sigmoid")(x)
model = keras_core.Model(inputs, outputs)
plot_model(model, "functional.png")
plot_model(model, "functional-show_shapes.png", show_shapes=True)
plot_model(
model,
"functional-show_shapes-show_dtype.png",
show_shapes=True,
show_dtype=True,
)
plot_model(
model,
"functional-show_shapes-show_dtype-show_layer_names.png",
show_shapes=True,
show_dtype=True,
show_layer_names=True,
)
plot_model(
model,
"functional-show_shapes-show_dtype-show_layer_names-show_layer_activations.png",
show_shapes=True,
show_dtype=True,
show_layer_names=True,
show_layer_activations=True,
)
plot_model(
model,
"functional-show_shapes-show_dtype-show_layer_names-show_layer_activations-show_trainable.png",
show_shapes=True,
show_dtype=True,
show_layer_names=True,
show_layer_activations=True,
show_trainable=True,
)
plot_model(
model,
"functional-show_shapes-show_dtype-show_layer_names-show_layer_activations-show_trainable-LR.png",
show_shapes=True,
show_dtype=True,
show_layer_names=True,
show_layer_activations=True,
show_trainable=True,
rankdir="LR",
)
plot_model(
model,
"functional-show_layer_activations-show_trainable.png",
show_layer_activations=True,
show_trainable=True,
)
plot_model(
model,
"functional-show_shapes-show_layer_activations-show_trainable.png",
show_shapes=True,
show_layer_activations=True,
show_trainable=True,
)
def plot_subclassed_model():
class MyModel(keras_core.Model):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.dense_1 = keras_core.layers.Dense(3, activation="relu")
self.dense_2 = keras_core.layers.Dense(1, activation="sigmoid")
def call(self, x):
return self.dense_2(self.dense_1(x))
model = MyModel()
model.build((None, 3))
plot_model(model, "subclassed.png")
plot_model(model, "subclassed-show_shapes.png", show_shapes=True)
plot_model(
model,
"subclassed-show_shapes-show_dtype.png",
show_shapes=True,
show_dtype=True,
)
plot_model(
model,
"subclassed-show_shapes-show_dtype-show_layer_names.png",
show_shapes=True,
show_dtype=True,
show_layer_names=True,
)
plot_model(
model,
"subclassed-show_shapes-show_dtype-show_layer_names-show_layer_activations.png",
show_shapes=True,
show_dtype=True,
show_layer_names=True,
show_layer_activations=True,
)
plot_model(
model,
"subclassed-show_shapes-show_dtype-show_layer_names-show_layer_activations-show_trainable.png",
show_shapes=True,
show_dtype=True,
show_layer_names=True,
show_layer_activations=True,
show_trainable=True,
)
plot_model(
model,
"subclassed-show_shapes-show_dtype-show_layer_names-show_layer_activations-show_trainable-LR.png",
show_shapes=True,
show_dtype=True,
show_layer_names=True,
show_layer_activations=True,
show_trainable=True,
rankdir="LR",
)
plot_model(
model,
"subclassed-show_layer_activations-show_trainable.png",
show_layer_activations=True,
show_trainable=True,
)
plot_model(
model,
"subclassed-show_shapes-show_layer_activations-show_trainable.png",
show_shapes=True,
show_layer_activations=True,
show_trainable=True,
)
def plot_nested_functional_model():
inputs = keras_core.Input((3,))
x = keras_core.layers.Dense(4, activation="relu")(inputs)
x = keras_core.layers.Dense(4, activation="relu")(x)
outputs = keras_core.layers.Dense(4, activation="relu")(x)
inner_model = keras_core.Model(inputs, outputs)
inputs = keras_core.Input((3,))
x = keras_core.layers.Dense(4, activation="relu", trainable=False)(inputs)
residual = x
x = inner_model(x)
x += residual
residual = x
x = keras_core.layers.Dense(4, activation="relu")(x)
x = keras_core.layers.Dense(4, activation="relu")(x)
x = keras_core.layers.Dense(4, activation="relu")(x)
x += residual
x = keras_core.layers.Dropout(0.5)(x)
outputs = keras_core.layers.Dense(1, activation="sigmoid")(x)
model = keras_core.Model(inputs, outputs)
plot_model(model, "nested-functional.png", expand_nested=True)
plot_model(
model,
"nested-functional-show_shapes.png",
show_shapes=True,
expand_nested=True,
)
plot_model(
model,
"nested-functional-show_shapes-show_dtype.png",
show_shapes=True,
show_dtype=True,
expand_nested=True,
)
plot_model(
model,
"nested-functional-show_shapes-show_dtype-show_layer_names.png",
show_shapes=True,
show_dtype=True,
show_layer_names=True,
expand_nested=True,
)
plot_model(
model,
"nested-functional-show_shapes-show_dtype-show_layer_names-show_layer_activations.png",
show_shapes=True,
show_dtype=True,
show_layer_names=True,
show_layer_activations=True,
expand_nested=True,
)
plot_model(
model,
"nested-functional-show_shapes-show_dtype-show_layer_names-show_layer_activations-show_trainable.png",
show_shapes=True,
show_dtype=True,
show_layer_names=True,
show_layer_activations=True,
show_trainable=True,
expand_nested=True,
)
plot_model(
model,
"nested-functional-show_shapes-show_dtype-show_layer_names-show_layer_activations-show_trainable-LR.png",
show_shapes=True,
show_dtype=True,
show_layer_names=True,
show_layer_activations=True,
show_trainable=True,
rankdir="LR",
expand_nested=True,
)
plot_model(
model,
"nested-functional-show_layer_activations-show_trainable.png",
show_layer_activations=True,
show_trainable=True,
expand_nested=True,
)
plot_model(
model,
"nested-functional-show_shapes-show_layer_activations-show_trainable.png",
show_shapes=True,
show_layer_activations=True,
show_trainable=True,
expand_nested=True,
)
if __name__ == "__main__":
plot_sequential_model()
plot_functional_model()
plot_subclassed_model()
plot_nested_functional_model()