
3 способа легко визуализировать модели машинного обучения кераса
10 августа 2025 г.Какие инструменты я могу использовать для визуализации моделей Keras?
Старый клише «Картинка стоит тысячи слов» может быть еще более правдой при работе со сложными моделями машинного обучения. Если вы не благословлены фотографической памятью, вы можете быстро потерять отслеживание архитектуры модели при простой чтении кода.
К счастью, есть несколько простых способов визуализации моделей машинного обучения. Это руководство фокусируется на визуализации моделей Keras и использует следующую модель («Тестовая модель») для демонстрации:
def build_model(pad_len, imu_dim, tof_dim, n_classes):
def time_sum(x):
return K.sum(x, axis=1)
def squeeze_last_axis(x):
return tf.squeeze(x, axis=-1)
def expand_last_axis(x):
return tf.expand_dims(x, axis=-1)
filters_l1 = 64
kernel_l1 = 3
filters_l2 = 128
kernel_l2 = 5
reduction = 8
pool_size = 2
drop = 0.3
wd = 1e-4
inp = Input(shape=(pad_len, imu_dim + tof_dim))
imu = Lambda(lambda t: t[:, :, :imu_dim])(inp)
tof = Lambda(lambda t: t[:, :, imu_dim:])(inp)
# First CNN branch
shortcut_1 = imu
x1 = Conv1D(filters_l1, kernel_l1, padding="same", use_bias=False, kernel_regularizer=l2(wd))(imu)
x1 = BatchNormalization()(x1)
x1 = Activation("relu")(x1)
x1 = Conv1D(filters_l1, kernel_l1, padding="same", use_bias=False, kernel_regularizer=l2(wd))(x1)
x1 = BatchNormalization()(x1)
x1 = Activation("relu")(x1)
ch = x1.shape[-1]
se = GlobalAveragePooling1D()(x1)
se = Dense(ch//reduction, activation="relu")(se)
se = Dense(ch, activation="sigmoid")(se)
se = Reshape((1, ch))(se)
x1 = Multiply()([x1, se])
if shortcut_1.shape[-1] != filters_l1:
shortcut_1 = Conv1D(filters_l1, 1, padding="same", use_bias=False, kernel_regularizer=l2(wd))(shortcut_1)
shortcut_1 = BatchNormalization()(shortcut_1)
x1 = add([x1, shortcut_1])
x1 = Activation("relu")(x1)
x1 = MaxPooling1D(pool_size)(x1)
x1 = Dropout(drop)(x1)
shortcut_2 = x1
x1 = Conv1D(filters_l2, kernel_l2, padding="same", use_bias=False, kernel_regularizer=l2(wd))(x1)
x1 = BatchNormalization()(x1)
x1 = Activation("relu")(x1)
x1 = Conv1D(filters_l2, kernel_l2, padding="same", use_bias=False, kernel_regularizer=l2(wd))(x1)
x1 = BatchNormalization()(x1)
x1 = Activation("relu")(x1)
ch = x1.shape[-1]
se = GlobalAveragePooling1D()(x1)
se = Dense(ch//reduction, activation="relu")(se)
se = Dense(ch, activation="sigmoid")(se)
se = Reshape((1, ch))(se)
x1 = Multiply()([x1, se])
if shortcut_2.shape[-1] != filters_l2:
shortcut_2 = Conv1D(filters_l2, 1, padding="same", use_bias=False, kernel_regularizer=l2(wd))(shortcut_2)
shortcut_2 = BatchNormalization()(shortcut_2)
x1 = add([x1, shortcut_2])
x1 = Activation("relu")(x1)
x1 = MaxPooling1D(pool_size)(x1)
x1 = Dropout(drop)(x1)
# Second CNN branch
x2 = Conv1D(filters_l1, kernel_l1, padding="same", use_bias=False, kernel_regularizer=l2(wd))(tof)
x2 = BatchNormalization()(x2)
x2 = Activation("relu")(x2)
x2 = MaxPooling1D(2)(x2)
x2 = Dropout(0.2)(x2)
x2 = Conv1D(filters_l2, kernel_l1, padding="same", use_bias=False, kernel_regularizer=l2(wd))(x2)
x2 = BatchNormalization()(x2)
x2 = Activation("relu")(x2)
x2 = MaxPooling1D(2)(x2)
x2 = Dropout(0.2)(x2)
merged = Concatenate()([x1, x2])
xa = Bidirectional(LSTM(128, return_sequences=True, kernel_regularizer=l2(wd)))(merged)
xb = Bidirectional(GRU(128, return_sequences=True, kernel_regularizer=l2(wd)))(merged)
xc = GaussianNoise(0.09)(merged)
xc = Dense(16, activation="elu")(xc)
x = Concatenate()([xa, xb, xc])
x = Dropout(0.4)(x)
score = Dense(1, activation="tanh")(x)
score = Lambda(squeeze_last_axis)(score)
weights = Activation("softmax")(score)
weights = Lambda(expand_last_axis)(weights)
context = Multiply()([x, weights])
x = Lambda(time_sum)(context)
x = Dense(256, use_bias=False, kernel_regularizer=l2(wd))(x)
x = BatchNormalization()(x)
x = Activation("relu")(x)
x = Dropout(0.5)(x)
x = Dense(128, use_bias=False, kernel_regularizer=l2(wd))(x)
x = BatchNormalization()(x)
x = Activation("relu")(x)
x = Dropout(0.3)(x)
out = Dense(n_classes, activation="softmax", kernel_regularizer=l2(wd))(x)
return Model(inp, out)
Как видите, приведенная выше модель достаточно сложна. Он используется для изучения паттернов из межтегенной измерения («IMU») и других данных датчиков. Чтобы быть ясным, я не строил это. Это ссылается из этогоЗаписная книжка KaggleПолем Как вы заметите, определение модели в исходной ноутбуке использует пользовательские объекты для инкапсуляции определенной логики, которая повторяется в дизайне модели. Я решил удалить эти объекты и явность определить логику «встроенная», чтобы лучше просмотреть полную структуру модели в моей слегка измененной реализации.
В этом руководстве обсуждается следующие 3 инструмента визуализации:
Netron
АVisualkerasПакет Python
Тенсорборд
1. Использование Netron для визуализации модели кераса
NetronВозможно, самый простой инструмент визуализации. Вам просто нужно нажать наОткрытая модель ...Кнопка на домашней странице, а затем выберите модель, которую вы хотите визуализировать. Вот визуализация первых нескольких слоев тестовой модели:
Как только модель загружена, вы можете нажать на узлы на графике модели, чтобы просмотреть их свойства:
Вы можете экспортировать график модели в.png
и.svg
Форматы, нажав на значок главного меню и выбрав соответствующую опцию экспорта.
2. Использованиеvisualkeras
Чтобы визуализировать свою модель кераса
Аvisualkeras
Пакет Python также очень прост в использовании и предлагает удобный способ визуализации модели перед тренировкой. Вы можете установить пакет для своего проекта машинного обучения, используяpip
:
pip install visualkeras
Следующий код Python демонстрирует базовое использование пакета:
# [Imports for your Keras model here...]
import visualkeras
# [Utility function to build your Keras model...]
def build_model(model_params):
# [Your model definition here...]
# [Build the model...]
model = build_model(model_params)
# [Visualize the model...]
visualkeras.graph_view(model).show()
Аgraph_view
Метод создает следующую графику первых нескольких слоев тестовой модели:
Пакет также предлагаетlayered_view
Метод, который создает графику модельных слоев, отличающихся типом и размером:
visualkeras.layered_view(model, legend=True).show()
Как видно, прохождениеTrue
вlegend
Параметр генерирует легенду, описывающую каждый слой:
Одно преимуществоvisualkeras
Пакет - это элемент управления, который он предлагает, как отображается графика. Вы можете просмотреть параметры, используемые для изменения графического вывода наДокументация пакетастраница.
3. ИспользованиеТенсорбордЧтобы визуализировать модель кераса
Тенсорбордявляется удобным вариантом для визуализации модели кераса, поскольку она установлена вместе сTensorflowПолем С небольшим «массаж» также можно использоватьТенсорбордВизуализировать структуру модели перед тренировкой.
3.1 Установкаjupyter-tensorboard
Упаковка
В этом разделе используетсяТенсорбордВ контекстеЖюрит -тетрадьПолем Это требует установкиjupyter-tensorboard
Пакет, который, в свою очередь, имеет пару зависимостей. Используйте следующие шаги для установкиjupyter-tensorboard
:
Установить
jupyter
пакет с использованиемpip install jupyer
ПолемИспользуйте
pip install --upgrade notebook==6.4.12
командоватьпонижатьаnotebook
пакет, который был установлен сjupyter
Процесс установки упаковки. Версияnotebook
Пакет установлен сjupyter
который есть7.4.5
На момент написания этой статьи не совместимо сjupyter-tensorboard
Полем Этот этап понижения устанавливает версиюnotebook
пакет, который совместим сjupyter-tensorboard
Полем Смотрите этоСтатья StackoverflowДля получения дополнительной информации.Установить
jupyter-tensorboard
пакет с использованиемpip install jupyter-tensorboard
Полем
3.2 Настройка ноутбука Jupyter для визуализации модели кераса
Как упомянуто выше, вы можете визуализировать модель кераса вТенсорбордПеред тренировкой. Следующий код ноутбука Jupyter демонстрирует, как это сделать, используя тестовую модель из вступительного раздела:
# Cell 1: Imports
import tensorflow as tf
from tensorflow.keras.models import Model, load_model
from tensorflow.keras.layers import (
Input, Conv1D, BatchNormalization, Activation, add, MaxPooling1D, Dropout,
Bidirectional, LSTM, GlobalAveragePooling1D, Dense, Multiply, Reshape,
Lambda, Concatenate, GRU, GaussianNoise
)
from tensorflow.keras.regularizers import l2
from tensorflow.keras import backend as K
# Cell 2: Set logs directory
LOG_DIR = "logs"
# Cell 3: Utility function to build model
# [`build-model` function for test model from introductory section here...]
# Cell 4: Build the model
model = build_model(398, 12, 335, 18)
# Cell 5: Compile the model
model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])
# Cell 6: Create a TensorBoard callback
tensorboard_callback = tf.keras.callbacks.TensorBoard(
log_dir=LOG_DIR,
histogram_freq=1,
write_graph=True,
profile_batch=0 # Disable profiling
)
# Cell 7: Create dummy `x` and `y` training inputs that match model input and output shapes
dummy_x_input = tf.random.normal((1, 398, 347)) # Batch size 1, input shape (398,347)
dummy_y_input = tf.random.normal((1, 18)) # Batch size 1, input shape (18, )
# Cell 8: "Train" the model for zero epochs to create a conceptual graph of the model
model.fit(dummy_x_input, dummy_y_input, epochs=0, batch_size=1, callbacks=[tensorboard_callback])
# Cell 9: Load the TensorBoard notebook extension
%load_ext tensorboard
# Cell 10: Launch TensorBoard
%tensorboard --logdir $LOG_DIR --host localhost
Если вы запускаете код ноутбука Jupyter, выше, последняя ячейка должна вывестиLaunching TensorBoard
Полем После завершения выполнения ячейки вы можете перейти кhttp://localhost:6006
Чтобы просмотретьТенсорбордприборная панель.
Вы можете изменить порт тензорборда, передав--port
вариант на%tensorboard
Волшебная команда, например,%tensorboard --logdir $LOG_DIR --host localhost --port 8088
Полем
Кончик:Я работаю в Windows 10, где я отметил какое -то любопытное поведение в отношении тензора. Чтобы заставить Tensorboard запускать правильно каждый раз, когда я запускаю ноутбук Jupyter, мне нужно сначала удалять все временные файлы вC:\Users\[MY_WINDOWS_USERNAME]\AppData\Local\Temp\.tensorboard-info
каталог.
3.3 Визуализация модели кераса с помощью Tensorboard
Tensorboard должен автоматически открываться дляГрафикиприборная панель. Если это не так, вы можете нажать наГрафикиопция меню или вы можете выбратьГрафикииз выпадающего меню.
ИзГрафикиПросмотреть, выберитеКонцептуальный графикЧтобы просмотреть структуру вашей модели. Первоначально вы должны увидеть один узел, представляющий всю модель. Дважды щелкните узел, чтобы увидеть структуру подсгласти.
Вы можете дважды щелкнуть по отдельным узлам в структуре подсмыка, чтобы просмотреть их свойства. Tensorboard также позволяет экспортировать график модели в.png
формат.
Заключение
Каждый метод визуализации, обсуждаемый выше, имеет свои плюсы и минусы. Netron чрезвычайно прост в использовании с обученными моделями, тогда какvisualkeras
Возможно, самый простой инструмент для использования с неподготовленными моделями. Как видно, Tensorboard также может использоваться с неподготовленными моделями, но для правильной настройки требуется немного больше работы.
Оригинал