训练和测试的规范写法
单通道图片的规范写法
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
import matplotlib.pyplot as plt
import numpy as np# 设置中文字体支持
plt.rcParams["font.family"] = ["SimHei"]
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题# 1. 数据预处理
transform = transforms.Compose([transforms.ToTensor(), # 转换为张量并归一化到[0,1]transforms.Normalize((0.1307,), (0.3081,)) # MNIST数据集的均值和标准差
])# 2. 加载MNIST数据集
train_dataset = datasets.MNIST(root='./data',train=True,download=True,transform=transform
)test_dataset = datasets.MNIST(root='./data',train=False,transform=transform
)# 3. 创建数据加载器
batch_size = 64 # 每批处理64个样本
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)# 4. 定义模型、损失函数和优化器
class MLP(nn.Module):def __init__(self):super(MLP, self).__init__()self.flatten = nn.Flatten() # 将28x28的图像展平为784维向量self.layer1 = nn.Linear(784, 128) # 第一层:784个输入,128个神经元self.relu = nn.ReLU() # 激活函数self.layer2 = nn.Linear(128, 10) # 第二层:128个输入,10个输出(对应10个数字类别)def forward(self, x):x = self.flatten(x) # 展平图像x = self.layer1(x) # 第一层线性变换x = self.relu(x) # 应用ReLU激活函数x = self.layer2(x) # 第二层线性变换,输出logitsreturn x# 检查GPU是否可用
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")# 初始化模型
model = MLP()
model = model.to(device) # 将模型移至GPU(如果可用)criterion = nn.CrossEntropyLoss() # 交叉熵损失函数,适用于多分类问题
optimizer = optim.Adam(model.parameters(), lr=0.001) # Adam优化器# 5. 训练模型(记录每个 iteration 的损失)
def train(model, train_loader, test_loader, criterion, optimizer, device, epochs):model.train() # 设置为训练模式# 新增:记录每个 iteration 的损失all_iter_losses = [] # 存储所有 batch 的损失iter_indices = [] # 存储 iteration 序号(从1开始)for epoch in range(epochs):running_loss = 0.0correct = 0total = 0for batch_idx, (data, target) in enumerate(train_loader):data, target = data.to(device), target.to(device) # 移至GPU(如果可用)optimizer.zero_grad() # 梯度清零output = model(data) # 前向传播loss = criterion(output, target) # 计算损失loss.backward() # 反向传播optimizer.step() # 更新参数# 记录当前 iteration 的损失(注意:这里直接使用单 batch 损失,而非累加平均)iter_loss = loss.item()all_iter_losses.append(iter_loss)iter_indices.append(epoch * len(train_loader) + batch_idx + 1) # iteration 序号从1开始# 统计准确率和损失(原逻辑保留,用于 epoch 级统计)running_loss += iter_loss_, predicted = output.max(1)total += target.size(0)correct += predicted.eq(target).sum().item()# 每100个批次打印一次训练信息(可选:同时打印单 batch 损失)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}')# 原 epoch 级逻辑(测试、打印 epoch 结果)不变epoch_train_loss = running_loss / len(train_loader)epoch_train_acc = 100. * correct / totalepoch_test_loss, epoch_test_acc = test(model, test_loader, criterion, device)print(f'Epoch {epoch+1}/{epochs} 完成 | 训练准确率: {epoch_train_acc:.2f}% | 测试准确率: {epoch_test_acc:.2f}%')# 绘制所有 iteration 的损失曲线plot_iter_losses(all_iter_losses, iter_indices)# 保留原 epoch 级曲线(可选)# plot_metrics(train_losses, test_losses, train_accuracies, test_accuracies, epochs)return epoch_test_acc # 返回最终测试准确率# 6. 测试模型
def test(model, test_loader, criterion, device):model.eval() # 设置为评估模式test_loss = 0correct = 0total = 0with 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 += target.size(0)correct += predicted.eq(target).sum().item()avg_loss = test_loss / len(test_loader)accuracy = 100. * correct / totalreturn avg_loss, accuracy # 返回损失和准确率# 7.绘制每个 iteration 的损失曲线
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()# 8. 执行训练和测试(设置 epochs=2 验证效果)
epochs = 2
print("开始训练模型...")
final_accuracy = train(model, train_loader, test_loader, criterion, optimizer, device, epochs)
print(f"训练完成!最终测试准确率: {final_accuracy:.2f}%")
开始训练模型...
Epoch: 1/2 | Batch: 100/938 | 单Batch损失: 0.3583 | 累计平均损失: 0.6321
Epoch: 1/2 | Batch: 200/938 | 单Batch损失: 0.2035 | 累计平均损失: 0.4776
Epoch: 1/2 | Batch: 300/938 | 单Batch损失: 0.3044 | 累计平均损失: 0.4053
Epoch: 1/2 | Batch: 400/938 | 单Batch损失: 0.1427 | 累计平均损失: 0.3669
Epoch: 1/2 | Batch: 500/938 | 单Batch损失: 0.1742 | 累计平均损失: 0.3321
Epoch: 1/2 | Batch: 600/938 | 单Batch损失: 0.3089 | 累计平均损失: 0.3104
Epoch: 1/2 | Batch: 700/938 | 单Batch损失: 0.0456 | 累计平均损失: 0.2921
Epoch: 1/2 | Batch: 800/938 | 单Batch损失: 0.1008 | 累计平均损失: 0.2763
Epoch: 1/2 | Batch: 900/938 | 单Batch损失: 0.3017 | 累计平均损失: 0.2629
Epoch 1/2 完成 | 训练准确率: 92.43% | 测试准确率: 95.90%
Epoch: 2/2 | Batch: 100/938 | 单Batch损失: 0.1727 | 累计平均损失: 0.1358
Epoch: 2/2 | Batch: 200/938 | 单Batch损失: 0.1751 | 累计平均损失: 0.1291
Epoch: 2/2 | Batch: 300/938 | 单Batch损失: 0.1239 | 累计平均损失: 0.1283
Epoch: 2/2 | Batch: 400/938 | 单Batch损失: 0.2183 | 累计平均损失: 0.1233
Epoch: 2/2 | Batch: 500/938 | 单Batch损失: 0.0211 | 累计平均损失: 0.1206
Epoch: 2/2 | Batch: 600/938 | 单Batch损失: 0.0590 | 累计平均损失: 0.1191
Epoch: 2/2 | Batch: 700/938 | 单Batch损失: 0.0954 | 累计平均损失: 0.1169
Epoch: 2/2 | Batch: 800/938 | 单Batch损失: 0.1728 | 累计平均损失: 0.1151
Epoch: 2/2 | Batch: 900/938 | 单Batch损失: 0.0786 | 累计平均损失: 0.1137
Epoch 2/2 完成 | 训练准确率: 96.67% | 测试准确率: 96.91%
彩色图片的规范写法
彩色的通道也是在第一步被直接展平,其他代码一致
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
import matplotlib.pyplot as plt
import numpy as np# 设置中文字体支持
plt.rcParams["font.family"] = ["SimHei"]
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题# 1. 数据预处理
transform = transforms.Compose([transforms.ToTensor(), # 转换为张量transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) # 标准化处理
])# 2. 加载CIFAR-10数据集
train_dataset = datasets.CIFAR10(root='./data',train=True,download=True,transform=transform
)test_dataset = datasets.CIFAR10(root='./data',train=False,transform=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. 定义MLP模型(适应CIFAR-10的输入尺寸)
class MLP(nn.Module):def __init__(self):super(MLP, self).__init__()self.flatten = nn.Flatten() # 将3x32x32的图像展平为3072维向量self.layer1 = nn.Linear(3072, 512) # 第一层:3072个输入,512个神经元self.relu1 = nn.ReLU()self.dropout1 = nn.Dropout(0.2) # 添加Dropout防止过拟合self.layer2 = nn.Linear(512, 256) # 第二层:512个输入,256个神经元self.relu2 = nn.ReLU()self.dropout2 = nn.Dropout(0.2)self.layer3 = nn.Linear(256, 10) # 输出层:10个类别def forward(self, x):# 第一步:将输入图像展平为一维向量x = self.flatten(x) # 输入尺寸: [batch_size, 3, 32, 32] → [batch_size, 3072]# 第一层全连接 + 激活 + Dropoutx = self.layer1(x) # 线性变换: [batch_size, 3072] → [batch_size, 512]x = self.relu1(x) # 应用ReLU激活函数x = self.dropout1(x) # 训练时随机丢弃部分神经元输出# 第二层全连接 + 激活 + Dropoutx = self.layer2(x) # 线性变换: [batch_size, 512] → [batch_size, 256]x = self.relu2(x) # 应用ReLU激活函数x = self.dropout2(x) # 训练时随机丢弃部分神经元输出# 第三层(输出层)全连接x = self.layer3(x) # 线性变换: [batch_size, 256] → [batch_size, 10]return x # 返回未经过Softmax的logits# 检查GPU是否可用
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")# 初始化模型
model = MLP()
model = model.to(device) # 将模型移至GPU(如果可用)criterion = nn.CrossEntropyLoss() # 交叉熵损失函数
optimizer = optim.Adam(model.parameters(), lr=0.001) # Adam优化器# 5. 训练模型(记录每个 iteration 的损失)
def train(model, train_loader, test_loader, criterion, optimizer, device, epochs):model.train() # 设置为训练模式# 记录每个 iteration 的损失all_iter_losses = [] # 存储所有 batch 的损失iter_indices = [] # 存储 iteration 序号for epoch in range(epochs):running_loss = 0.0correct = 0total = 0for batch_idx, (data, target) in enumerate(train_loader):data, target = data.to(device), target.to(device) # 移至GPUoptimizer.zero_grad() # 梯度清零output = model(data) # 前向传播loss = criterion(output, target) # 计算损失loss.backward() # 反向传播optimizer.step() # 更新参数# 记录当前 iteration 的损失iter_loss = loss.item()all_iter_losses.append(iter_loss)iter_indices.append(epoch * len(train_loader) + batch_idx + 1)# 统计准确率和损失running_loss += iter_loss_, predicted = output.max(1)total += target.size(0)correct += predicted.eq(target).sum().item()# 每100个批次打印一次训练信息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}')# 计算当前epoch的平均训练损失和准确率epoch_train_loss = running_loss / len(train_loader)epoch_train_acc = 100. * correct / total# 测试阶段model.eval() # 设置为评估模式test_loss = 0correct_test = 0total_test = 0with 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()epoch_test_loss = test_loss / len(test_loader)epoch_test_acc = 100. * correct_test / total_testprint(f'Epoch {epoch+1}/{epochs} 完成 | 训练准确率: {epoch_train_acc:.2f}% | 测试准确率: {epoch_test_acc:.2f}%')# 绘制所有 iteration 的损失曲线plot_iter_losses(all_iter_losses, iter_indices)return epoch_test_acc # 返回最终测试准确率# 6. 绘制每个 iteration 的损失曲线
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()# 7. 执行训练和测试
epochs = 20 # 增加训练轮次以获得更好效果
print("开始训练模型...")
final_accuracy = train(model, train_loader, test_loader, criterion, optimizer, device, epochs)
print(f"训练完成!最终测试准确率: {final_accuracy:.2f}%")# # 保存模型
# torch.save(model.state_dict(), 'cifar10_mlp_model.pth')
# # print("模型已保存为: cifar10_mlp_model.pth")
开始训练模型...
Epoch: 1/20 | Batch: 100/782 | 单Batch损失: 1.7651 | 累计平均损失: 1.9071
Epoch: 1/20 | Batch: 200/782 | 单Batch损失: 1.6451 | 累计平均损失: 1.8383
Epoch: 1/20 | Batch: 300/782 | 单Batch损失: 1.7347 | 累计平均损失: 1.7946
Epoch: 1/20 | Batch: 400/782 | 单Batch损失: 1.4815 | 累计平均损失: 1.7699
Epoch: 1/20 | Batch: 500/782 | 单Batch损失: 1.4975 | 累计平均损失: 1.7451
Epoch: 1/20 | Batch: 600/782 | 单Batch损失: 1.5473 | 累计平均损失: 1.7276
Epoch: 1/20 | Batch: 700/782 | 单Batch损失: 1.7658 | 累计平均损失: 1.7156
Epoch 1/20 完成 | 训练准确率: 39.61% | 测试准确率: 45.33%
Epoch: 2/20 | Batch: 100/782 | 单Batch损失: 1.5833 | 累计平均损失: 1.5051
Epoch: 2/20 | Batch: 200/782 | 单Batch损失: 1.6505 | 累计平均损失: 1.4793
Epoch: 2/20 | Batch: 300/782 | 单Batch损失: 1.4405 | 累计平均损失: 1.4739
Epoch: 2/20 | Batch: 400/782 | 单Batch损失: 1.6979 | 累计平均损失: 1.4731
Epoch: 2/20 | Batch: 500/782 | 单Batch损失: 1.3146 | 累计平均损失: 1.4700
Epoch: 2/20 | Batch: 600/782 | 单Batch损失: 1.5724 | 累计平均损失: 1.4658
Epoch: 2/20 | Batch: 700/782 | 单Batch损失: 1.5681 | 累计平均损失: 1.4607
Epoch 2/20 完成 | 训练准确率: 48.26% | 测试准确率: 49.34%
Epoch: 3/20 | Batch: 100/782 | 单Batch损失: 1.3666 | 累计平均损失: 1.3114
Epoch: 3/20 | Batch: 200/782 | 单Batch损失: 1.3532 | 累计平均损失: 1.3148
Epoch: 3/20 | Batch: 300/782 | 单Batch损失: 1.4054 | 累计平均损失: 1.3211
Epoch: 3/20 | Batch: 400/782 | 单Batch损失: 1.3869 | 累计平均损失: 1.3290
Epoch: 3/20 | Batch: 500/782 | 单Batch损失: 1.4669 | 累计平均损失: 1.3355
Epoch: 3/20 | Batch: 600/782 | 单Batch损失: 1.4954 | 累计平均损失: 1.3366
Epoch: 3/20 | Batch: 700/782 | 单Batch损失: 1.4023 | 累计平均损失: 1.3353
Epoch 3/20 完成 | 训练准确率: 52.66% | 测试准确率: 50.85%
Epoch: 4/20 | Batch: 100/782 | 单Batch损失: 1.1709 | 累计平均损失: 1.2249
Epoch: 4/20 | Batch: 200/782 | 单Batch损失: 1.1826 | 累计平均损失: 1.2426
Epoch: 4/20 | Batch: 300/782 | 单Batch损失: 1.1949 | 累计平均损失: 1.2372
Epoch: 4/20 | Batch: 400/782 | 单Batch损失: 1.2972 | 累计平均损失: 1.2403
Epoch: 4/20 | Batch: 500/782 | 单Batch损失: 1.4556 | 累计平均损失: 1.2454
Epoch: 4/20 | Batch: 600/782 | 单Batch损失: 1.2786 | 累计平均损失: 1.2487
Epoch: 4/20 | Batch: 700/782 | 单Batch损失: 1.1699 | 累计平均损失: 1.2466
Epoch 4/20 完成 | 训练准确率: 55.70% | 测试准确率: 52.14%
Epoch: 5/20 | Batch: 100/782 | 单Batch损失: 1.2645 | 累计平均损失: 1.1450
Epoch: 5/20 | Batch: 200/782 | 单Batch损失: 1.1492 | 累计平均损失: 1.1392
Epoch: 5/20 | Batch: 300/782 | 单Batch损失: 1.1347 | 累计平均损失: 1.1361
Epoch: 5/20 | Batch: 400/782 | 单Batch损失: 1.3953 | 累计平均损失: 1.1412
Epoch: 5/20 | Batch: 500/782 | 单Batch损失: 1.1296 | 累计平均损失: 1.1469
Epoch: 5/20 | Batch: 600/782 | 单Batch损失: 1.1949 | 累计平均损失: 1.1510
Epoch: 5/20 | Batch: 700/782 | 单Batch损失: 1.2645 | 累计平均损失: 1.1544
Epoch 5/20 完成 | 训练准确率: 59.00% | 测试准确率: 52.44%
Epoch: 6/20 | Batch: 100/782 | 单Batch损失: 1.0381 | 累计平均损失: 1.0292
Epoch: 6/20 | Batch: 200/782 | 单Batch损失: 0.9202 | 累计平均损失: 1.0359
Epoch: 6/20 | Batch: 300/782 | 单Batch损失: 0.8801 | 累计平均损失: 1.0499
Epoch: 6/20 | Batch: 400/782 | 单Batch损失: 1.1457 | 累计平均损失: 1.0617
Epoch: 6/20 | Batch: 500/782 | 单Batch损失: 1.0391 | 累计平均损失: 1.0674
Epoch: 6/20 | Batch: 600/782 | 单Batch损失: 1.0533 | 累计平均损失: 1.0729
Epoch: 6/20 | Batch: 700/782 | 单Batch损失: 0.9226 | 累计平均损失: 1.0751
Epoch 6/20 完成 | 训练准确率: 61.77% | 测试准确率: 53.18%
Epoch: 7/20 | Batch: 100/782 | 单Batch损失: 1.0547 | 累计平均损失: 0.9957
Epoch: 7/20 | Batch: 200/782 | 单Batch损失: 0.8219 | 累计平均损失: 0.9777
Epoch: 7/20 | Batch: 300/782 | 单Batch损失: 0.9493 | 累计平均损失: 0.9798
Epoch: 7/20 | Batch: 400/782 | 单Batch损失: 1.2563 | 累计平均损失: 0.9864
Epoch: 7/20 | Batch: 500/782 | 单Batch损失: 1.1910 | 累计平均损失: 0.9896
Epoch: 7/20 | Batch: 600/782 | 单Batch损失: 1.0114 | 累计平均损失: 0.9973
Epoch: 7/20 | Batch: 700/782 | 单Batch损失: 1.2899 | 累计平均损失: 1.0011
Epoch 7/20 完成 | 训练准确率: 64.17% | 测试准确率: 53.81%
Epoch: 8/20 | Batch: 100/782 | 单Batch损失: 0.9333 | 累计平均损失: 0.8664
Epoch: 8/20 | Batch: 200/782 | 单Batch损失: 0.9308 | 累计平均损失: 0.8806
Epoch: 8/20 | Batch: 300/782 | 单Batch损失: 0.8810 | 累计平均损失: 0.8839
Epoch: 8/20 | Batch: 400/782 | 单Batch损失: 1.0675 | 累计平均损失: 0.8961
Epoch: 8/20 | Batch: 500/782 | 单Batch损失: 0.9667 | 累计平均损失: 0.9073
Epoch: 8/20 | Batch: 600/782 | 单Batch损失: 0.8929 | 累计平均损失: 0.9172
Epoch: 8/20 | Batch: 700/782 | 单Batch损失: 0.7617 | 累计平均损失: 0.9211
Epoch 8/20 完成 | 训练准确率: 66.93% | 测试准确率: 52.94%
Epoch: 9/20 | Batch: 100/782 | 单Batch损失: 0.7796 | 累计平均损失: 0.8058
Epoch: 9/20 | Batch: 200/782 | 单Batch损失: 0.8115 | 累计平均损失: 0.8100
Epoch: 9/20 | Batch: 300/782 | 单Batch损失: 0.9550 | 累计平均损失: 0.8270
Epoch: 9/20 | Batch: 400/782 | 单Batch损失: 0.9310 | 累计平均损失: 0.8375
Epoch: 9/20 | Batch: 500/782 | 单Batch损失: 0.7261 | 累计平均损失: 0.8444
Epoch: 9/20 | Batch: 600/782 | 单Batch损失: 0.8041 | 累计平均损失: 0.8528
Epoch: 9/20 | Batch: 700/782 | 单Batch损失: 0.9113 | 累计平均损失: 0.8579
Epoch 9/20 完成 | 训练准确率: 69.25% | 测试准确率: 53.07%
Epoch: 10/20 | Batch: 100/782 | 单Batch损失: 0.7703 | 累计平均损失: 0.7477
Epoch: 10/20 | Batch: 200/782 | 单Batch损失: 0.6830 | 累计平均损失: 0.7431
Epoch: 10/20 | Batch: 300/782 | 单Batch损失: 0.7435 | 累计平均损失: 0.7627
Epoch: 10/20 | Batch: 400/782 | 单Batch损失: 0.6192 | 累计平均损失: 0.7673
Epoch: 10/20 | Batch: 500/782 | 单Batch损失: 0.8552 | 累计平均损失: 0.7752
Epoch: 10/20 | Batch: 600/782 | 单Batch损失: 0.8798 | 累计平均损失: 0.7761
Epoch: 10/20 | Batch: 700/782 | 单Batch损失: 0.7172 | 累计平均损失: 0.7835
Epoch 10/20 完成 | 训练准确率: 71.90% | 测试准确率: 53.15%
Epoch: 11/20 | Batch: 100/782 | 单Batch损失: 0.6230 | 累计平均损失: 0.6893
Epoch: 11/20 | Batch: 200/782 | 单Batch损失: 0.4892 | 累计平均损失: 0.6704
Epoch: 11/20 | Batch: 300/782 | 单Batch损失: 0.7135 | 累计平均损失: 0.6817
Epoch: 11/20 | Batch: 400/782 | 单Batch损失: 0.6384 | 累计平均损失: 0.6983
Epoch: 11/20 | Batch: 500/782 | 单Batch损失: 0.6882 | 累计平均损失: 0.7042
Epoch: 11/20 | Batch: 600/782 | 单Batch损失: 0.7682 | 累计平均损失: 0.7159
Epoch: 11/20 | Batch: 700/782 | 单Batch损失: 0.8293 | 累计平均损失: 0.7234
Epoch 11/20 完成 | 训练准确率: 73.90% | 测试准确率: 52.98%
Epoch: 12/20 | Batch: 100/782 | 单Batch损失: 0.8580 | 累计平均损失: 0.6084
Epoch: 12/20 | Batch: 200/782 | 单Batch损失: 0.5278 | 累计平均损失: 0.6107
Epoch: 12/20 | Batch: 300/782 | 单Batch损失: 0.8430 | 累计平均损失: 0.6155
Epoch: 12/20 | Batch: 400/782 | 单Batch损失: 0.6415 | 累计平均损失: 0.6241
Epoch: 12/20 | Batch: 500/782 | 单Batch损失: 0.4772 | 累计平均损失: 0.6379
Epoch: 12/20 | Batch: 600/782 | 单Batch损失: 0.7100 | 累计平均损失: 0.6486
Epoch: 12/20 | Batch: 700/782 | 单Batch损失: 0.6771 | 累计平均损失: 0.6554
Epoch 12/20 完成 | 训练准确率: 76.30% | 测试准确率: 52.73%
Epoch: 13/20 | Batch: 100/782 | 单Batch损失: 0.8751 | 累计平均损失: 0.5509
Epoch: 13/20 | Batch: 200/782 | 单Batch损失: 0.7454 | 累计平均损失: 0.5603
Epoch: 13/20 | Batch: 300/782 | 单Batch损失: 0.5004 | 累计平均损失: 0.5709
Epoch: 13/20 | Batch: 400/782 | 单Batch损失: 0.7007 | 累计平均损失: 0.5801
Epoch: 13/20 | Batch: 500/782 | 单Batch损失: 0.6423 | 累计平均损失: 0.5948
Epoch: 13/20 | Batch: 600/782 | 单Batch损失: 0.6235 | 累计平均损失: 0.5999
Epoch: 13/20 | Batch: 700/782 | 单Batch损失: 0.5021 | 累计平均损失: 0.6096
Epoch 13/20 完成 | 训练准确率: 77.62% | 测试准确率: 51.15%
Epoch: 14/20 | Batch: 100/782 | 单Batch损失: 0.5765 | 累计平均损失: 0.5398
Epoch: 14/20 | Batch: 200/782 | 单Batch损失: 0.6035 | 累计平均损失: 0.5396
Epoch: 14/20 | Batch: 300/782 | 单Batch损失: 0.3353 | 累计平均损失: 0.5436
Epoch: 14/20 | Batch: 400/782 | 单Batch损失: 0.4378 | 累计平均损失: 0.5454
Epoch: 14/20 | Batch: 500/782 | 单Batch损失: 0.4470 | 累计平均损失: 0.5486
Epoch: 14/20 | Batch: 600/782 | 单Batch损失: 0.4291 | 累计平均损失: 0.5543
Epoch: 14/20 | Batch: 700/782 | 单Batch损失: 0.5143 | 累计平均损失: 0.5601
Epoch 14/20 完成 | 训练准确率: 79.44% | 测试准确率: 52.94%
Epoch: 15/20 | Batch: 100/782 | 单Batch损失: 0.2659 | 累计平均损失: 0.5028
Epoch: 15/20 | Batch: 200/782 | 单Batch损失: 0.4221 | 累计平均损失: 0.4937
Epoch: 15/20 | Batch: 300/782 | 单Batch损失: 0.6350 | 累计平均损失: 0.5028
Epoch: 15/20 | Batch: 400/782 | 单Batch损失: 0.5798 | 累计平均损失: 0.5104
Epoch: 15/20 | Batch: 500/782 | 单Batch损失: 0.5818 | 累计平均损失: 0.5190
Epoch: 15/20 | Batch: 600/782 | 单Batch损失: 0.7038 | 累计平均损失: 0.5242
Epoch: 15/20 | Batch: 700/782 | 单Batch损失: 0.4713 | 累计平均损失: 0.5313
Epoch 15/20 完成 | 训练准确率: 80.92% | 测试准确率: 52.52%
Epoch: 16/20 | Batch: 100/782 | 单Batch损失: 0.3545 | 累计平均损失: 0.4665
Epoch: 16/20 | Batch: 200/782 | 单Batch损失: 0.3323 | 累计平均损失: 0.4476
Epoch: 16/20 | Batch: 300/782 | 单Batch损失: 0.5079 | 累计平均损失: 0.4472
Epoch: 16/20 | Batch: 400/782 | 单Batch损失: 0.3290 | 累计平均损失: 0.4582
Epoch: 16/20 | Batch: 500/782 | 单Batch损失: 0.6484 | 累计平均损失: 0.4666
Epoch: 16/20 | Batch: 600/782 | 单Batch损失: 0.5194 | 累计平均损失: 0.4751
Epoch: 16/20 | Batch: 700/782 | 单Batch损失: 0.4114 | 累计平均损失: 0.4820
Epoch 16/20 完成 | 训练准确率: 82.55% | 测试准确率: 53.35%
Epoch: 17/20 | Batch: 100/782 | 单Batch损失: 0.3622 | 累计平均损失: 0.4173
Epoch: 17/20 | Batch: 200/782 | 单Batch损失: 0.5029 | 累计平均损失: 0.4242
Epoch: 17/20 | Batch: 300/782 | 单Batch损失: 0.2175 | 累计平均损失: 0.4257
Epoch: 17/20 | Batch: 400/782 | 单Batch损失: 0.4567 | 累计平均损失: 0.4377
Epoch: 17/20 | Batch: 500/782 | 单Batch损失: 0.4052 | 累计平均损失: 0.4375
Epoch: 17/20 | Batch: 600/782 | 单Batch损失: 0.4757 | 累计平均损失: 0.4386
Epoch: 17/20 | Batch: 700/782 | 单Batch损失: 0.6665 | 累计平均损失: 0.4424
Epoch 17/20 完成 | 训练准确率: 83.99% | 测试准确率: 52.31%
Epoch: 18/20 | Batch: 100/782 | 单Batch损失: 0.2227 | 累计平均损失: 0.3752
Epoch: 18/20 | Batch: 200/782 | 单Batch损失: 0.4372 | 累计平均损失: 0.3792
Epoch: 18/20 | Batch: 300/782 | 单Batch损失: 0.3962 | 累计平均损失: 0.3877
Epoch: 18/20 | Batch: 400/782 | 单Batch损失: 0.3329 | 累计平均损失: 0.3953
Epoch: 18/20 | Batch: 500/782 | 单Batch损失: 0.5082 | 累计平均损失: 0.4019
Epoch: 18/20 | Batch: 600/782 | 单Batch损失: 0.2860 | 累计平均损失: 0.4096
Epoch: 18/20 | Batch: 700/782 | 单Batch损失: 0.3686 | 累计平均损失: 0.4199
Epoch 18/20 完成 | 训练准确率: 84.74% | 测试准确率: 52.00%
Epoch: 19/20 | Batch: 100/782 | 单Batch损失: 0.2916 | 累计平均损失: 0.3487
Epoch: 19/20 | Batch: 200/782 | 单Batch损失: 0.2671 | 累计平均损失: 0.3448
Epoch: 19/20 | Batch: 300/782 | 单Batch损失: 0.4126 | 累计平均损失: 0.3619
Epoch: 19/20 | Batch: 400/782 | 单Batch损失: 0.3170 | 累计平均损失: 0.3716
Epoch: 19/20 | Batch: 500/782 | 单Batch损失: 0.3622 | 累计平均损失: 0.3814
Epoch: 19/20 | Batch: 600/782 | 单Batch损失: 0.7297 | 累计平均损失: 0.3955
Epoch: 19/20 | Batch: 700/782 | 单Batch损失: 0.3780 | 累计平均损失: 0.3996
Epoch 19/20 完成 | 训练准确率: 85.45% | 测试准确率: 52.95%
Epoch: 20/20 | Batch: 100/782 | 单Batch损失: 0.3184 | 累计平均损失: 0.3501
Epoch: 20/20 | Batch: 200/782 | 单Batch损失: 0.3582 | 累计平均损失: 0.3503
Epoch: 20/20 | Batch: 300/782 | 单Batch损失: 0.3684 | 累计平均损失: 0.3620
Epoch: 20/20 | Batch: 400/782 | 单Batch损失: 0.3751 | 累计平均损失: 0.3620
Epoch: 20/20 | Batch: 500/782 | 单Batch损失: 0.5326 | 累计平均损失: 0.3654
Epoch: 20/20 | Batch: 600/782 | 单Batch损失: 0.4992 | 累计平均损失: 0.3738
Epoch: 20/20 | Batch: 700/782 | 单Batch损失: 0.5246 | 累计平均损失: 0.3823
Epoch 20/20 完成 | 训练准确率: 86.43% | 测试准确率: 52.81%
# 7. 执行训练和测试
epochs = 20 # 增加训练轮次以获得更好效果
print("开始训练模型...")
final_accuracy = train(model, train_loader, test_loader, criterion, optimizer, device, epochs)
print(f"训练完成!最终测试准确率: {final_accuracy:.2f}%")
开始训练模型...
Epoch: 1/20 | Batch: 100/782 | 单Batch损失: 1.2283 | 累计平均损失: 1.2612
Epoch: 1/20 | Batch: 200/782 | 单Batch损失: 0.9276 | 累计平均损失: 1.2284
Epoch: 1/20 | Batch: 300/782 | 单Batch损失: 1.0029 | 累计平均损失: 1.1975
Epoch: 1/20 | Batch: 400/782 | 单Batch损失: 0.9595 | 累计平均损失: 1.1683
Epoch: 1/20 | Batch: 500/782 | 单Batch损失: 0.9711 | 累计平均损失: 1.1434
Epoch: 1/20 | Batch: 600/782 | 单Batch损失: 0.9535 | 累计平均损失: 1.1239
Epoch: 1/20 | Batch: 700/782 | 单Batch损失: 0.8682 | 累计平均损失: 1.1092
Epoch 1/20 完成 | 训练准确率: 63.68% | 测试准确率: 52.26%
Epoch: 2/20 | Batch: 100/782 | 单Batch损失: 0.4003 | 累计平均损失: 0.4802
Epoch: 2/20 | Batch: 200/782 | 单Batch损失: 0.3518 | 累计平均损失: 0.4287
Epoch: 2/20 | Batch: 300/782 | 单Batch损失: 0.3121 | 累计平均损失: 0.4069
Epoch: 2/20 | Batch: 400/782 | 单Batch损失: 0.2630 | 累计平均损失: 0.3871
Epoch: 2/20 | Batch: 500/782 | 单Batch损失: 0.2022 | 累计平均损失: 0.3747
Epoch: 2/20 | Batch: 600/782 | 单Batch损失: 0.4245 | 累计平均损失: 0.3641
Epoch: 2/20 | Batch: 700/782 | 单Batch损失: 0.5932 | 累计平均损失: 0.3624
Epoch 2/20 完成 | 训练准确率: 87.42% | 测试准确率: 53.74%
Epoch: 3/20 | Batch: 100/782 | 单Batch损失: 0.2434 | 累计平均损失: 0.2580
Epoch: 3/20 | Batch: 200/782 | 单Batch损失: 0.1475 | 累计平均损失: 0.2613
Epoch: 3/20 | Batch: 300/782 | 单Batch损失: 0.2406 | 累计平均损失: 0.2677
Epoch: 3/20 | Batch: 400/782 | 单Batch损失: 0.2360 | 累计平均损失: 0.2782
Epoch: 3/20 | Batch: 500/782 | 单Batch损失: 0.4137 | 累计平均损失: 0.2828
Epoch: 3/20 | Batch: 600/782 | 单Batch损失: 0.1983 | 累计平均损失: 0.2897
Epoch: 3/20 | Batch: 700/782 | 单Batch损失: 0.3044 | 累计平均损失: 0.3031
Epoch 3/20 完成 | 训练准确率: 89.02% | 测试准确率: 53.16%
Epoch: 4/20 | Batch: 100/782 | 单Batch损失: 0.1982 | 累计平均损失: 0.3060
Epoch: 4/20 | Batch: 200/782 | 单Batch损失: 0.2221 | 累计平均损失: 0.2822
Epoch: 4/20 | Batch: 300/782 | 单Batch损失: 0.2068 | 累计平均损失: 0.2997
Epoch: 4/20 | Batch: 400/782 | 单Batch损失: 0.2877 | 累计平均损失: 0.3068
Epoch: 4/20 | Batch: 500/782 | 单Batch损失: 0.4148 | 累计平均损失: 0.3083
Epoch: 4/20 | Batch: 600/782 | 单Batch损失: 0.2733 | 累计平均损失: 0.3146
Epoch: 4/20 | Batch: 700/782 | 单Batch损失: 0.3970 | 累计平均损失: 0.3216
Epoch 4/20 完成 | 训练准确率: 88.37% | 测试准确率: 52.74%
Epoch: 5/20 | Batch: 100/782 | 单Batch损失: 0.3190 | 累计平均损失: 0.3077
Epoch: 5/20 | Batch: 200/782 | 单Batch损失: 0.2956 | 累计平均损失: 0.3066
Epoch: 5/20 | Batch: 300/782 | 单Batch损失: 0.4220 | 累计平均损失: 0.3110
Epoch: 5/20 | Batch: 400/782 | 单Batch损失: 0.4378 | 累计平均损失: 0.3096
Epoch: 5/20 | Batch: 500/782 | 单Batch损失: 0.2949 | 累计平均损失: 0.3165
Epoch: 5/20 | Batch: 600/782 | 单Batch损失: 0.3173 | 累计平均损失: 0.3160
Epoch: 5/20 | Batch: 700/782 | 单Batch损失: 0.6067 | 累计平均损失: 0.3183
Epoch 5/20 完成 | 训练准确率: 88.56% | 测试准确率: 52.62%
Epoch: 6/20 | Batch: 100/782 | 单Batch损失: 0.4261 | 累计平均损失: 0.3048
Epoch: 6/20 | Batch: 200/782 | 单Batch损失: 0.2407 | 累计平均损失: 0.2976
Epoch: 6/20 | Batch: 300/782 | 单Batch损失: 0.2988 | 累计平均损失: 0.2992
Epoch: 6/20 | Batch: 400/782 | 单Batch损失: 0.3148 | 累计平均损失: 0.2975
Epoch: 6/20 | Batch: 500/782 | 单Batch损失: 0.1310 | 累计平均损失: 0.3000
Epoch: 6/20 | Batch: 600/782 | 单Batch损失: 0.2803 | 累计平均损失: 0.3041
Epoch: 6/20 | Batch: 700/782 | 单Batch损失: 0.3813 | 累计平均损失: 0.3095
Epoch 6/20 完成 | 训练准确率: 89.00% | 测试准确率: 52.78%
Epoch: 7/20 | Batch: 100/782 | 单Batch损失: 0.2410 | 累计平均损失: 0.2750
Epoch: 7/20 | Batch: 200/782 | 单Batch损失: 0.2276 | 累计平均损失: 0.2663
Epoch: 7/20 | Batch: 300/782 | 单Batch损失: 0.3247 | 累计平均损失: 0.2825
Epoch: 7/20 | Batch: 400/782 | 单Batch损失: 0.6075 | 累计平均损失: 0.2855
Epoch: 7/20 | Batch: 500/782 | 单Batch损失: 0.2506 | 累计平均损失: 0.2876
Epoch: 7/20 | Batch: 600/782 | 单Batch损失: 0.2028 | 累计平均损失: 0.2901
Epoch: 7/20 | Batch: 700/782 | 单Batch损失: 0.3518 | 累计平均损失: 0.2985
Epoch 7/20 完成 | 训练准确率: 89.28% | 测试准确率: 52.29%
Epoch: 8/20 | Batch: 100/782 | 单Batch损失: 0.2655 | 累计平均损失: 0.2793
Epoch: 8/20 | Batch: 200/782 | 单Batch损失: 0.2722 | 累计平均损失: 0.2690
Epoch: 8/20 | Batch: 300/782 | 单Batch损失: 0.1490 | 累计平均损失: 0.2628
Epoch: 8/20 | Batch: 400/782 | 单Batch损失: 0.1699 | 累计平均损失: 0.2589
Epoch: 8/20 | Batch: 500/782 | 单Batch损失: 0.2260 | 累计平均损失: 0.2631
Epoch: 8/20 | Batch: 600/782 | 单Batch损失: 0.2059 | 累计平均损失: 0.2660
Epoch: 8/20 | Batch: 700/782 | 单Batch损失: 0.2786 | 累计平均损失: 0.2707
Epoch 8/20 完成 | 训练准确率: 90.32% | 测试准确率: 52.97%
Epoch: 9/20 | Batch: 100/782 | 单Batch损失: 0.2137 | 累计平均损失: 0.2697
Epoch: 9/20 | Batch: 200/782 | 单Batch损失: 0.3333 | 累计平均损失: 0.2597
Epoch: 9/20 | Batch: 300/782 | 单Batch损失: 0.3019 | 累计平均损失: 0.2573
Epoch: 9/20 | Batch: 400/782 | 单Batch损失: 0.2231 | 累计平均损失: 0.2621
Epoch: 9/20 | Batch: 500/782 | 单Batch损失: 0.3063 | 累计平均损失: 0.2664
Epoch: 9/20 | Batch: 600/782 | 单Batch损失: 0.2879 | 累计平均损失: 0.2664
Epoch: 9/20 | Batch: 700/782 | 单Batch损失: 0.2971 | 累计平均损失: 0.2721
Epoch 9/20 完成 | 训练准确率: 90.35% | 测试准确率: 52.02%
Epoch: 10/20 | Batch: 100/782 | 单Batch损失: 0.0978 | 累计平均损失: 0.2191
Epoch: 10/20 | Batch: 200/782 | 单Batch损失: 0.1508 | 累计平均损失: 0.2164
Epoch: 10/20 | Batch: 300/782 | 单Batch损失: 0.1897 | 累计平均损失: 0.2236
Epoch: 10/20 | Batch: 400/782 | 单Batch损失: 0.1723 | 累计平均损失: 0.2244
Epoch: 10/20 | Batch: 500/782 | 单Batch损失: 0.2125 | 累计平均损失: 0.2364
Epoch: 10/20 | Batch: 600/782 | 单Batch损失: 0.0915 | 累计平均损失: 0.2478
Epoch: 10/20 | Batch: 700/782 | 单Batch损失: 0.4483 | 累计平均损失: 0.2579
Epoch 10/20 完成 | 训练准确率: 91.04% | 测试准确率: 52.06%
Epoch: 11/20 | Batch: 100/782 | 单Batch损失: 0.2468 | 累计平均损失: 0.2272
Epoch: 11/20 | Batch: 200/782 | 单Batch损失: 0.3352 | 累计平均损失: 0.2301
Epoch: 11/20 | Batch: 300/782 | 单Batch损失: 0.1805 | 累计平均损失: 0.2297
Epoch: 11/20 | Batch: 400/782 | 单Batch损失: 0.3984 | 累计平均损失: 0.2327
Epoch: 11/20 | Batch: 500/782 | 单Batch损失: 0.2055 | 累计平均损失: 0.2432
Epoch: 11/20 | Batch: 600/782 | 单Batch损失: 0.2614 | 累计平均损失: 0.2482
Epoch: 11/20 | Batch: 700/782 | 单Batch损失: 0.2049 | 累计平均损失: 0.2594
Epoch 11/20 完成 | 训练准确率: 90.73% | 测试准确率: 52.65%
Epoch: 12/20 | Batch: 100/782 | 单Batch损失: 0.2631 | 累计平均损失: 0.2361
Epoch: 12/20 | Batch: 200/782 | 单Batch损失: 0.3625 | 累计平均损失: 0.2328
Epoch: 12/20 | Batch: 300/782 | 单Batch损失: 0.2776 | 累计平均损失: 0.2361
Epoch: 12/20 | Batch: 400/782 | 单Batch损失: 0.1552 | 累计平均损失: 0.2374
Epoch: 12/20 | Batch: 500/782 | 单Batch损失: 0.4105 | 累计平均损失: 0.2384
Epoch: 12/20 | Batch: 600/782 | 单Batch损失: 0.1825 | 累计平均损失: 0.2440
Epoch: 12/20 | Batch: 700/782 | 单Batch损失: 0.3351 | 累计平均损失: 0.2485
Epoch 12/20 完成 | 训练准确率: 91.36% | 测试准确率: 53.22%
Epoch: 13/20 | Batch: 100/782 | 单Batch损失: 0.1393 | 累计平均损失: 0.2292
Epoch: 13/20 | Batch: 200/782 | 单Batch损失: 0.1081 | 累计平均损失: 0.2329
Epoch: 13/20 | Batch: 300/782 | 单Batch损失: 0.2387 | 累计平均损失: 0.2395
Epoch: 13/20 | Batch: 400/782 | 单Batch损失: 0.3680 | 累计平均损失: 0.2432
Epoch: 13/20 | Batch: 500/782 | 单Batch损失: 0.4173 | 累计平均损失: 0.2502
Epoch: 13/20 | Batch: 600/782 | 单Batch损失: 0.3094 | 累计平均损失: 0.2537
Epoch: 13/20 | Batch: 700/782 | 单Batch损失: 0.1529 | 累计平均损失: 0.2564
Epoch 13/20 完成 | 训练准确率: 91.16% | 测试准确率: 52.58%
Epoch: 14/20 | Batch: 100/782 | 单Batch损失: 0.2478 | 累计平均损失: 0.2165
Epoch: 14/20 | Batch: 200/782 | 单Batch损失: 0.3821 | 累计平均损失: 0.2208
Epoch: 14/20 | Batch: 300/782 | 单Batch损失: 0.1603 | 累计平均损失: 0.2212
Epoch: 14/20 | Batch: 400/782 | 单Batch损失: 0.1973 | 累计平均损失: 0.2231
Epoch: 14/20 | Batch: 500/782 | 单Batch损失: 0.1641 | 累计平均损失: 0.2247
Epoch: 14/20 | Batch: 600/782 | 单Batch损失: 0.1680 | 累计平均损失: 0.2270
Epoch: 14/20 | Batch: 700/782 | 单Batch损失: 0.1552 | 累计平均损失: 0.2346
Epoch 14/20 完成 | 训练准确率: 91.74% | 测试准确率: 52.03%
Epoch: 15/20 | Batch: 100/782 | 单Batch损失: 0.2480 | 累计平均损失: 0.2251
Epoch: 15/20 | Batch: 200/782 | 单Batch损失: 0.3619 | 累计平均损失: 0.2279
Epoch: 15/20 | Batch: 300/782 | 单Batch损失: 0.2186 | 累计平均损失: 0.2332
Epoch: 15/20 | Batch: 400/782 | 单Batch损失: 0.1069 | 累计平均损失: 0.2327
Epoch: 15/20 | Batch: 500/782 | 单Batch损失: 0.1809 | 累计平均损失: 0.2382
Epoch: 15/20 | Batch: 600/782 | 单Batch损失: 0.3298 | 累计平均损失: 0.2412
Epoch: 15/20 | Batch: 700/782 | 单Batch损失: 0.1421 | 累计平均损失: 0.2412
Epoch 15/20 完成 | 训练准确率: 91.66% | 测试准确率: 53.11%
Epoch: 16/20 | Batch: 100/782 | 单Batch损失: 0.1439 | 累计平均损失: 0.1752
Epoch: 16/20 | Batch: 200/782 | 单Batch损失: 0.1940 | 累计平均损失: 0.1878
Epoch: 16/20 | Batch: 300/782 | 单Batch损失: 0.0542 | 累计平均损失: 0.1996
Epoch: 16/20 | Batch: 400/782 | 单Batch损失: 0.1820 | 累计平均损失: 0.2011
Epoch: 16/20 | Batch: 500/782 | 单Batch损失: 0.3156 | 累计平均损失: 0.2065
Epoch: 16/20 | Batch: 600/782 | 单Batch损失: 0.2317 | 累计平均损失: 0.2156
Epoch: 16/20 | Batch: 700/782 | 单Batch损失: 0.2105 | 累计平均损失: 0.2217
Epoch 16/20 完成 | 训练准确率: 92.30% | 测试准确率: 52.40%
Epoch: 17/20 | Batch: 100/782 | 单Batch损失: 0.1793 | 累计平均损失: 0.2449
Epoch: 17/20 | Batch: 200/782 | 单Batch损失: 0.2278 | 累计平均损失: 0.2343
Epoch: 17/20 | Batch: 300/782 | 单Batch损失: 0.1951 | 累计平均损失: 0.2315
Epoch: 17/20 | Batch: 400/782 | 单Batch损失: 0.2841 | 累计平均损失: 0.2280
Epoch: 17/20 | Batch: 500/782 | 单Batch损失: 0.1845 | 累计平均损失: 0.2256
Epoch: 17/20 | Batch: 600/782 | 单Batch损失: 0.2532 | 累计平均损失: 0.2231
Epoch: 17/20 | Batch: 700/782 | 单Batch损失: 0.3938 | 累计平均损失: 0.2261
Epoch 17/20 完成 | 训练准确率: 92.14% | 测试准确率: 52.76%
Epoch: 18/20 | Batch: 100/782 | 单Batch损失: 0.0784 | 累计平均损失: 0.2047
Epoch: 18/20 | Batch: 200/782 | 单Batch损失: 0.2569 | 累计平均损失: 0.1897
Epoch: 18/20 | Batch: 300/782 | 单Batch损失: 0.2867 | 累计平均损失: 0.1934
Epoch: 18/20 | Batch: 400/782 | 单Batch损失: 0.2843 | 累计平均损失: 0.1966
Epoch: 18/20 | Batch: 500/782 | 单Batch损失: 0.2486 | 累计平均损失: 0.2013
Epoch: 18/20 | Batch: 600/782 | 单Batch损失: 0.4471 | 累计平均损失: 0.2068
Epoch: 18/20 | Batch: 700/782 | 单Batch损失: 0.1483 | 累计平均损失: 0.2100
Epoch 18/20 完成 | 训练准确率: 92.80% | 测试准确率: 52.67%
Epoch: 19/20 | Batch: 100/782 | 单Batch损失: 0.1502 | 累计平均损失: 0.1719
Epoch: 19/20 | Batch: 200/782 | 单Batch损失: 0.1885 | 累计平均损失: 0.1848
Epoch: 19/20 | Batch: 300/782 | 单Batch损失: 0.1311 | 累计平均损失: 0.1963
Epoch: 19/20 | Batch: 400/782 | 单Batch损失: 0.1751 | 累计平均损失: 0.1939
Epoch: 19/20 | Batch: 500/782 | 单Batch损失: 0.2365 | 累计平均损失: 0.1970
Epoch: 19/20 | Batch: 600/782 | 单Batch损失: 0.0970 | 累计平均损失: 0.2056
Epoch: 19/20 | Batch: 700/782 | 单Batch损失: 0.3054 | 累计平均损失: 0.2153
Epoch 19/20 完成 | 训练准确率: 92.64% | 测试准确率: 52.34%
Epoch: 20/20 | Batch: 100/782 | 单Batch损失: 0.3200 | 累计平均损失: 0.2084
Epoch: 20/20 | Batch: 200/782 | 单Batch损失: 0.1219 | 累计平均损失: 0.2065
Epoch: 20/20 | Batch: 300/782 | 单Batch损失: 0.3571 | 累计平均损失: 0.2109
Epoch: 20/20 | Batch: 400/782 | 单Batch损失: 0.3528 | 累计平均损失: 0.2068
Epoch: 20/20 | Batch: 500/782 | 单Batch损失: 0.1560 | 累计平均损失: 0.2096
Epoch: 20/20 | Batch: 600/782 | 单Batch损失: 0.4336 | 累计平均损失: 0.2143
Epoch: 20/20 | Batch: 700/782 | 单Batch损失: 0.2936 | 累计平均损失: 0.2166
Epoch 20/20 完成 | 训练准确率: 92.63% | 测试准确率: 52.84%
@浙大疏锦行