Source code for enchanter.utils.visualize
import io
import sys
from typing import Tuple
import torch
import netron
__all__ = ["with_netron"]
[docs]def with_netron(
model: torch.nn.Module,
dummy: Tuple[torch.Tensor, ...],
backend: str = "onnx",
open_browser: bool = True,
port: int = 8080,
host: str = "localhost",
):
"""
Visualize the PyTorch graph in a browser.
Examples:
>>> from enchanter.addons.layers import AutoEncoder
>>> x = torch.randn(1, 32) # [N, in_features]
>>> model = AutoEncoder([32, 16, 8, 2])
>>> with_netron(model, (x, ))
Warnings:
Models that cannot be graphed using TorchScript or ONNX cannot be visualized.
Args:
model: PyTorch model
dummy: dummy input for generate graph
backend: specified graph format. [torchscript or onnx]. default onnx.
open_browser: if True, open browser.
port: port number. default: 8080.
host: hostname. default: localhost.
"""
if backend.lower() == "torchscript":
extension = "pth"
elif backend.lower() == "onnx":
extension = "onnx"
else:
raise ValueError("Unknown backend: {}".format(backend))
model_name: str = model.__class__.__name__
buffer = io.BytesIO()
if extension == "pth":
model = torch.jit.trace(model, dummy)
torch.jit.save(model, buffer)
else:
torch.onnx.export(model, dummy, buffer)
netron.serve("{}.{}".format(model_name, extension), buffer.getvalue(), browse=open_browser, port=port, host=host)
sys.stdout.write("Press CTRL+C to quit.\n")
netron.wait()