首页 > 其他分享 >深度学习卷积(Convolution)

深度学习卷积(Convolution)

时间:2024-12-16 10:43:17浏览次数:3  
标签:loss Convolution nn 卷积 train 深度 device total size

图像卷积

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

# 使用GPU(如果可用),否则使用CPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print("Using device:", device)

# --------------------------
# 1. 数据加载与预处理
# --------------------------

# Fashion-MNIST 数据集:28x28 灰度图像,10 个类别
transform = transforms.ToTensor()

train_dataset = torchvision.datasets.FashionMNIST(
    root='./data',
    train=True,
    download=True,
    transform=transform
)

test_dataset = torchvision.datasets.FashionMNIST(
    root='./data',
    train=False,
    download=True,
    transform=transform
)

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

# --------------------------
# 2. 定义模型
# --------------------------
net = nn.Sequential(
    nn.Conv2d(1, 6, kernel_size=5, padding=2), nn.Sigmoid(),
    nn.AvgPool2d(kernel_size=2, stride=2),
    nn.Conv2d(6, 16, kernel_size=5), nn.Sigmoid(),
    nn.AvgPool2d(kernel_size=2, stride=2),
    nn.Flatten(),
    nn.Linear(16 * 5 * 5, 120), nn.Sigmoid(),
    nn.Linear(120, 84), nn.Sigmoid(),
    nn.Linear(84, 10)
)

net = net.to(device)

# --------------------------
# 3. 定义损失函数与优化器
# --------------------------
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.9)  # 学习率可根据需要调整

# --------------------------
# 4. 训练函数与测试函数定义
# --------------------------

def train_one_epoch(model, dataloader, optimizer, criterion, device):
    model.train()
    total_loss = 0.0
    correct = 0
    total = 0
    for inputs, targets in dataloader:
        inputs, targets = inputs.to(device), targets.to(device)
        
        # 前向传播
        outputs = model(inputs)
        loss = criterion(outputs, targets)
        
        # 反向传播与更新参数
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        
        total_loss += loss.item() * inputs.size(0)
        _, predicted = outputs.max(1)
        total += targets.size(0)
        correct += predicted.eq(targets).sum().item()
        
    avg_loss = total_loss / total
    accuracy = correct / total
    return avg_loss, accuracy

def evaluate(model, dataloader, criterion, device):
    model.eval()
    total_loss = 0.0
    correct = 0
    total = 0
    with torch.no_grad():
        for inputs, targets in dataloader:
            inputs, targets = inputs.to(device), targets.to(device)
            outputs = model(inputs)
            loss = criterion(outputs, targets)
            
            total_loss += loss.item() * inputs.size(0)
            _, predicted = outputs.max(1)
            total += targets.size(0)
            correct += predicted.eq(targets).sum().item()
            
    avg_loss = total_loss / total
    accuracy = correct / total
    return avg_loss, accuracy

# --------------------------
# 5. 模型训练与测试
# --------------------------
epochs = 10
for epoch in range(1, epochs + 1):
    train_loss, train_acc = train_one_epoch(net, train_loader, optimizer, criterion, device)
    test_loss, test_acc = evaluate(net, test_loader, criterion, device)
    
    print(f"Epoch [{epoch}/{epochs}]: "
          f"Train Loss: {train_loss:.4f}, Train Acc: {train_acc*100:.2f}% "
          f"| Test Loss: {test_loss:.4f}, Test Acc: {test_acc*100:.2f}%")

# 在训练完成后可以保存模型
torch.save(net.state_dict(), "fashion_mnist_model.pth")
print("Model saved as fashion_mnist_model.pth")

卷积层

池化层

标签:loss,Convolution,nn,卷积,train,深度,device,total,size
From: https://www.cnblogs.com/afengleafs/p/18608317

相关文章

  • 计算机毕业设计项目源码 大数据深度学习 基于聚类算法实现的二手房价分析及可视化系统
    标题:基于聚类算法实现的二手房价分析及可视化系统基于聚类算法实现的二手房价分析及可视化系统可以具备以下主要功能:数据采集与预处理:从各大二手房平台抓取房源信息,包括房价、面积、房型、位置等属性。数据清洗,处理缺失值、异常值和重复数据。数据标准化和归一化,以便于后......
  • 计算机毕设源码 大数据深度学习 基于聚类算法实现的房屋数据分析及可视化系统
    标题:基于聚类算法实现的房屋数据分析及可视化系统基于聚类算法的房屋数据分析及可视化系统主要功能可以包括以下几个方面:数据采集与预处理:收集房屋销售相关的数据,如房屋价格、面积、房间数量、位置、建造年份等。数据清洗,处理缺失值、异常值,进行标准化或归一化。聚类分析......
  • 毕业设计:python车牌识别系统 CNN算法 卷积神经网络网络 深度学习 tensorflow(源码)✅
    python车牌识别系统CNN算法卷积神经网络网络深度学习tensorflow(源码)1、项目介绍技术栈:Python语言、CNN算法、tensorflow和keras、深度学习、opencv、pyqt5图形界面2、项目界面(1)上传图像进行车牌识别1(2)上传图像进行车牌识别2(3)上传图像进行车牌识别3(4)上传视......
  • Java 密封类 (Sealed Classes) 深度解析
    文章目录语法说明定义密封类定义子类使用场景探讨实际应用示例与其他语言特性的结合使用Java作为一种面向对象编程语言,提供了继承机制来实现代码复用和扩展。然而,无限制的继承可能导致代码库变得难以维护,甚至引入安全隐患。为了应对这一挑战,Java引入了密封类的概......
  • OpenCV与AI深度学习 | 基于YOLO和EasyOCR从视频中识别车牌
    本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。原文链接:基于YOLO和EasyOCR从视频中识别车牌 在本文中,我们将探讨如何使用Python中的YOLO(YouOnlyLookOnce)和EasyOCR(OpticalCharacterRecognition)从视频文件中实现车牌检测。这种方法利用深度学......
  • 【深度学习】 零基础介绍卷积神经网络(CNN)
    零基础介绍卷积神经网络(CNN,ConvolutionalNeuralNetwork)是深度学习中的一种神经网络,特别擅长处理图像和视频等有空间结构的数据。假设我们在做一个“照片分类”的任务,比如判断一张照片中是猫还是狗。下面用一个通俗的例子来解释CNN的工作原理。看图的方式:模拟人眼当我......
  • 深度Q网络(Deep Q-Network, DQN)详解
    ✅作者简介:2022年博客新星第八。热爱国学的Java后端开发者,修心和技术同步精进。......
  • MySQL 中如何解决深度分页的问题?
    MySQL中如何解决深度分页的问题?在MySQL中,深度分页是指查询数据时,用户请求的是数据集中的较后部分,而不是从头开始的数据。这类分页查询常见于有大量数据的系统中,当页数很大时,查询效率会显著下降。深度分页的性能问题深度分页的主要性能瓶颈在于OFFSET和LIMIT。随着页数的......
  • 【工业机器视觉】基于深度学习的水表盘读数识别(5-读数修正)
    【工业机器视觉】基于深度学习的水表盘读数识别(3-数据标注与转换)-CSDN博客读数修正上一篇我们已经正确对图片进行了预测,并且可视化了预测结果,接下来我们要对预测结果数据进行解析、处理、修正,得到最终读数。这里不再介绍上位机开发,本文是基于Pyside6开发的上位机。模型加载......
  • 【C 语言文件操作】—— 内存映射与高效 I/O 策略的深度融合
    C语言学习笔记:C语言梦开始的地方__Zwy@的博客-CSDN博客 各位于晏,亦菲们,请点赞关注!我的个人主页:_Zwy@-CSDN博客目录1、文件1.1、文件的概念1.1.1、物理层面1.1.2、逻辑层面1.2、文件的类型1.3、文件名1.3.1、命名规则 1.3.2、组成部分1.3.3、作用1.3.4、文......