一、Tensorboard PyTorch教程
PyTorch是一种基于Python的深度学习框架,这个框架在构建计算图和自动求导的方面非常灵活方便。Tensorboard是PyTorch的一个可视化工具,可以帮助用户更好的分析和理解模型。
下面是一个简单的PyTorch Tensorboard示例,展示了如何在PyTorch中实现一个简单的神经网络,并且使用tensorboard插件来监控训练过程中的各种指标。
import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.utils.tensorboard import SummaryWriter
# 定义神经网络模型
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(784, 256)
self.fc2 = nn.Linear(256, 10)
def forward(self, x):
x = F.relu(self.fc1(x))
x = self.fc2(x)
return x
# 加载MNIST数据集
train_set = torchvision.datasets.MNIST(root='mnist', train=True, download=True, transform=torchvision.transforms.ToTensor())
train_loader = torch.utils.data.DataLoader(train_set, batch_size=128, shuffle=True)
# 定义损失函数和优化器
net = Net()
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(net.parameters(), lr=0.01, momentum=0.5)
# 设置tensorboard
writer = SummaryWriter('log')
# 开始训练
for epoch in range(10):
for batch_idx, (data, target) in enumerate(train_loader):
optimizer.zero_grad()
output = net(data.view(-1, 784))
loss = criterion(output, target)
loss.backward()
optimizer.step()
# 使用tensorboard监控
if batch_idx % 10 == 0:
writer.add_scalar('Loss/train', loss.item(), epoch*len(train_loader)+batch_idx)
writer.add_scalar('Accuracy/train', accuracy, epoch*len(train_loader)+batch_idx)
writer.close() # 记得关闭tensorboard
通过tensorboard,我们可以监控损失值和准确率,并且可视化地展示出来。这样就方便我们对训练过程进行分析和调试。
二、Tensorboard Loss曲线
Loss曲线是神经网络训练中非常重要的一部分,因为它可以帮助我们判断模型是否收敛。通过tensorboard,我们可以轻松地获得训练过程中的loss曲线。
# 以上面PyTorch示例为例
# 定义 tensorboard writer
writer = SummaryWriter('log')
for epoch in range(10):
for batch_idx, (data, target) in enumerate(train_loader):
optimizer.zero_grad()
output = net(data.view(-1, 784))
loss = criterion(output, target)
loss.backward()
optimizer.step()
writer.add_scalar('Loss/train', loss.item(), epoch*len(train_loader)+batch_idx)
# 打印 loss
if batch_idx % 100 == 0:
print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
epoch, batch_idx * len(data), len(train_loader.dataset),
100. * batch_idx / len(train_loader), loss.item()))
writer.close()
以上代码中,我们可以看到,在每个epoch训练完成后,都会输出一个batch的loss值。同时也将loss值添加到tensorboard中,这样就可以观察到训练过程中的loss曲线。
三、Tensorboard M是什么单位
在使用 tensorboard 监控训练过程的时候,许多人会注意到一些参数的单位问题,比如说 learning rate 、batch size 等。而 M 是什么单位也是一个问题。其实M是指mini-batch的简称。
因为数据集可能非常大,不能一次性将所有的数据加载到内存中。所以我们选择使用mini-batch的方式,每次从数据集中随机抽取一个小批量的数据进行训练。使用Tensorboard监控训练过程中的参数时,通常会将M这个参数添加到name中表示。
四、Tensorboard Tensorflow教程
TensorFlow是一个使用数据流图进行数值计算的开源软件库,广泛应用于深度学习等领域中。Tensorboard也是TensorFlow中重要的一个工具,可以帮助我们更好地理解和调试模型。
下面是一个简单的TensorFlow Tensorboard示例,展示了如何在TensorFlow中实现一个简单的神经网络,并且使用tensorboard插件来监控训练过程中的各种指标。
import tensorflow as tf
# 加载MNIST数据集
(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()
# 数据预处理
train_images = train_images / 255.0
test_images = test_images / 255.0
# 定义神经网络模型
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation=tf.nn.relu),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
# 定义优化器和损失函数
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 设置tensorboard
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir='logs')
# 开始训练
model.fit(train_images, train_labels, epochs=5, callbacks=[tensorboard_callback])
通过tensorboard,我们可以监控各种指标,包括训练数据的准确率、损失函数值、测试数据的准确率等等。
五、Tensorboard可视化模型
Tensorboard除了可以帮助我们监控训练过程中的各种指标之外,还可以帮助我们理解和可视化模型。我们可以使用Tensorboard更好地理解模型的结构和组成部分。
import torch
import torch.nn as nn
from torch.utils.tensorboard import SummaryWriter
# 定义神经网络模型
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(784, 256)
self.fc2 = nn.Linear(256, 10)
def forward(self, x):
x = F.relu(self.fc1(x))
x = self.fc2(x)
return x
# 设置tensorboard
writer = SummaryWriter('log')
# 可视化模型
model = Net()
data = torch.rand(1, 784)
writer.add_graph(model, data)
writer.close()
上述代码中,我们使用了 PyTorch 的 nn.Module 类来定义了一个包含两个全连接层的神经网络模型。然后我们使用 tensorboard.add_graph 函数将模型可视化出来。
当然这些只是入门级的Tensorboard教程。当我们在研究一个更加复杂的神经网络模型的时候,还需要去学习和使用其他高级的Tensorboard函数。