html源码网站建设中,深圳电子商务平台设计,闵行网站制作哪里有,岱山建设局网站知识点回顾#xff1a; 对抗生成网络的思想#xff1a;关注损失从何而来生成器、判别器nn.sequential容器#xff1a;适合于按顺序运算的情况#xff0c;简化前向传播写法leakyReLU介绍#xff1a;避免relu的神经元失活现象 import torch
import torch.nn as nn
import to… 知识点回顾 对抗生成网络的思想关注损失从何而来生成器、判别器nn.sequential容器适合于按顺序运算的情况简化前向传播写法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(fUsing 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_sizeBATCH_SIZE, shuffleTrue)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) 浙大疏锦行