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

完整教程:【无标题】

Day39

# 打印一张彩色图像,用cifar-10数据集
import torch
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
import numpy as np# 设置随机种子确保结果可复现
torch.manual_seed(42)
# 定义数据预处理步骤
transform = transforms.Compose([
transforms.ToTensor(), # 转换为张量并归一化到[0,1]
transforms.Normalize((0.5,
0.5,
0.5), (0.5,
0.5,
0.5)) # 标准化处理
])# 加载CIFAR-10训练集
trainset = torchvision.datasets.CIFAR10(
root='./data',
train=True,
download=True,
transform=transform
)# 创建数据加载器
trainloader = torch.utils.data.DataLoader(
trainset,
batch_size=4,
shuffle=True
)# CIFAR-1010个类别
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]}")# 定义图像显示函数(适用于CIFAR-10彩色图像)
def imshow(img):
img = img / 2 + 0.5 # 反标准化处理,将图像范围从[-1,1]转回[0,1]
npimg = img.numpy()
plt.imshow(np.transpose(npimg, (1,
2,
0))) # 调整维度顺序:(通道,高,宽) → (高,宽,通道)
plt.axis('off') # 关闭坐标轴显示
plt.show()# 显示图像
imshow(image)
# 先归一化,再标准化
transform = transforms.Compose([
transforms.ToTensor(), # 转换为张量并归一化到[0,1]
transforms.Normalize((0.1307,), (0.3081,)) # MNIST数据集的均值和标准差,这个值很出名,所以直接使用
])
import matplotlib.pyplot as plt# 2. 加载MNIST数据集,如果没有会自动下载
train_dataset = datasets.MNIST(
root='./data',
train=True,
download=True,
transform=transform
)test_dataset = datasets.MNIST(
root='./data',
train=False,
transform=transform
)# 定义两层MLP神经网络
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()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图像尺寸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= 3072
self.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

@浙大疏锦行

http://www.gsyq.cn/news/16909.html

相关文章:

  • vector使用中的一个小问题
  • 一生一芯学习:PA2:输入输出
  • 深入解析:人工智能-Chain of Thought Prompting(思维链提示,简称CoT)
  • 年龄排序
  • 二分图最大匹配 输出具体方案
  • Success of Europa
  • 2025多校冲刺CSP模拟赛4 总结
  • 多路归并、败者树、置换-选择排序、最佳归并树
  • AI元人文:规则与人文的统一之路
  • 深入解析:SpringBatch+Mysql+hanlp简版智能搜索
  • Cisco vManage漏洞分析:未授权RCE与权限提升完整攻击链
  • 东萍象棋 DhtmlXQ UBB 转 中国象棋云库查询 FEN
  • 十六、【前端强化篇】完善 TestCase 编辑器:支持 API 结构化定义与断言安装
  • 斑马ZT210碳带及纸张安装教程
  • DHCP及DNS
  • C++_基础
  • 2025电位仪厂家最新企业品牌推荐排行榜,纳米粒度及 Zeta 电位仪,Zeta 电位仪公司推荐
  • StarRocks与Apache Iceberg:构建高效湖仓一体的实时分析平台 - 详解
  • MTK oppoR9m Smart Phone flash Tool 提示 ERROR: STATUS_ABORT(0xC0010002)
  • 2025 年酒店一次性用品源头厂家最新推荐排行榜:含牙签牙线筷子套杯盖杯垫杯套外卖筷子印刷房卡套信封用品优质供应商盘点
  • 简单工厂模式 - 实践
  • 1.springmvc基础入门(一) - 详解
  • 稀缺计算资源如何塑造机器学习优化专家
  • 优雅的合并GIT分支
  • 完整教程:Excel to JSON 插件 2.4.0 版本更新
  • Ai元人文:人文逻辑与规则逻辑的统一
  • 通过实验直观理解神经网络:ReLU网络与几何解释
  • 统计备注
  • 单例模式的类和静态方法的类的区别和使用场景 - 指南
  • LGP9871 [NOIP 2023] 天天爱打卡 学习笔记