Вывод структуры модели в PyTorch аналогично model.summary() в Keras
Быстрый ответ
Чтобы получить суммарную информацию о модели в PyTorch, вы можете воспользоваться библиотекой torchinfo
. Для её установки используйте команду pip install torchinfo
. Получить сводку модели можно с помощью функции summary
, передав в качестве параметров саму модель и размерность входного тензора:
from torchinfo import summary
# model – здесь указывается ваша PyTorch модель
# input_size – размерность входного тензора для вашей модели
summary(model, input_size=(3, 224, 224))
Этим способом можно быстро получить всю необходимую информацию о слоях модели, их параметрах и формате выходных тензоров, что незаменимо при проверке правильности архитектуры.
Детальный анализ с pytorch-summary
Библиотека torchinfo
предоставляет информацию в обобщённом виде. Но если необходим более глубокий анализ модели, можно воспользоваться pytorch-summary
. Это позволит получить информацию о числе параметров и использовании памяти, что необходимо при оптимизации её использования. Если вы работаете не на GPU, замените значение 'cuda'
на 'cpu'
.
from torchsummary import summary
# Перед входом в детали обязательно укажите корректное устройство – 'cuda' или 'cpu'
model.to('cuda')
summary(model, (3, 224, 224))
Определение обучаемых и необучаемых параметров
Важной стадией в настройке модели является определение обучаемых слоёв. Следующий код поможет выделить обучаемые параметры:
print("Слои подлежащие обучению:")
for name, param in model.named_parameters():
if param.requires_grad:
print(name)
# Эти слои обновляются в процессе обучения
Работа с динамическими входами через torchinfo
PyTorch способен динамически воздействовать на граф вычислений, влияя на архитектуру модели. С помощью torchinfo
можно учитывать различные размеры входных данных:
summary(model, input_data=(input1, input2, ...))
# Благодаря разновидностям размеров входных данных, модель можно адаптировать под разные задачи
Визуализация
Можно представить модель PyTorch как механизм, где каждая деталь взаимодействует с другой:
Слой | Формат вывода | Параметры |
---|---|---|
Conv2d | [1, 64, 24, 24] | 🔧 Ядра: 320 |
ReLU | [1, 64, 24, 24] | 🛡️ Без параметров |
MaxPool2d | [1, 64, 12, 12] | 📐 Размер: 0 |
Linear | [1, 1000] | 💡 Веса: 96000 |
Эта таблица наглядно демонстрирует особенности каждого компонента модели и помогает в очень детальной её настройке.
Всего параметров: 🔢 123,456 Обучаемые параметры: 🏋️♀️ 123,000 Необучаемые параметры: 🔒 456
Альтернативные методы в случае невозможности использования внешних зависимостей
Если использование внешних библиотек запрещено, можно использовать простой метод state_dict()
, либо просто вывести модель с помощью print(model)
для получения базового изображения структуры модели:
print("Слои и их параметры:")
for param_tensor in model.state_dict():
print(param_tensor, "\t", model.state_dict()[param_tensor].size())
# Традиционный подход, когда сторонние библиотеки не доступны
Создание собственного метода для сводки модели
Использование собственных методов позволяет настраивать инструменты под конкретные задачи. Вот пример функции для анализа слоёв модели:
def model_summary(model):
print("Слой \t\t Тип \t\t количество параметров")
for name, layer in model.named_modules():
# Пакеты не всегда необходимы
if len(list(layer.children())) == 0:
params = sum(p.numel() for p in layer.parameters())
print(f"{name} \t {type(layer).__name__} \t {params}")
model_summary(your_model)