Tensorboard使用介绍
知识点回顾:
- tensorboard的发展历史和原理
- tensorboard的常见操作
- tensorboard在cifar上的实战:MLP和CNN模型
效果展示如下,很适合拿去组会汇报撑页数:
作业:对resnet18在cifar10上采用微调策略下,用tensorboard监控训练过程。
PS:
- tensorboard和torch版本存在一定的不兼容性,如果报错请新建环境尝试。
- tensorboard的代码还有有一定的记忆量,实际上深度学习的经典代码都是类似于八股文,看多了就习惯了,难度远远小于考研数学等需要思考的内容
- 实际上对目前的ai而言,你只需要先完成最简单的demo,然后让他给你加上tensorboard需要打印的部分即可。---核心是弄懂tensorboard可以打印什么信息,以及如何看可视化后的结果,把ai当成记忆大师用到的时候通过它来调取对应的代码即可。
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
import matplotlib.pyplot as plt
import numpy as np
import os
# 设置中文字体支持
plt.rcParams["font.family"] = ["SimHei"]
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
# 检查GPU是否可用
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(f"使用设备: {device}")
# 1. 数据预处理
train_transform = transforms.Compose([
transforms.RandomCrop(32, padding=4),
transforms.RandomHorizontalFlip(),
transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.1),
transforms.RandomRotation(15),
transforms.ToTensor(),
transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010))
])
test_transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010))
])
# 2. 加载CIFAR-10数据集
train_dataset = datasets.CIFAR10(
root='./data',
train=True,
download=True,
transform=train_transform
)
test_dataset = datasets.CIFAR10(
root='./data',
train=False,
transform=test_transform
)
# 3. 创建数据加载器
batch_size = 64
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)
# 4. 定义CNN模型
class CNN(nn.Module):
def __init__(self):
super(CNN, self).__init__()
# 卷积块1
self.conv1 = nn.Conv2d(3, 32, 3, padding=1)
self.bn1 = nn.BatchNorm2d(32)
self.relu1 = nn.ReLU()
self.pool1 = nn.MaxPool2d(2)
# 卷积块2
self.conv2 = nn.Conv2d(32, 64, 3, padding=1)
self.bn2 = nn.BatchNorm2d(64)
self.relu2 = nn.ReLU()
self.pool2 = nn.MaxPool2d(2)
# 卷积块3
self.conv3 = nn.Conv2d(64, 128, 3, padding=1)
self.bn3 = nn.BatchNorm2d(128)
self.relu3 = nn.ReLU()
self.pool3 = nn.MaxPool2d(2)
# 全连接层
self.fc1 = nn.Linear(128 * 4 * 4, 512)
self.dropout = nn.Dropout(0.5)
self.fc2 = nn.Linear(512, 10)
def forward(self, x):
x = self.conv1(x)
x = self.bn1(x)
x = self.relu1(x)
x = self.pool1(x)
x = self.conv2(x)
x = self.bn2(x)
x = self.relu2(x)
x = self.pool2(x)
x = self.conv3(x)
x = self.bn3(x)
x = self.relu3(x)
x = self.pool3(x)
x = x.view(-1, 128 * 4 * 4)
x = self.fc1(x)
x = self.relu3(x)
x = self.dropout(x)
x = self.fc2(x)
return x
# 初始化模型并移至设备
model = CNN()
model = model.to(device)
# 定义损失函数、优化器和学习率调度器
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
scheduler = optim.lr_scheduler.ReduceLROnPlateau(
optimizer, mode='min', patience=3, factor=0.5, verbose=True
)
# TensorBoard 配置(自动创建不重复的日志目录)
log_dir = "runs/cifar10_cnn_exp"
if os.path.exists(log_dir):
version = 1
while os.path.exists(f"{log_dir}_v{version}"):
version += 1
log_dir = f"{log_dir}_v{version}"
writer = SummaryWriter(log_dir)
print(f"TensorBoard 日志目录: {log_dir}")
# 5. 训练函数(集成 TensorBoard 记录)
def train(model, train_loader, test_loader, criterion, optimizer, scheduler, device, epochs, writer):
model.train()
all_iter_losses = []
iter_indices = []
global_step = 0
# 记录模型结构和训练图像
dataiter = iter(train_loader)
images, labels = next(dataiter)
images = images.to(device)
writer.add_graph(model, images)
img_grid = torchvision.utils.make_grid(images[:8].cpu())
writer.add_image('原始训练图像(增强前)', img_grid, global_step=0)
for epoch in range(epochs):
running_loss = 0.0
correct = 0
total = 0
for batch_idx, (data, target) in enumerate(train_loader):
data, target = data.to(device), target.to(device)
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step()
# 记录迭代损失
iter_loss = loss.item()
all_iter_losses.append(iter_loss)
iter_indices.append(global_step + 1)
# 统计准确率
running_loss += iter_loss
_, predicted = output.max(1)
total += target.size(0)
correct += predicted.eq(target).sum().item()
# TensorBoard 记录
batch_acc = 100. * correct / total
writer.add_scalar('Train/Batch Loss', iter_loss, global_step)
writer.add_scalar('Train/Batch Accuracy', batch_acc, global_step)
writer.add_scalar('Train/Learning Rate', optimizer.param_groups[0]['lr'], global_step)
# 每200个batch记录参数直方图
if (batch_idx + 1) % 200 == 0:
for name, param in model.named_parameters():
writer.add_histogram(f'Weights/{name}', param, global_step)
if param.grad is not None:
writer.add_histogram(f'Gradients/{name}', param.grad, global_step)
# 控制台日志
if (batch_idx + 1) % 100 == 0:
print(f'Epoch: {epoch+1}/{epochs} | Batch: {batch_idx+1}/{len(train_loader)} '
f'| 单Batch损失: {iter_loss:.4f} | 累计平均损失: {running_loss/(batch_idx+1):.4f}')
global_step += 1
# 记录Epoch级训练指标
epoch_train_loss = running_loss / len(train_loader)
epoch_train_acc = 100. * correct / total
writer.add_scalar('Train/Epoch Loss', epoch_train_loss, epoch)
writer.add_scalar('Train/Epoch Accuracy', epoch_train_acc, epoch)
# 测试阶段
model.eval()
test_loss = 0
correct_test = 0
total_test = 0
wrong_images = []
wrong_labels = []
wrong_preds = []
with torch.no_grad():
for data, target in test_loader:
data, target = data.to(device), target.to(device)
output = model(data)
test_loss += criterion(output, target).item()
_, predicted = output.max(1)
total_test += target.size(0)
correct_test += predicted.eq(target).sum().item()
# 收集错误样本
wrong_mask = (predicted != target)
if wrong_mask.sum() > 0:
wrong_batch_images = data[wrong_mask][:8].cpu()
wrong_batch_labels = target[wrong_mask][:8].cpu()
wrong_batch_preds = predicted[wrong_mask][:8].cpu()
wrong_images.extend(wrong_batch_images)
wrong_labels.extend(wrong_batch_labels)
wrong_preds.extend(wrong_batch_preds)
# 记录Epoch级测试指标
epoch_test_loss = test_loss / len(test_loader)
epoch_test_acc = 100. * correct_test / total_test
writer.add_scalar('Test/Epoch Loss', epoch_test_loss, epoch)
writer.add_scalar('Test/Epoch Accuracy', epoch_test_acc, epoch)
# 可视化错误样本
if wrong_images:
wrong_img_grid = torchvision.utils.make_grid(wrong_images)
writer.add_image('错误预测样本', wrong_img_grid, epoch)
wrong_text = [f"真实: {classes[wl]}, 预测: {classes[wp]}"
for wl, wp in zip(wrong_labels, wrong_preds)]
writer.add_text('错误预测标签', '\n'.join(wrong_text), epoch)
# 更新学习率
scheduler.step(epoch_test_loss)
print(f'Epoch {epoch+1}/{epochs} 完成 | 训练准确率: {epoch_train_acc:.2f}% | 测试准确率: {epoch_test_acc:.2f}%')
# 关闭TensorBoard并绘制损失曲线
writer.close()
plot_iter_losses(all_iter_losses, iter_indices)
return epoch_test_acc
# 6. 绘制迭代损失曲线函数
def plot_iter_losses(losses, indices):
plt.figure(figsize=(10, 4))
plt.plot(indices, losses, 'b-', alpha=0.7, label='Iteration Loss')
plt.xlabel('Iteration(Batch序号)')
plt.ylabel('损失值')
plt.title('每个 Iteration 的训练损失')
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()
# CIFAR-10 类别名
classes = ('plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')
# 7. 执行训练
epochs = 20
print("开始使用CNN训练模型...")
print("训练后执行: tensorboard --logdir=runs 查看可视化")
final_accuracy = train(model, train_loader, test_loader, criterion, optimizer, scheduler, device, epochs, writer)
print(f"训练完成!最终测试准确率: {final_accuracy:.2f}%")
TensorBoard 日志目录: runs/cifar10_cnn_exp
开始使用CNN训练模型...
训练后执行: tensorboard --logdir=runs 查看可视化
Epoch: 1/20 | Batch: 100/782 | 单Batch损失: 1.8987 | 累计平均损失: 2.0473
Epoch: 1/20 | Batch: 200/782 | 单Batch损失: 1.5763 | 累计平均损失: 1.9201
Epoch: 1/20 | Batch: 300/782 | 单Batch损失: 1.4725 | 累计平均损失: 1.8510
Epoch: 1/20 | Batch: 400/782 | 单Batch损失: 1.6346 | 累计平均损失: 1.8075
Epoch: 1/20 | Batch: 500/782 | 单Batch损失: 1.6184 | 累计平均损失: 1.7714
Epoch: 1/20 | Batch: 600/782 | 单Batch损失: 1.4166 | 累计平均损失: 1.7340
Epoch: 1/20 | Batch: 700/782 | 单Batch损失: 1.3198 | 累计平均损失: 1.7109
Epoch 1/20 完成 | 训练准确率: 37.67% | 测试准确率: 51.67%
Epoch: 2/20 | Batch: 100/782 | 单Batch损失: 1.4704 | 累计平均损失: 1.4808
Epoch: 2/20 | Batch: 200/782 | 单Batch损失: 1.4521 | 累计平均损失: 1.4334
Epoch: 2/20 | Batch: 300/782 | 单Batch损失: 1.2865 | 累计平均损失: 1.3951
Epoch: 2/20 | Batch: 400/782 | 单Batch损失: 1.2665 | 累计平均损失: 1.3715
Epoch: 2/20 | Batch: 500/782 | 单Batch损失: 1.2725 | 累计平均损失: 1.3474
Epoch: 2/20 | Batch: 600/782 | 单Batch损失: 1.1385 | 累计平均损失: 1.3245
Epoch: 2/20 | Batch: 700/782 | 单Batch损失: 1.2831 | 累计平均损失: 1.3042
Epoch 2/20 完成 | 训练准确率: 53.26% | 测试准确率: 63.80%
Epoch: 3/20 | Batch: 100/782 | 单Batch损失: 1.2889 | 累计平均损失: 1.1706
Epoch: 3/20 | Batch: 200/782 | 单Batch损失: 0.7893 | 累计平均损失: 1.1467
Epoch: 3/20 | Batch: 300/782 | 单Batch损失: 1.1761 | 累计平均损失: 1.1357
Epoch: 3/20 | Batch: 400/782 | 单Batch损失: 0.9641 | 累计平均损失: 1.1311
Epoch: 3/20 | Batch: 500/782 | 单Batch损失: 1.0027 | 累计平均损失: 1.1210
Epoch: 3/20 | Batch: 600/782 | 单Batch损失: 0.9101 | 累计平均损失: 1.1117
Epoch: 3/20 | Batch: 700/782 | 单Batch损失: 1.2073 | 累计平均损失: 1.1032
Epoch 3/20 完成 | 训练准确率: 60.68% | 测试准确率: 67.95%
Epoch: 4/20 | Batch: 100/782 | 单Batch损失: 1.0803 | 累计平均损失: 1.0484
Epoch: 4/20 | Batch: 200/782 | 单Batch损失: 1.0465 | 累计平均损失: 1.0337
Epoch: 4/20 | Batch: 300/782 | 单Batch损失: 1.0871 | 累计平均损失: 1.0263
Epoch: 4/20 | Batch: 400/782 | 单Batch损失: 0.8972 | 累计平均损失: 1.0260
Epoch: 4/20 | Batch: 500/782 | 单Batch损失: 1.1755 | 累计平均损失: 1.0157
Epoch: 4/20 | Batch: 600/782 | 单Batch损失: 1.1488 | 累计平均损失: 1.0056
Epoch: 4/20 | Batch: 700/782 | 单Batch损失: 0.8496 | 累计平均损失: 1.0033
Epoch 4/20 完成 | 训练准确率: 64.47% | 测试准确率: 71.60%
Epoch: 5/20 | Batch: 100/782 | 单Batch损失: 0.6796 | 累计平均损失: 0.9412
Epoch: 5/20 | Batch: 200/782 | 单Batch损失: 1.0199 | 累计平均损失: 0.9391
Epoch: 5/20 | Batch: 300/782 | 单Batch损失: 0.7394 | 累计平均损失: 0.9375
Epoch: 5/20 | Batch: 400/782 | 单Batch损失: 1.0875 | 累计平均损失: 0.9402
Epoch: 5/20 | Batch: 500/782 | 单Batch损失: 0.7730 | 累计平均损失: 0.9394
Epoch: 5/20 | Batch: 600/782 | 单Batch损失: 1.0526 | 累计平均损失: 0.9349
Epoch: 5/20 | Batch: 700/782 | 单Batch损失: 0.9433 | 累计平均损失: 0.9315
Epoch 5/20 完成 | 训练准确率: 67.02% | 测试准确率: 73.65%
Epoch: 6/20 | Batch: 100/782 | 单Batch损失: 0.9564 | 累计平均损失: 0.8849
Epoch: 6/20 | Batch: 200/782 | 单Batch损失: 0.7790 | 累计平均损失: 0.8757
Epoch: 6/20 | Batch: 300/782 | 单Batch损失: 0.6307 | 累计平均损失: 0.8784
Epoch: 6/20 | Batch: 400/782 | 单Batch损失: 0.8731 | 累计平均损失: 0.8762
Epoch: 6/20 | Batch: 500/782 | 单Batch损失: 1.0062 | 累计平均损失: 0.8790
Epoch: 6/20 | Batch: 600/782 | 单Batch损失: 0.8409 | 累计平均损失: 0.8815
Epoch: 6/20 | Batch: 700/782 | 单Batch损失: 0.7364 | 累计平均损失: 0.8838
Epoch 6/20 完成 | 训练准确率: 68.94% | 测试准确率: 73.11%
Epoch: 7/20 | Batch: 100/782 | 单Batch损失: 0.9937 | 累计平均损失: 0.8394
Epoch: 7/20 | Batch: 200/782 | 单Batch损失: 0.7873 | 累计平均损失: 0.8455
Epoch: 7/20 | Batch: 300/782 | 单Batch损失: 0.6735 | 累计平均损失: 0.8413
Epoch: 7/20 | Batch: 400/782 | 单Batch损失: 1.0844 | 累计平均损失: 0.8434
Epoch: 7/20 | Batch: 500/782 | 单Batch损失: 1.0046 | 累计平均损失: 0.8435
Epoch: 7/20 | Batch: 600/782 | 单Batch损失: 0.9337 | 累计平均损失: 0.8426
Epoch: 7/20 | Batch: 700/782 | 单Batch损失: 0.8759 | 累计平均损失: 0.8434
Epoch 7/20 完成 | 训练准确率: 70.39% | 测试准确率: 76.19%
Epoch: 8/20 | Batch: 100/782 | 单Batch损失: 0.8458 | 累计平均损失: 0.8197
Epoch: 8/20 | Batch: 200/782 | 单Batch损失: 0.8156 | 累计平均损失: 0.8211
Epoch: 8/20 | Batch: 300/782 | 单Batch损失: 0.7666 | 累计平均损失: 0.8156
Epoch: 8/20 | Batch: 400/782 | 单Batch损失: 0.6120 | 累计平均损失: 0.8134
Epoch: 8/20 | Batch: 500/782 | 单Batch损失: 0.6858 | 累计平均损失: 0.8102
Epoch: 8/20 | Batch: 600/782 | 单Batch损失: 0.7514 | 累计平均损失: 0.8121
Epoch: 8/20 | Batch: 700/782 | 单Batch损失: 0.6480 | 累计平均损失: 0.8114
Epoch 8/20 完成 | 训练准确率: 71.51% | 测试准确率: 77.02%
Epoch: 9/20 | Batch: 100/782 | 单Batch损失: 0.7981 | 累计平均损失: 0.7802
Epoch: 9/20 | Batch: 200/782 | 单Batch损失: 0.7362 | 累计平均损失: 0.7854
Epoch: 9/20 | Batch: 300/782 | 单Batch损失: 0.9844 | 累计平均损失: 0.7890
Epoch: 9/20 | Batch: 400/782 | 单Batch损失: 0.8628 | 累计平均损失: 0.7902
Epoch: 9/20 | Batch: 500/782 | 单Batch损失: 0.6584 | 累计平均损失: 0.7813
Epoch: 9/20 | Batch: 600/782 | 单Batch损失: 0.7845 | 累计平均损失: 0.7785
Epoch: 9/20 | Batch: 700/782 | 单Batch损失: 0.7625 | 累计平均损失: 0.7808
Epoch 9/20 完成 | 训练准确率: 72.76% | 测试准确率: 75.81%
Epoch: 10/20 | Batch: 100/782 | 单Batch损失: 0.9217 | 累计平均损失: 0.7708
Epoch: 10/20 | Batch: 200/782 | 单Batch损失: 0.6924 | 累计平均损失: 0.7577
Epoch: 10/20 | Batch: 300/782 | 单Batch损失: 0.8563 | 累计平均损失: 0.7611
Epoch: 10/20 | Batch: 400/782 | 单Batch损失: 0.7075 | 累计平均损失: 0.7601
Epoch: 10/20 | Batch: 500/782 | 单Batch损失: 0.8329 | 累计平均损失: 0.7599
Epoch: 10/20 | Batch: 600/782 | 单Batch损失: 0.8095 | 累计平均损失: 0.7577
Epoch: 10/20 | Batch: 700/782 | 单Batch损失: 0.8299 | 累计平均损失: 0.7606
Epoch 10/20 完成 | 训练准确率: 73.43% | 测试准确率: 77.93%
Epoch: 11/20 | Batch: 100/782 | 单Batch损失: 0.5439 | 累计平均损失: 0.7166
Epoch: 11/20 | Batch: 200/782 | 单Batch损失: 0.5489 | 累计平均损失: 0.7403
Epoch: 11/20 | Batch: 300/782 | 单Batch损失: 0.6350 | 累计平均损失: 0.7432
Epoch: 11/20 | Batch: 400/782 | 单Batch损失: 0.8438 | 累计平均损失: 0.7419
Epoch: 11/20 | Batch: 500/782 | 单Batch损失: 0.7595 | 累计平均损失: 0.7411
Epoch: 11/20 | Batch: 600/782 | 单Batch损失: 0.8895 | 累计平均损失: 0.7448
Epoch: 11/20 | Batch: 700/782 | 单Batch损失: 0.7595 | 累计平均损失: 0.7465
Epoch 11/20 完成 | 训练准确率: 74.09% | 测试准确率: 78.10%
Epoch: 12/20 | Batch: 100/782 | 单Batch损失: 0.6579 | 累计平均损失: 0.7168
Epoch: 12/20 | Batch: 200/782 | 单Batch损失: 0.6543 | 累计平均损失: 0.7165
Epoch: 12/20 | Batch: 300/782 | 单Batch损失: 0.7679 | 累计平均损失: 0.7220
Epoch: 12/20 | Batch: 400/782 | 单Batch损失: 0.8142 | 累计平均损失: 0.7237
Epoch: 12/20 | Batch: 500/782 | 单Batch损失: 0.8004 | 累计平均损失: 0.7218
Epoch: 12/20 | Batch: 600/782 | 单Batch损失: 0.7744 | 累计平均损失: 0.7234
Epoch: 12/20 | Batch: 700/782 | 单Batch损失: 0.7173 | 累计平均损失: 0.7214
Epoch 12/20 完成 | 训练准确率: 74.68% | 测试准确率: 77.65%
Epoch: 13/20 | Batch: 100/782 | 单Batch损失: 0.6869 | 累计平均损失: 0.6944
Epoch: 13/20 | Batch: 200/782 | 单Batch损失: 0.6580 | 累计平均损失: 0.7084
Epoch: 13/20 | Batch: 300/782 | 单Batch损失: 0.6064 | 累计平均损失: 0.7080
Epoch: 13/20 | Batch: 400/782 | 单Batch损失: 0.7195 | 累计平均损失: 0.7179
Epoch: 13/20 | Batch: 500/782 | 单Batch损失: 1.0343 | 累计平均损失: 0.7175
Epoch: 13/20 | Batch: 600/782 | 单Batch损失: 0.5850 | 累计平均损失: 0.7148
Epoch: 13/20 | Batch: 700/782 | 单Batch损失: 0.5754 | 累计平均损失: 0.7128
Epoch 13/20 完成 | 训练准确率: 75.09% | 测试准确率: 77.66%
Epoch: 14/20 | Batch: 100/782 | 单Batch损失: 0.5283 | 累计平均损失: 0.6975
Epoch: 14/20 | Batch: 200/782 | 单Batch损失: 1.1302 | 累计平均损失: 0.7035
Epoch: 14/20 | Batch: 300/782 | 单Batch损失: 0.9454 | 累计平均损失: 0.6984
Epoch: 14/20 | Batch: 400/782 | 单Batch损失: 0.7083 | 累计平均损失: 0.6949
Epoch: 14/20 | Batch: 500/782 | 单Batch损失: 0.5797 | 累计平均损失: 0.6971
Epoch: 14/20 | Batch: 600/782 | 单Batch损失: 0.5849 | 累计平均损失: 0.6962
Epoch: 14/20 | Batch: 700/782 | 单Batch损失: 0.9050 | 累计平均损失: 0.6976
Epoch 14/20 完成 | 训练准确率: 75.49% | 测试准确率: 79.01%
Epoch: 15/20 | Batch: 100/782 | 单Batch损失: 0.2844 | 累计平均损失: 0.6537
Epoch: 15/20 | Batch: 200/782 | 单Batch损失: 1.1000 | 累计平均损失: 0.6781
Epoch: 15/20 | Batch: 300/782 | 单Batch损失: 0.8135 | 累计平均损失: 0.6796
Epoch: 15/20 | Batch: 400/782 | 单Batch损失: 0.6680 | 累计平均损失: 0.6832
Epoch: 15/20 | Batch: 500/782 | 单Batch损失: 0.5335 | 累计平均损失: 0.6831
Epoch: 15/20 | Batch: 600/782 | 单Batch损失: 0.7422 | 累计平均损失: 0.6872
Epoch: 15/20 | Batch: 700/782 | 单Batch损失: 0.6485 | 累计平均损失: 0.6897
Epoch 15/20 完成 | 训练准确率: 75.92% | 测试准确率: 79.58%
Epoch: 16/20 | Batch: 100/782 | 单Batch损失: 0.7250 | 累计平均损失: 0.6679
Epoch: 16/20 | Batch: 200/782 | 单Batch损失: 0.6936 | 累计平均损失: 0.6638
Epoch: 16/20 | Batch: 300/782 | 单Batch损失: 0.8627 | 累计平均损失: 0.6633
Epoch: 16/20 | Batch: 400/782 | 单Batch损失: 0.7659 | 累计平均损失: 0.6649
Epoch: 16/20 | Batch: 500/782 | 单Batch损失: 0.7195 | 累计平均损失: 0.6654
Epoch: 16/20 | Batch: 600/782 | 单Batch损失: 0.6420 | 累计平均损失: 0.6669
Epoch: 16/20 | Batch: 700/782 | 单Batch损失: 0.6305 | 累计平均损失: 0.6669
Epoch 16/20 完成 | 训练准确率: 76.55% | 测试准确率: 79.43%
Epoch: 17/20 | Batch: 100/782 | 单Batch损失: 0.7332 | 累计平均损失: 0.6623
Epoch: 17/20 | Batch: 200/782 | 单Batch损失: 0.6911 | 累计平均损失: 0.6589
Epoch: 17/20 | Batch: 300/782 | 单Batch损失: 0.6546 | 累计平均损失: 0.6595
Epoch: 17/20 | Batch: 400/782 | 单Batch损失: 0.5204 | 累计平均损失: 0.6593
Epoch: 17/20 | Batch: 500/782 | 单Batch损失: 0.7961 | 累计平均损失: 0.6638
Epoch: 17/20 | Batch: 600/782 | 单Batch损失: 0.6816 | 累计平均损失: 0.6633
Epoch: 17/20 | Batch: 700/782 | 单Batch损失: 0.5737 | 累计平均损失: 0.6634
Epoch 17/20 完成 | 训练准确率: 76.80% | 测试准确率: 80.08%
Epoch: 18/20 | Batch: 100/782 | 单Batch损失: 0.6912 | 累计平均损失: 0.6587
Epoch: 18/20 | Batch: 200/782 | 单Batch损失: 0.4426 | 累计平均损失: 0.6489
Epoch: 18/20 | Batch: 300/782 | 单Batch损失: 0.5549 | 累计平均损失: 0.6413
Epoch: 18/20 | Batch: 400/782 | 单Batch损失: 0.5941 | 累计平均损失: 0.6498
Epoch: 18/20 | Batch: 500/782 | 单Batch损失: 0.7530 | 累计平均损失: 0.6523
Epoch: 18/20 | Batch: 600/782 | 单Batch损失: 0.6738 | 累计平均损失: 0.6531
Epoch: 18/20 | Batch: 700/782 | 单Batch损失: 0.7091 | 累计平均损失: 0.6538
Epoch 18/20 完成 | 训练准确率: 77.14% | 测试准确率: 80.46%
Epoch: 19/20 | Batch: 100/782 | 单Batch损失: 0.5360 | 累计平均损失: 0.6525
Epoch: 19/20 | Batch: 200/782 | 单Batch损失: 0.4450 | 累计平均损失: 0.6557
Epoch: 19/20 | Batch: 300/782 | 单Batch损失: 0.5930 | 累计平均损失: 0.6473
Epoch: 19/20 | Batch: 400/782 | 单Batch损失: 0.5342 | 累计平均损失: 0.6479
Epoch: 19/20 | Batch: 500/782 | 单Batch损失: 0.5547 | 累计平均损失: 0.6504
Epoch: 19/20 | Batch: 600/782 | 单Batch损失: 0.7113 | 累计平均损失: 0.6451
Epoch: 19/20 | Batch: 700/782 | 单Batch损失: 0.9240 | 累计平均损失: 0.6441
Epoch 19/20 完成 | 训练准确率: 77.63% | 测试准确率: 80.91%
Epoch: 20/20 | Batch: 100/782 | 单Batch损失: 0.4548 | 累计平均损失: 0.6245
Epoch: 20/20 | Batch: 200/782 | 单Batch损失: 0.6227 | 累计平均损失: 0.6339
Epoch: 20/20 | Batch: 300/782 | 单Batch损失: 0.4400 | 累计平均损失: 0.6365
Epoch: 20/20 | Batch: 400/782 | 单Batch损失: 0.7307 | 累计平均损失: 0.6365
Epoch: 20/20 | Batch: 500/782 | 单Batch损失: 0.7341 | 累计平均损失: 0.6390
Epoch: 20/20 | Batch: 600/782 | 单Batch损失: 0.6771 | 累计平均损失: 0.6410
Epoch: 20/20 | Batch: 700/782 | 单Batch损失: 0.5984 | 累计平均损失: 0.6384
Epoch 20/20 完成 | 训练准确率: 77.50% | 测试准确率: 81.18%
路径如下:
在终端中打卡 一直显示没有日志。还没弄懂什么原因。
@浙大疏锦行