使用豆包item testitem test,生成了一个的示例用于学习。

代码:

importtorch
importtorch.nnasnn
importtorch.optimasoptim
fromtorchvisionimportdatasetstransforms
fromtorch.utils.dataimportDataLoader

# 定义超参数
batch_size = 64
learning_rate = 0.01
epochs = 5

# 数据预处理
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.1307,), (0.3081,))
])

# 加载训练集和测试集
train_dataset = datasets.MNIST(root='./data'train=True,
                               download=Truetransform=transform)
test_dataset = datasets.MNIST(root='./data'train=False,
                              download=Truetransform=transform)

train_loader = DataLoader(train_datasetbatch_size=batch_sizeshuffle=True)
test_loader = DataLoader(test_datasetbatch_size=batch_sizeshuffle=False)


# 定义简单的神经网络
classSimpleNet(nn.Module):
    def__init__(self):
        super(SimpleNetself).__init__()
        self.fc1 = nn.Linear(28*28128)
        self.fc2 = nn.Linear(12864)
        self.fc3 = nn.Linear(6410)

    defforward(selfx):
        x = x.view(-128*28)
        x = torch.relu(self.fc1(x))
        x = torch.relu(self.fc2(x))
        x = self.fc3(x)
        returnx


model = SimpleNet()

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=learning_rate)

# 训练模型
forepochinrange(epochs):
    model.train()
    forbatch_idx, (datatargetinenumerate(train_loader):
        optimizer.zero_grad()
        output = model(data)
        loss = criterion(outputtarget)
        loss.backward()
        optimizer.step()
        ifbatch_idx%100 == 0:
            print(f'Train Epoch: {epoch} [{batch_idx * len(data)}/{len(train_loader.dataset)} '
                  f'({100. * batch_idx / len(train_loader):.0f}%)]tLoss: {loss.item():.6f}')

# 测试模型
model.eval()
test_loss = 0
correct = 0
withtorch.no_grad():
    fordatatargetintest_loader:
        output = model(data)
        test_loss += criterion(outputtarget).item()
        pred = output.argmax(dim=1keepdim=True)
        correct += pred.eq(target.view_as(pred)).sum().item()

test_loss /= len(test_loader.dataset)
print(f'nTest set: Average loss: {test_loss:.4f}, Accuracy: {correct}/{len(test_loader.dataset)} '
      f'({100. * correct / len(test_loader.dataset):.0f}%)n')
    

结果输出:


import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader

# 定义超参数
batch_size =64
learning_rate =0.01
epochs =5

# 数据预处理
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.1307,), (0.3081,))
])

# 加载训练集和测试集
train_dataset = datasets.MNIST(root='./data'train=True,
                               download=True, transform=transform)
test_dataset = datasets.MNIST(root='./data'train=False,
                              download=True, transform=transform)

train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)


# 定义简单的神经网络
class SimpleNet(nn.Module):
    def __init__(self):
        super(SimpleNet, self).__init__()
        self.fc1 = nn.Linear(28 * 28128)
        self.fc2 = nn.Linear(128, 64)
        self.fc3 = nn.Linear(64, 10)

    def forward(self, x):
        x = x.view(-1, 28 * 28)
        x = torch.relu(self.fc1(x))
        x = torch.relu(self.fc2(x))
        x = self.fc3(x)
        return x


model = SimpleNet()

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=learning_rate)

# 训练模型
for epoch in range(epochs):
    model.train()
    for batch_idx, (data, target) in enumerate(train_loader):
        optimizer.zero_grad()
        output = model(data)
        loss = criterion(output, target)
        loss.backward()
        optimizer.step()
        if batch_idx % 100==0:
            print(f'Train Epoch: {epoch} [{batch_idx * len(data)}/{len(train_loader.dataset)} '
                  f'({100. * batch_idx / len(train_loader):.0f}%)]tLoss: {loss.item():.6f}')

# 测试模型
model.eval()
test_loss =0
correct =0
with torch.no_grad():
    for data, target in test_loader:
        output = model(data)
        test_loss += criterion(output, target).item()
        pred = output.argmax(dim=1keepdim=True)
        correct += pred.eq(target.view_as(pred)).sum().item()

test_loss /= len(test_loader.dataset)
print(f'nTest set: Average loss: {test_loss:.4f}, Accuracy: {correct}/{len(test_loader.dataset)} '
      f'({100. * correct / len(test_loader.dataset):.0f}%)n')
    

输出:


Train Epoch: 0 [0/60000 (0%)]Loss: 2.296187
Train Epoch: 0 [6400/60000 (11%)]Loss: 1.770142
Train Epoch: 0 [12800/60000 (21%)]Loss: 0.882951
Train Epoch: 0 [19200/60000 (32%)]Loss: 0.774030
Train Epoch: 0 [25600/60000 (43%)]Loss: 0.608989
Train Epoch: 0 [32000/60000 (53%)]Loss: 0.443349
Train Epoch: 0 [38400/60000 (64%)]Loss: 0.409414
Train Epoch: 0 [44800/60000 (75%)]Loss: 0.369192
Train Epoch: 0 [51200/60000 (85%)]Loss: 0.476558
Train Epoch: 0 [57600/60000 (96%)]Loss: 0.388408
Train Epoch: 1 [0/60000 (0%)]Loss: 0.347056
Train Epoch: 1 [6400/60000 (11%)]Loss: 0.205838
Train Epoch: 1 [12800/60000 (21%)]Loss: 0.298296
Train Epoch: 1 [19200/60000 (32%)]Loss: 0.265492
Train Epoch: 1 [25600/60000 (43%)]Loss: 0.578405
Train Epoch: 1 [32000/60000 (53%)]Loss: 0.261888
Train Epoch: 1 [38400/60000 (64%)]Loss: 0.473449
Train Epoch: 1 [44800/60000 (75%)]Loss: 0.257322
Train Epoch: 1 [51200/60000 (85%)]Loss: 0.168993
Train Epoch: 1 [57600/60000 (96%)]Loss: 0.206920
Train Epoch: 2 [0/60000 (0%)]Loss: 0.192081
Train Epoch: 2 [6400/60000 (11%)]Loss: 0.396907
Train Epoch: 2 [12800/60000 (21%)]Loss: 0.361700
Train Epoch: 2 [19200/60000 (32%)]Loss: 0.290306
Train Epoch: 2 [25600/60000 (43%)]Loss: 0.214245
Train Epoch: 2 [32000/60000 (53%)]Loss: 0.360949
Train Epoch: 2 [38400/60000 (64%)]Loss: 0.281561
Train Epoch: 2 [44800/60000 (75%)]Loss: 0.380115
Train Epoch: 2 [51200/60000 (85%)]Loss: 0.323679
Train Epoch: 2 [57600/60000 (96%)]Loss: 0.289964
Train Epoch: 3 [0/60000 (0%)]Loss: 0.134732
Train Epoch: 3 [6400/60000 (11%)]Loss: 0.380322
Train Epoch: 3 [12800/60000 (21%)]Loss: 0.189159
Train Epoch: 3 [19200/60000 (32%)]Loss: 0.192855
Train Epoch: 3 [25600/60000 (43%)]Loss: 0.284537
Train Epoch: 3 [32000/60000 (53%)]Loss: 0.358586
Train Epoch: 3 [38400/60000 (64%)]Loss: 0.133981
Train Epoch: 3 [44800/60000 (75%)]Loss: 0.117453
Train Epoch: 3 [51200/60000 (85%)]Loss: 0.245508
Train Epoch: 3 [57600/60000 (96%)]Loss: 0.117379
Train Epoch: 4 [0/60000 (0%)]Loss: 0.198738
Train Epoch: 4 [6400/60000 (11%)]Loss: 0.287366
Train Epoch: 4 [12800/60000 (21%)]Loss: 0.390377
Train Epoch: 4 [19200/60000 (32%)]Loss: 0.242391
Train Epoch: 4 [25600/60000 (43%)]Loss: 0.180091
Train Epoch: 4 [32000/60000 (53%)]Loss: 0.191751
Train Epoch: 4 [38400/60000 (64%)]Loss: 0.172341
Train Epoch: 4 [44800/60000 (75%)]Loss: 0.284955
Train Epoch: 4 [51200/60000 (85%)]Loss: 0.119116
Train Epoch: 4 [57600/60000 (96%)]Loss: 0.200912

Test set: Average loss: 0.0028, Accuracy: 9466/10000 (95%)

代码解释:

数据预处理:利用对数据进行预处理,将图像转换为张量并进行归一化。

加载数据集:使用.加载 MNIST 数据集,再用进行批量加载。

定义神经网络:构建一个简单的全连接神经网络,包含三个线性层。

定义损失函数和优化器:采用交叉熵损失函数nn.和随机梯度下降优化器optim.SGD。

训练模型:在多个轮次中对模型进行训练,每 100 个批次打印一次训练损失。

测试模型:在测试集上评估模型的性能,输出平均损失和准确率。


限时特惠:
本站持续每日更新海量各大内部创业课程,一年会员仅需要98元,全站资源免费下载
点击查看详情

站长微信:Jiucxh

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注