Python打卡:Day40

# 先继续之前的代码

import torch

import torch.nn as nn

import torch.optim as optim

from torch.utils.data import DataLoader , Dataset # DataLoader 是 PyTorch 中用于加载数据的工具

from torchvision import datasets, transforms # torchvision 是一个用于计算机视觉的库,datasets 和 transforms 是其中的模块

import matplotlib.pyplot as plt

import warnings

# 忽略警告信息

warnings.filterwarnings("ignore")

# 设置随机种子,确保结果可复现

torch.manual_seed(42)

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

print(f"使用设备: {device}")

# 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)   # 第二层线性变换,输出logits

        return x

# 初始化模型

model = MLP()

model = model.to(device)  # 将模型移至GPU(如果可用)

# from torchsummary import summary  # 导入torchsummary库

# print("\n模型结构信息:")

# summary(model, input_size=(1, 28, 28))  # 输入尺寸为MNIST图像尺寸

criterion = nn.CrossEntropyLoss()  # 交叉熵损失函数,适用于多分类问题

optimizer = optim.Adam(model.parameters(), lr=0.001)  # Adam优化器

@浙大疏锦行 

你可能感兴趣的:(Python打卡:Day40)