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

打开网站文件夹权限设置搜索引擎网络推广方法

打开网站文件夹权限设置,搜索引擎网络推广方法,苏州中小型网站建设,龙江网站设计目录 一、图像数据的处理与预处理 (一)图像数据的特点 (二)数据预处理 二、神经网络模型的定义 (一)黑白图像模型的定义 (二)彩色图像模型的定义 (三)…

目录

一、图像数据的处理与预处理

(一)图像数据的特点

(二)数据预处理

二、神经网络模型的定义

(一)黑白图像模型的定义

(二)彩色图像模型的定义

(三)模型定义与batch size的关系

三、显存占用的主要组成部分

(一)模型参数与梯度

(二)优化器状态

(三)数据批量(batch size)的显存占用

(四)前向/反向传播中间变量

四、batch size的选择与训练影响


一、图像数据的处理与预处理

(一)图像数据的特点

在深度学习中,图像数据与结构化数据(如表格数据)有着显著的区别。结构化数据的形状通常是(样本数,特征数),例如一个形状为(1000, 5)的表格数据表示有1000个样本,每个样本有5个特征。而图像数据需要保留空间信息(高度、宽度、通道数),因此不能直接用一维向量表示。例如,MNIST数据集是手写数字的灰度图像,其图像尺寸统一为28×28像素,通道数为1;而CIFAR-10数据集是彩色图像,图像尺寸为32×32像素,通道数为3。这种复杂性使得图像数据的处理需要特别的方法。

(二)数据预处理

数据预处理是深度学习中非常重要的一环。在处理图像数据时,通常会进行归一化和标准化操作。以MNIST数据集为例,使用transforms.ToTensor()可以将图像转换为张量并归一化到[0,1],然后通过transforms.Normalize((0.1307,), (0.3081,))进行标准化,其中(0.1307,)是均值,(0.3081,)是标准差。这些操作有助于提高模型的训练效果。

以下是完整的代码示例:

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, Dataset
from torchvision import datasets, transforms
import matplotlib.pyplot as plt# 设置随机种子,确保结果可复现
torch.manual_seed(42)# 数据预处理
transform = transforms.Compose([transforms.ToTensor(),  # 转换为张量并归一化到[0,1]transforms.Normalize((0.1307,), (0.3081,))  # MNIST数据集的均值和标准差
])# 加载MNIST数据集
train_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)

二、神经网络模型的定义

(一)黑白图像模型的定义

以MNIST数据集为例,定义了一个两层的MLP(多层感知机)神经网络。模型中使用了nn.Flatten()将28×28的图像展平为784维向量,以符合全连接层的输入格式。第一层全连接层有784个输入和128个神经元,第二层全连接层有128个输入和10个输出(对应10个数字类别)。通过torchsummary.summary()可以查看模型的结构信息,包括各层的输出形状和参数数量。

以下是模型定义的代码:

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)   # 第二层线性变换,输出logitsreturn 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=(1, 28, 28))  # 输入尺寸为MNIST图像尺寸

(二)彩色图像模型的定义

对于CIFAR-10数据集,定义了一个适用于彩色图像的MLP模型。输入尺寸为3×32×32,展平后为3072维向量。模型结构与黑白图像模型类似,但输入尺寸和参数数量有所不同。通过这种方式,可以处理彩色图像数据。

以下是彩色图像模型的代码:

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)

(三)模型定义与batch size的关系

在PyTorch中,模型定义和输入尺寸的指定不依赖于batch size。无论设置多大的batch size,模型结构和输入尺寸的写法都是不变的。torchsummary.summary()只需要指定样本的形状(通道×高×宽),而无需提及batch size。batch size是在数据加载阶段定义的,与模型结构无关。

以下是数据加载器的代码:

from torch.utils.data import DataLoader# 定义训练集的数据加载器,并指定batch_size
train_loader = DataLoader(dataset=train_dataset,  # 加载的数据集batch_size=64,          # 每次加载64张图像shuffle=True            # 训练时打乱数据顺序
)# 定义测试集的数据加载器(通常batch_size更大,减少测试时间)
test_loader = DataLoader(dataset=test_dataset,batch_size=1000,shuffle=False
)

三、显存占用的主要组成部分

在深度学习中,显存的合理使用至关重要。显存一般被以下内容占用:

(一)模型参数与梯度

模型的权重和对应的梯度会占用显存。以MNIST数据集和MLP模型为例,参数总量为101,770个。单精度(float32)参数占用约403 KB,梯度占用与参数相同,合计约806 KB。部分优化器(如Adam)会为每个参数存储动量和平方梯度,进一步增加显存占用。

(二)优化器状态

SGD优化器不存储额外动量,因此无额外显存占用。而Adam优化器会为每个参数存储动量和平方梯度,占用约806 KB。

(三)数据批量(batch size)的显存占用

单张图像的显存占用取决于其尺寸和数据类型。以MNIST数据集为例,单张图像显存占用约为3 KB。批量数据占用为batch size乘以单张图像占用。例如,batch size为64时,数据占用约为192 KB。

(四)前向/反向传播中间变量

对于两层MLP,中间变量(如layer1的输出)占用较小。以batch size为1024为例,中间变量占用约为512 KB。

以下是显存占用的计算代码示例:

# 显存占用计算示例
# 单精度(float32)参数占用
num_params = 101770
param_size = num_params * 4  # 每个参数占用4字节
print(f"模型参数占用显存:{param_size / 1024 / 1024:.2f} MB")# 梯度占用(反向传播时)
gradient_size = param_size
print(f"梯度占用显存:{gradient_size / 1024 / 1024:.2f} MB")# Adam优化器的额外占用
adam_extra_size = param_size * 2  # 动量和平方梯度
print(f"Adam优化器额外占用显存:{adam_extra_size / 1024 / 1024:.2f} MB")# 数据批量(batch size)的显存占用
batch_size = 64
image_size = 28 * 28 * 1 * 4  # 单张图像占用(通道×高×宽×字节数)
data_size = batch_size * image_size
print(f"批量数据占用显存:{data_size / 1024 / 1024:.2f} MB")

四、batch size的选择与训练影响

在训练过程中,选择合适的batch size非常重要。如果batch size设置得太大,可能会导致显存不足(OOM);如果设置得过小,则无法充分利用显卡的计算能力。通常从较小的batch size(如16)开始测试,然后逐渐增加,直到出现OOM报错或训练效果下降。合适的batch size可以通过训练效果验证并结合显存占用情况进行调整。使用较大的batch size相比单样本训练有以下优势:并行计算能力最大化,减小训练时间;梯度方向更准确,训练过程更稳定。但需要注意的是,过大的batch size可能会导致训练效果下降,因此需要根据实际情况进行权衡。

以下是训练循环的代码示例:

# 训练循环示例
for epoch in range(num_epochs):for data, target in train_loader:data, target = data.to(device), target.to(device)optimizer.zero_grad()output = model(data)loss = criterion(output, target)loss.backward()optimizer.step()

@浙大疏锦行


文章转载自:

http://XE1wZW7W.Lhgqc.cn
http://HcSAoIAj.Lhgqc.cn
http://kpIFNu1N.Lhgqc.cn
http://xXtjGkJO.Lhgqc.cn
http://ACh8wmNW.Lhgqc.cn
http://1yYzWIh9.Lhgqc.cn
http://gAVAM4zK.Lhgqc.cn
http://vzxGYTt2.Lhgqc.cn
http://w6bCTfY7.Lhgqc.cn
http://snJeZLPN.Lhgqc.cn
http://TjPDuJFP.Lhgqc.cn
http://iJK6Ii9k.Lhgqc.cn
http://mwqkP5ji.Lhgqc.cn
http://ufGSwouu.Lhgqc.cn
http://TEi2CHum.Lhgqc.cn
http://pNGfmOP7.Lhgqc.cn
http://oUQAgpfm.Lhgqc.cn
http://Ju0KIuFE.Lhgqc.cn
http://bEjLIfGA.Lhgqc.cn
http://rybxL9L4.Lhgqc.cn
http://ZKtL7CCn.Lhgqc.cn
http://2WZTtQVb.Lhgqc.cn
http://8KtVUhhp.Lhgqc.cn
http://nbCc8L0I.Lhgqc.cn
http://pIqyNMYV.Lhgqc.cn
http://spT3HtWx.Lhgqc.cn
http://fopY0HDb.Lhgqc.cn
http://X6kYvZW6.Lhgqc.cn
http://KzacUgfl.Lhgqc.cn
http://jspSnL5F.Lhgqc.cn
http://www.dtcms.com/wzjs/669219.html

相关文章:

  • 宁波网络建站公司有哪些简述网站规划的主要内容
  • 怎么做网盘网站网址打不开是啥原因
  • 无锡企业建站系统企业网站管理系统带授权
  • 怎么做自己的cms导购网站网站免费源码大全无用下载
  • 移动网站建设哪家便宜做网站比特币钱包
  • 西安市城乡建设管理局网站的公示栏6海口网站开发公司电话
  • 烟台怎么做网站怎么制作一个微信小程序
  • 网站与后台企业网站怎样做可以搜索到
  • 校园网站建设的背景企业网站的建立方法
  • vs 网站开发教程网站备案申请
  • 建一个购物网站香水网络营销策划方案
  • 茶叶网站制作模板简约的网页设计欣赏
  • 网站建设捌金手指下拉十四网站建设公司擅自关闭客户网络
  • dedecms 调用网站内部搜索外贸电商
  • 大连网站设计菲尔莱斯推广宣传方式有哪些
  • 自适应网站开发wordpress怎么实现会员登录
  • 怎样刷新网站做杂志的网站有哪些
  • 网站标题应怎设置企业文化包括哪六个
  • 怎么在wordpress建英文网站怎么制作网站首页的代码
  • 买过域名之前就可以做网站了吗?普通电脑可以做网站服务器
  • 现在网站都是拿什么软件做的如何在微信公众号里建设微网站
  • 怎么查网站空间在哪里网站服务器租用选择
  • 成都网站优化推广怎么建设自己的购物网站
  • 服饰类网站开发项目湖南省建设工程施工合同
  • seo两个域名一个网站有影响吗wordpress手机版如何设置
  • html5网站引导页中关村手机在线官网
  • 网站定制分享安阳论坛最新消息
  • 企业网站 设计销售策略和营销策略
  • 做网站的时候怎么把图片往左移请人做网站合同
  • 东莞网站建设搭建网站开发后未付维护费