当前位置: 首页 > 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()

相关文章:

  • c++ 虚析构函数
  • idea中push拒绝,merge,rebase的区别
  • 《汇编语言:基于X86处理器》第3章 汇编语言基础
  • 【笔记】解决部署国产AI Agent 开源项目 MiniMax-M1时 Hugging Face 模型下载缓存占满 C 盘问题:更改缓存位置全流程
  • 基于物联网的智能衣柜系统设计
  • 研英语作文万能模板
  • Maven 之工程化开发核心指南:插件配置、pom 文件与依赖管理
  • 掌握Bash脚本编写:从服务启动脚本到语法精要
  • Tomcat双击startup.bat闪退的解决方法
  • 【Python进阶系列】第9篇:聊聊 Python 中常用的第三方库
  • Nacos Server 界面
  • JetBrains IDE v2025.1 升级,AI 智能+语言支持齐飞
  • 解决 Conda 玑境激活问题:缺少 `bin/activate` 文件的应对方法
  • 以太坊节点搭建私链(POA)
  • 【Mini-F5265-OB开发板试用测评】3、MDS 可编程 IP 互联模块
  • WebServer实现:muduo库的主丛Reactor架构
  • 高并发秒杀系统实战(Redis+Lua分布式锁防超卖与库存扣减优化)
  • JVM对象内存分配机制全解析
  • PCB板高速飞拍检测系统 助力电子制造自动化领域
  • 如何导出和迁移离线 Conda 环境
  • 嘉兴企业做网站/seo就业指导
  • 自己网站联系电话修改怎么做/电商培训机构靠谱吗
  • 宜宾做网站/条友网
  • ps做网站标签/网络营销企业案例
  • 青岛北京网站建设/西安seo服务公司排名
  • 常用的软件下载网站/百度公司介绍