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

DAY 54 python打卡

作业:一次稍微有点学术感觉的作业:

  1. 对inception网络在cifar10上观察精度
  2. 消融实验:引入残差机制和cbam模块分别进行消融

1. 数据准备
我选择了经典的鸢尾花(Iris)数据集中的“Setosa”类别作为实验对象。这个数据集包含4个特征,非常适合用来测试GAN模型。我首先对数据进行了归一化处理,将其缩放到[-1, 1]范围内,以提高模型的训练效果。

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset
import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt# 加载数据
iris = load_iris()
X = iris.data
y = iris.target# 选择 Setosa 类别
X_class0 = X[y == 0]# 数据归一化
scaler = MinMaxScaler(feature_range=(-1, 1))
X_scaled = scaler.fit_transform(X_class0)# 转换为 PyTorch Tensor
real_data_tensor = torch.from_numpy(X_scaled).float()
dataset = TensorDataset(real_data_tensor)
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)
2. 构建生成器和判别器

接下来,我定义了生成器和判别器的网络结构。生成器使用了简单的多层感知机(MLP)结构,输入是随机噪声,输出是与真实数据维度相同的样本。判别器同样使用MLP结构,输出是一个概率值,表示输入样本是真实样本的概率。

class Generator(nn.Module):def __init__(self):super(Generator, self).__init__()self.model = nn.Sequential(nn.Linear(10, 16),nn.ReLU(),nn.Linear(16, 32),nn.ReLU(),nn.Linear(32, 4),nn.Tanh())def forward(self, x):return self.model(x)class Discriminator(nn.Module):def __init__(self):super(Discriminator, self).__init__()self.model = nn.Sequential(nn.Linear(4, 32),nn.LeakyReLU(0.2),nn.Linear(32, 16),nn.LeakyReLU(0.2),nn.Linear(16, 1),nn.Sigmoid())def forward(self, x):return self. Model(x)
3. 训练过程

在训练过程中,我交替更新生成器和判别器的参数。每一步中,首先用真实数据和生成数据训练判别器,然后用生成数据训练生成器。通过这种方式,两个网络不断对抗,逐渐提升性能。

# 定义损失函数和优化器
criterion = nn.BCELoss()
g_optimizer = optim.Adam(generator.parameters(), lr=0.0002, betas=(0.5, 0.999))
d_optimizer = optim.Adam(discriminator.parameters(), lr=0.0002, betas=(0.5, 0.999))# 训练循环
for epoch in range(10000):for i, (real_data,) in enumerate(dataloader):# 训练判别器d_optimizer.zero_grad()real_output = discriminator(real_data)d_loss_real = criterion(real_output, torch.ones_like(real_output))noise = torch.randn(real_data.size(0), 10)fake_data = generator(noise).detach()fake_output = discriminator(fake_data)d_loss_fake = criterion(fake_output, torch.zeros_like(fake_output))d_loss = d_loss_real + d_loss_faked_loss.backward()d_optimizer.step()# 训练生成器g_optimizer.zero_grad()fake_data = generator(noise)fake_output = discriminator(fake_data)g_loss = criterion(fake_output, torch.ones_like(fake_output))g_loss.backward()g_optimizer.step()if (epoch + 1) % 1000 == 0:print(f"Epoch [{epoch+1}/10000], Discriminator Loss: {d_loss.item():.4f}, Generator Loss: {g_loss.item():.4f}")
4. 生成结果与可视化

训练完成后,我使用生成器生成了一些新的样本,并将它们与真实样本进行了可视化对比。从结果可以看出,生成器生成的样本在分布上与真实样本较为接近,说明GAN模型在一定程度上成功地学习了数据的分布。

# 生成新样本
with torch.no_grad():noise = torch.randn(50, 10)generated_data_scaled = generator(noise)# 逆向转换回原始尺度
generated_data = scaler.inverse_transform(generated_data_scaled.numpy())
real_data_original_scale = scaler.inverse_transform(X_scaled)# 可视化对比
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
fig.suptitle('真实数据 vs. GAN生成数据 的特征分布对比', fontsize=16)
feature_names = iris.feature_namesfor i, ax in enumerate(axes.flatten()):ax.hist(real_data_original_scale[:, i], bins=10, density=True, alpha=0.6, label='Real Data')ax.hist(generated_data[:, i], bins=10, density=True, alpha=0.6, label='Generated Data')ax.set_title(feature_names[i])ax.legend()plt.tight_layout(rect=[0, 0.03, 1, 0.95])
plt.show()

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

相关文章:

  • 解锁数据宝藏:数据挖掘之数据预处理全解析
  • 【MySQL性能优化】DISTINCT和GROUP BY去重性能深度剖析
  • 基于存储过程的MySQL自动化DDL同步系统设计
  • 技术评测:三丰云免费服务器的真实能力边界
  • Vue 比较两个数组对象,页面展示差异数据值
  • GO 原子操作面试题及参考答案
  • 前端页面Javascript数组
  • 西门子PLC模块上的SF(系统故障)红灯故障分析
  • 前端工程结构设计指南:如何让模块解耦、易维护、可拓展
  • postgresql 函数调试
  • 接口测试需要注意的一些BUG
  • 多相机三维人脸扫描仪:超写实数字人模型制作“加速器”
  • chili3d笔记19 读取dxf
  • 阿里巴巴开源的 分布式事务解决方案Seata
  • iOS应用启动时间优化:通过多工具协作提升iOS App性能表现
  • 1532.在区间范围内统计奇数数目
  • Android 当apk是系统应用时,无法使用webView的解决方案
  • 京运通601908,一只值得长期跟踪操作的波段投资标的,两个指标即可做好
  • Cargo 与 Rust 项目
  • Spring Boot自动配置原理
  • 【智能安全帽新升级】搭载VTX316TTS语音合成芯片,让安全“听得见”!
  • 【国产AI服务器】全国产PCIE5.0交换板,替代博通89104/89144,支持海光、龙芯等平台
  • HTTP 请求方法与状态码
  • “地标界爱马仕”再拓疆域:世酒中菜联袂赤水金钗石斛定义中国GI
  • 力扣-169.多数元素
  • Kafka线上集群部署方案:从环境选型到资源规划思考
  • http2与websocket关系
  • Linux——linux的基本命令
  • lingma(阿里云Ai)结合idea使用
  • day43-硬件学习之ARM基础知识