Annuaire d'articles
1. Introduction à Tensorboard
Tensorboard est un outil de visualisation intégré de tensorflow, qui rend la compréhension, le débogage et l'optimisation du programme tensorflow plus faciles et plus efficaces en visualisant les informations du fichier journal généré par le programme tensorflow. Cela peut nous aider à comprendre le processus d'apprentissage de l'ensemble du réseau neuronal, la distribution des données, les goulots d'étranglement des performances, etc.
Site officiel : https://tensorflow.google.cn/tensorboard
TensorBoard fournit la visualisation et les outils nécessaires aux expériences d'apprentissage automatique :
- Suivez et visualisez des mesures telles que la perte et la précision
- Visualiser des diagrammes de modèles (opérations et couches)
- Afficher des histogrammes de poids, de biais ou d'autres tenseurs au fil du temps
- Projeter l'intégration dans un espace de dimension inférieure
- Afficher des images, du texte et des données audio
- Disséquer un programme TensorFlow
- et plus
Le processus de visualisation TensorBoardX doit d'abord écrire du code Python pour enregistrer les données à visualiser dans le fichier d'événement, puis utiliser TensorBoardX pour lire le fichier d'événement et l'afficher sur la page Web. TensorBoard prend actuellement en charge 7 visualisations, scalaires, images, audio, graphiques, distributions, histogrammes et intégrations.
URL github : https://github.com/lanpa/tensorboardX
2. Installation et utilisation du Tensorboard
Vous devez d’abord installer le tensorboard
#安装tensorboard
pip install tensorboard
#安装tensorboardX
pip install tensorboardX
#安装crc32c加速
pip install crc32c
Une fois l'installation terminée, exécutez une commande indépendante comme visdom tensorboard --logdir logs
pour le démarrer. Le port par défaut est 6006. Ouvrez-le dans un navigateur http://localhost:6006/
pour voir la page Web. Il est préférable d'utiliser Chrome, d'autres navigateurs peuvent ne pas se charger.
Voici un exemple d'exécution du code sur le site officiel de GitHub :
Code de téléchargement : https://github.com/lanpa/tensorboardX
Suivez les étapes pour exécuter le code
tableau tenseur ouvert,
Tapez dans votre navigateur :
http://localhost:6006/
3. Introduction de la page dans Tensorboard
page | Pour plus de détails, veuillez vous référer au site officiel |
---|---|
SCALAIRE | Résumer et enregistrer les données scalaires, généralement utilisées pour visualiser le taux de précision (val acc), la valeur de perte (perte de train/test), le taux d'apprentissage (taux d'apprentissage), les poids et les biais de chaque couche pendant le processus de formation. La courbe de changement des statistiques ( moyenne, standard, max/min), etc. |
IMAGES | Visualisez les images de formation/test ou les cartes de fonctionnalités utilisées dans le cycle de formation en cours |
GRAPHIQUES | Visualisez la structure du graphique de calcul et les informations sur le graphique de calcul, généralement utilisées pour montrer la structure du réseau ainsi que la mémoire et le temps consommés par l'entraînement sur chaque appareil. |
HISTOGRAMMES | Visualisez la distribution des valeurs du tenseur et enregistrez l'histogramme de la variable (le tenseur statistique change avec le nombre d'itérations) |
Distribution | Graphique de partition montrant les données enregistrées pendant l'entraînement. |
PROJECTEUR | Nom complet Embedding Projecteur vecteur haute dimension pour la visualisation |
l'audio | Affiche l'audio enregistré pendant l'entraînement. |
Intégrations | Division projetée après affichage des vecteurs de mots. |
4. Visualisation dans PyTorch
4.1 Affichage des images
add_image(tag, img_tensor, global_step=None, walltime=None, dataformats='CHW')
#tag:图像的标签名,图像的唯一标识
#img_tensor:图像数据,需要注意尺度
#global_step:记录这是第几个子图
#dataformats:数据形式,取值有'CHW','HWC','HW'。如果像素值在 [0, 1] 之间,那么默认会乘以 255,放大到 [0, 255] 范围之间。如果有大于 1 的像素值,认为已经是 [0, 255] 范围,那么就不会放大。
Exemple de code :
import torch
import numpy as np
import torch.nn as nn
import torch.nn.functional as F
from PIL import Image
from torchvision import transforms
from torchvision import models,datasets
from torch.utils.tensorboard import SummaryWriter
GZ_img = Image.open('G:\Desktop\关注我呀.jpg')
print(GZ_img.size)
#变成224x224的图片
transform_224 = transforms.Compose([
transforms.Resize(224),
transforms.CenterCrop(224),
transforms.ToTensor(),
])
GZ_img_224=transform_224(GZ_img )
writer = SummaryWriter(log_dir='./logs', comment='GZ image') # 这里的logs要与--logdir的参数一样
writer.add_image("GZ",cat_img_224)
writer.close()# 执行close立即刷新,否则将每120秒自动刷新
Tableau tenseur ouvert :
tensorboard --logdir=exécute
Tapez dans votre navigateur :
http://localhost:6006/
4.2 Fonction de perte de mise à jour
x = torch.FloatTensor([100])
y = torch.FloatTensor([500])
for epoch in range(30):
x = x * 1.2
y = y / 1.1
loss = np.random.random()
with SummaryWriter(log_dir='./logs', comment='train') as writer: #可以直接使用python的with语法,自动调用close方法
#数据分布直方图
writer.add_histogram('his/x', x, epoch)
writer.add_histogram('his/y', y, epoch)
#绘制x,y随epoch变化图像
writer.add_scalar('data/x', x, epoch)
writer.add_scalar('data/y', y, epoch)
#损失函数图像
writer.add_scalar('data/loss', loss, epoch)
writer.add_scalars('data/data_group', {
'x': x,
'y': y}, epoch)
Histogramme de distribution des données : la position sur la figure indique que 234 sont apparus une fois à la septième époque
Les figures suivantes sont des diagrammes de distribution de données
4.3 Utilisation de PROJECTOR pour visualiser des vecteurs de grande dimension
add_embedding enregistre le vecteur d'intégration et prend en charge l'analyse visuelle 2D/3D. En réduisant les caractéristiques de haute dimension à un plan bidimensionnel ou à un affichage spatial tridimensionnel, il nous est pratique d'effectuer une analyse de corrélation.
add_embedding(mat, metadata=None, label_img=None, global_step=None, tag='default', metadata_header=None)
#add_embedding参数:mat (torch.Tensor or numpy.array):一个矩阵,每一行都是数据点的特征向量,要求形状(N, D),其中 N 是数据数量,D 是特征维度。
#metadata (list):标签列表,每个元素将被转换为字符串
#label_img (torch.Tensor):图像对应每个数据点,要求形状(N,C,H,W)。
#global_step (int):要记录的全局步长值
#tag (string):嵌入的名称
Exemple de code :
from torch.utils.tensorboard import SummaryWriter
import torchvision
writer = SummaryWriter('exp1')
num = 200#取MNIST训练集中的200个数据添加到Summary
mnist = torchvision.datasets.MNIST('mnist', download=True)
mat = mnist.train_data.reshape((-1, 28 * 28))[:num,:]#图像展开成一维向量
metadata = mnist.train_labels[:num]
label_img = mnist.train_data[:num,:,:].reshape((-1, 1, 28, 28)).float()/255#归一化
writer.add_embedding(mat,metadata=metadata,label_img = label_img,global_step=0)
writer.close()
4.4 Dessiner la structure du réseau
Dans pytorch, nous pouvons utiliser print pour imprimer directement la structure du réseau, mais cette méthode a un mauvais effet de visualisation. Étant donné que pytorch utilise des calculs de graphiques dynamiques, nous devons ici effectuer manuellement une propagation vers l'avant.
Utilisez vgg16 comme affichage :
vgg16 = models.vgg16(pretrained=True) # 这里下载预训练好的模型
print(vgg16) # 打印一下这个模型
résultat:
VGG(
(features): Sequential(
(0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace=True)
(2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace=True)
(4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(5): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(6): ReLU(inplace=True)
(7): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(8): ReLU(inplace=True)
(9): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(10): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(11): ReLU(inplace=True)
(12): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(13): ReLU(inplace=True)
(14): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(15): ReLU(inplace=True)
(16): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(17): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(18): ReLU(inplace=True)
(19): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(20): ReLU(inplace=True)
(21): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(22): ReLU(inplace=True)
(23): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(24): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(25): ReLU(inplace=True)
(26): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(27): ReLU(inplace=True)
(28): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(29): ReLU(inplace=True)
(30): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(avgpool): AdaptiveAvgPool2d(output_size=(7, 7))
(classifier): Sequential(
(0): Linear(in_features=25088, out_features=4096, bias=True)
(1): ReLU(inplace=True)
(2): Dropout(p=0.5, inplace=False)
(3): Linear(in_features=4096, out_features=4096, bias=True)
(4): ReLU(inplace=True)
(5): Dropout(p=0.5, inplace=False)
(6): Linear(in_features=4096, out_features=1000, bias=True)
)
)
Visualisez avec le tableau tensoriel :
add_graph(model, input_to_model=None, verbose=False)
#model:模型,必须继承自 nn.Module
#input_to_model:输入给模型的数据,形状为 BCHW
#verbose:是否打印图结构信息
Exemple de code :
transform_2 = transforms.Compose([
transforms.Resize(224),
transforms.CenterCrop((224,224)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
])
#因为pytorch的是分批次进行的,所以我们这里建立一个批次为1的数据集
# np.newaxis,当作为第一个元素时对行增加一维,作为第二个元素时对列增加一个维度
vgg16_input=transform_2(cat_img)[np.newaxis]#
out = vgg16(vgg16_input)
_, preds = torch.max(out.data, 1)
label=preds.numpy()[0]
with SummaryWriter(log_dir='./exp1', comment='vgg161') as writer:
writer.add_graph(vgg16, vgg16_input)
Les références:
https://zhuanlan.zhihu.com/p/414644289
https://handbook.pytorch.wiki/chapter4/4.2.2-tensorboardx.html
Bienvenue pour prêter attention au compte public [Smart Construction Xiaoshuo] (partager la programmation informatique, l'intelligence artificielle, la construction intelligente, l'apprentissage quotidien et l'expérience de recherche scientifique, etc., invitez tout le monde à faire attention et à communiquer.)