当前位置: 首页 > news >正文

Day 39

一、 图像数据的介绍

1.1 灰度图像

# 先继续之前的代码
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader , Dataset
from torchvision import datasets, transforms 
torch.manual_seed(42)transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))  
])
import matplotlib.pyplot as plttrain_dataset = datasets.MNIST(root='./data',train=True,download=True,transform=transform
)test_dataset = datasets.MNIST(root='./data',train=False,transform=transform
)# 随机选择一张图片,可以重复运行,每次都会随机选择
sample_idx = torch.randint(0, len(train_dataset), size=(1,)).item()
image, label = train_dataset[sample_idx]
def imshow(img):img = img * 0.3081 + 0.1307 npimg = img.numpy()plt.imshow(npimg[0], cmap='gray') plt.show()print(f"Label: {label}")
imshow(image)

1.2彩色图像

在 PyTorch 中,图像数据的形状通常遵循 (通道数, 高度, 宽度) 的格式(即 Channel First 格式),这与常见的 (高度, 宽度, 通道数)(Channel Last,如 NumPy 数组)不同。---注意顺序关系,

注意点:
1. 如果用matplotlib库来画图,需要转换下顺序,我们后续介绍
2. 模型输入通常需要 批次维度(Batch Size),形状变为 (批次大小, 通道数, 高度, 宽度)。例如,批量输入 10 张 MNIST 图像时,形状为 (10, 1, 28, 28)。
 

# 打印一张彩色图像,用cifar-10数据集
import torch
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
import numpy as nptorch.manual_seed(42)
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))  
])trainset = torchvision.datasets.CIFAR10(root='./data',train=True,download=True,transform=transform
)trainloader = torch.utils.data.DataLoader(trainset,batch_size=4,shuffle=True
)classes = ('plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')sample_idx = torch.randint(0, len(trainset), size=(1,)).item()
image, label = trainset[sample_idx]print(f"图像形状: {image.shape}")  # 输出: torch.Size([3, 32, 32])
print(f"图像类别: {classes[label]}")def imshow(img):img = img / 2 + 0.5  npimg = img.numpy()plt.imshow(np.transpose(npimg, (1, 2, 0))) plt.axis('off')  plt.show()imshow(image)

 二、 图像相关的神经网络的定义

只提定义,不涉及训练和测试过程

transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) 
])
import matplotlib.pyplot as plttrain_dataset = datasets.MNIST(root='./data',train=True,download=True,transform=transform
)test_dataset = datasets.MNIST(root='./data',train=False,transform=transform
)
class MLP(nn.Module):def __init__(self):super(MLP, self).__init__()self.flatten = nn.Flatten()  self.layer1 = nn.Linear(784, 128)  self.relu = nn.ReLU()  self.layer2 = nn.Linear(128, 10)          def forward(self, x):x = self.flatten(x)  x = self.layer1(x)   x = self.relu(x)     x = self.layer2(x)   return xmodel = MLP()
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)  from torchsummary import summary  
print("\n模型结构信息:")
summary(model, input_size=(1, 28, 28)) 

2.2彩色图像模型的定义

class MLP(nn.Module):def __init__(self, input_size=3072, hidden_size=128, num_classes=10):super(MLP, self).__init__()# 展平层:将3×32×32的彩色图像转为一维向量# 输入尺寸计算:3通道 × 32高 × 32宽 = 3072self.flatten = nn.Flatten()# 全连接层self.fc1 = nn.Linear(input_size, hidden_size)  # 第一层self.relu = nn.ReLU()self.fc2 = nn.Linear(hidden_size, num_classes)  # 输出层def forward(self, x):x = self.flatten(x)  # 展平:[batch, 3, 32, 32] → [batch, 3072]x = self.fc1(x)      # 线性变换:[batch, 3072] → [batch, 128]x = self.relu(x)     # 激活函数x = self.fc2(x)      # 输出层:[batch, 128] → [batch, 10]return x# 初始化模型
model = MLP()device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)  # 将模型移至GPU(如果可用)from torchsummary import summary  # 导入torchsummary库
print("\n模型结构信息:")
summary(model, input_size=(3, 32, 32))  # CIFAR-10 彩色图像(3×32×32)

2.3 模型定义与batchsize的关系

实际定义中,输入图像还存在batchsize这一维度

在 PyTorch 中,模型定义和输入尺寸的指定不依赖于 batch_size,无论设置多大的 batch_size,模型结构和输入尺寸的写法都是不变的。

class MLP(nn.Module):def __init__(self):super().__init__()self.flatten = nn.Flatten() # nn.Flatten()会将每个样本的图像展平为 784 维向量,但保留 batch 维度。self.layer1 = nn.Linear(784, 128)self.relu = nn.ReLU()self.layer2 = nn.Linear(128, 10)def forward(self, x):x = self.flatten(x)  # 输入:[batch_size, 1, 28, 28] → [batch_size, 784]x = self.layer1(x)   # [batch_size, 784] → [batch_size, 128]x = self.relu(x)x = self.layer2(x)   # [batch_size, 128] → [batch_size, 10]return x

http://www.xdnf.cn/news/719065.html

相关文章:

  • 结构体对齐和结构体相关宏
  • day39 图像数据与显存
  • Cadence Innvous导出GDS没有STDCELL/IO/NET/VIA问题的解决方法
  • 输电线路的“智慧之眼”:全天候可视化监测如何赋能电网安全运维
  • Cmake编译glog成功并在QT中测试成功步骤
  • Mac本地安装MySQL jdbc Driver
  • 性能测试-jmeter实战1
  • R²AIN SUITE 驱动制造业变革:从灯塔实践到企业级落地方案
  • [Vue2]判断引用组件是否注册了 $emit 对应的事件
  • 网络摄像机POE交换机选型指南:技术参数与场景适配深度解析
  • 使用C# 快速删除Excel表格中的重复行数据-详解
  • HALCON常用算子
  • 【读代码】BabyAGI:自我构建的自主代理框架深度解析
  • Linux入门
  • C语言中函数指针和指针函数的定义及用法
  • 【leetcode】19. 删除链表的倒数第N个节点
  • CppCon 2014 学习第3天:Viewing the world through array-shaped glasses
  • 计算机网络常见体系结构、分层必要性、分层设计思想以及专用术语介绍
  • Mybatis(Plus)对JSON / Array类型进行序列化
  • 2.环境搭建
  • 项目更改权限后都被git标记为改变,怎么去除
  • ai绘制mg人物半侧面头型
  • 2025年OE SCI2区TOP,进化麻雀搜索算法ESSA+海洋阻尼器迟滞建模与辨识,深度解析+性能实测
  • 进程同步机制-信号量机制-记录型信号量机制中的的wait和signal操作
  • 未来楼宇自控系统升级优化,为绿色建筑发展注入更强动力支撑
  • 大模型应用开发之评估
  • 浅谈学习(费曼学习法)
  • 四叉树实现四边形网格
  • OpenGL —— 2.9.1、摄像机之模拟CS鼠标视角转动,可切换线框模式显示(附源码,glfw+glad)
  • 力扣刷题Day 64:括号生成(22)