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

Day53打卡 @浙大疏锦行

知识点回顾:

  1. 对抗生成网络的思想:关注损失从何而来
  2. 生成器、判别器
  3. nn.sequential容器:适合于按顺序运算的情况,简化前向传播写法
  4. leakyReLU介绍:避免relu的神经元失活现象
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
import warnings
warnings.filterwarnings("ignore")
# 设置中文字体支持
plt.rcParams["font.family"] = ["SimHei"]
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题# 检查GPU是否可用
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(f"使用设备: {device}")LATENT_DIM = 10     # 潜在空间的维度,这里根据任务复杂程度任选
EPOCHS = 10000      # 训练的回合数,一般需要比较长的时间
BATCH_SIZE = 32     # 每批次训练的样本数
LR = 0.0002         # 学习率
BETA1 = 0.5         # Adam优化器的参数# 检查是否有可用的GPU,否则使用CPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(f"Using device: {device}")# --- 2. 加载并预处理数据 ---iris = load_iris()
X = iris.data
y = iris.target# 只选择 'Setosa' (类别 0)
X_class0 = X[y == 0] # 一种简便写法# 数据缩放到 [-1, 1]
scaler = MinMaxScaler(feature_range=(-1, 1)) 
X_scaled = scaler.fit_transform(X_class0) # 转换为 PyTorch Tensor 并创建 DataLoader
# 注意需要将数据类型转为 float
real_data_tensor = torch.from_numpy(X_scaled).float() 
dataset = TensorDataset(real_data_tensor)
dataloader = DataLoader(dataset, batch_size=BATCH_SIZE, shuffle=True)print(f"成功加载并预处理数据。用于训练的样本数量: {len(X_scaled)}")
print(f"数据特征维度: {X_scaled.shape[1]}")
# --- 3. 构建模型 ---# (A) 生成器 (Generator)
class Generator(nn.Module):def __init__(self):super(Generator, self).__init__()self.model = nn.Sequential(nn.Linear(LATENT_DIM, 16),nn.ReLU(),nn.Linear(16, 32),nn.ReLU(),nn.Linear(32, 4),# 最后的维度只要和目标数据对齐即可nn.Tanh() # 输出范围是 [-1, 1])def forward(self, x):return self.model(x) # 因为没有像之前一样做定义x=某些东西,所以现在可以直接输出模型
# def forward(self, x):
#     x = self.encoder(x)
#     x = self.decoder(x)
#     return x
当网络结构不满足线性顺序执行时(如包含残差连接、多分支、条件判断等),必须手动编写forward()方法。例如:# def forward(self, x):
#     identity = x
#     out = self.conv1(x)
#     out = self.relu(out)
#     out = self.conv2(out)
#     out += identity  # 残差连接(无法用Sequential实现)
#     return self.relu(out)
# (B) 判别器 (Discriminator)
class Discriminator(nn.Module):def __init__(self):super(Discriminator, self).__init__()self.model = nn.Sequential(nn.Linear(4, 32),nn.LeakyReLU(0.2), # LeakyReLU 是 GAN 中的常用选择nn.Linear(32, 16),nn.LeakyReLU(0.2), # 负斜率参数为0.2nn.Linear(16, 1), # 这里最后输出1个神经元,所以用sigmoid激活函数nn.Sigmoid() # 输出 0 到 1 的概率)def forward(self, x):return self.model(x)

@浙大疏锦行

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

相关文章:

  • 淘宝天猫商品数据爬取方案:官方API与非官方接口对比
  • OpenLayers 图层控制
  • 《 第三章-招式初成》 C++修炼生涯笔记(基础篇)程序流程结构
  • 网络原理10 - HTTP完
  • 【Spreadsheet】香港规范结构设计电子表格库开发方案
  • postman Access denied for user‘root‘@‘XXXXXXXX(using password: YES)
  • Flotherm许可管理工具和软件
  • 【强化学习漫谈】4. 从统一视角看 LLM Post-Training
  • 透视黄金窗口:中国有机杂粮的高质量跃迁路径
  • 瑞萨RA-T系列芯片马达类工程TCM加速化设置
  • 爬虫系统异常监控并邮件通知源码
  • 202558读书笔记|《雨季不再来(轻经典)》——日子总有停住的一天,大地要再度绚丽光彩起来
  • 【Create my OS】2 开启中断
  • 魔方在线工具箱 —— 开启便捷高效的在线工具之旅
  • yolov8自训练模型作为预训练权重【增加新类别】新增类别的数据集与旧数据集合并重新训练模型
  • pycharm读取不同格式的数据集用于神经网络模型训练
  • keil下载安装
  • PDF处理控件Aspose.PDF教程: 在 Java 中编辑 PDF 页面大小
  • Mac电脑通过 IntelliJ IDEA 远程连接 MySQL 的详细教程
  • CANoe入门(2)-- 创建一个简单的Panel来改变TX的信号值
  • (2)SpringBoot 3 + Vue 3 前后端分离项目,集成 Flowable
  • 完整强化学习教程:基于4x4网格世界的智能体探索之旅(二)
  • 【深尚想】SM8102ABC 95%高效降压芯片!TWS/物联网专用,2A输出+1.5mm超小体积
  • 中级统计师-经济学基础知识-第二章 企业生产理论
  • Python装饰器详解和默认装饰器
  • 网络流量分析之Heavy hitters和heavy changers
  • Jmeter本身耗资源导致压测不上去解决方案
  • Java中extends与implements深度解析:继承与接口实现的本质区别
  • 【Docker基础】Docker核心概念:仓库(Registry)详解
  • Vue实现悬浮图片弹出大图预览弹窗,弹窗顶部与图片顶部平齐