Alex net训练模型

本文深入探讨如何使用Python进行深度学习,重点是AlexNet模型的训练过程。我们将讨论数据预处理、模型架构、损失函数以及优化器的选择,同时涵盖训练技巧和调参策略,帮助读者更好地理解和实现这一经典深度学习模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import os

import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision.models as models
import torchvision.transforms as transforms
from matplotlib import pyplot as plt
from torch.utils.data import DataLoader
# from A_alexnet.tools.my_dataset import CatDogDataset
from A_alexnet.tools.my_dataset import CatDogDataset
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
device = torch.device("cpu")


def get_model(path_state_dict, vis_model=False):
    """
    创建模型,加载参数
    :param path_state_dict:
    :return:
    """
    model = models.alexnet()
    pretrained_state_dict = torch.load(path_state_dict)
    model.load_state_dict(pretrained_state_dict)

    if vis_model:
        from torchsummary import summary
        summary(model, input_size=(3, 224, 224), device="cpu")

    model.to(device)
    return model


if __name__ == "__main__":

    # config
    data_dir = os.path.join(BASE_DIR, "..", "data", "train")
    path_state_dict = os.path.join(BASE_DIR, "..", "data", "alexnet-owt-4df8aa71.pth")
    num_classes = 2

    MAX_EPOCH = 10       # 可自行修改
    BATCH_SIZE = 128    # 可自行修改
    LR = 0.001          # 可自行修改
    log_interval = 1    # 可自行修改
    val_interval = 1    # 可自行修改
    classes = 2
    start_epoch = -1
    lr_decay_step = 1   # 可自行修改

    # ============================ step 1/5 数据 ============================
    norm_mean = [0.485, 0.456, 0.406
PyTorch是一个流行的深度学习框架,它提供了便捷的接口和工具,可以用于构建和训练神经网络模型AlexNet是一个经典的卷积神经网络结构,它在图像分类任务上取得了很好的效果。 在PyTorch中,我们可以利用正则化技术来训练AlexNet网络。正则化是一种防止模型过拟合的常用方法,通过在损失函数中添加正则项来限制模型的复杂度。 在训练AlexNet时,一种常见的正则化方法是L2正则化(也称为权重衰减)。L2正则化通过在损失函数中添加一个惩罚项来限制权重的大小。这可以通过在模型的定义中使用`weight_decay`参数来实现,如下所示: ```python import torch import torch.nn as nn class AlexNet(nn.Module): def __init__(self, num_classes=1000): ... # 定义网络结构 def forward(self, x): ... model = AlexNet() optimizer = torch.optim.SGD(model.parameters(), lr=0.01, weight_decay=0.0005) ``` 在使用`torch.optim.SGD`定义优化器时,设置`weight_decay`参数为一个小的正数,例如0.0005。这将使得优化器在更新参数时,对权重项进行衰减处理,限制权重的增长。 此外,还可以使用其他正则化方法,如Dropout。Dropout通过在训练过程中随机将一部分神经元输出置为0,来减少不同神经元之间的依赖关系,从而提高模型的泛化能力。 要在AlexNet中使用Dropout,可以在模型定义中添加`torch.nn.Dropout`模块,并在forward函数中使用,如下所示: ```python ... class AlexNet(nn.Module): def __init__(self, num_classes=1000): ... self.dropout = nn.Dropout(0.5) def forward(self, x): ... x = self.dropout(x) ... ``` 这样,在训练过程中,模型将会以50%的概率将部分神经元的输出设置为0,从而减少过拟合风险。 总而言之,在PyTorch中训练AlexNet网络时,我们可以利用正则化技术(如L2正则化和Dropout)来提高模型的泛化能力和抗过拟合能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值