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

衡水网站制作与推广怎么申请建立个人免费网站

衡水网站制作与推广,怎么申请建立个人免费网站,云霄城乡建设局网站,wordpress 4.7.9对抗生成网络 知识点回顾: 对抗生成网络的思想:关注损失从何而来生成器、判别器nn.sequential容器:适合于按顺序运算的情况,简化前向传播写法leakyReLU介绍:避免relu的神经元失活现象 对抗生成网络(GAN&…

对抗生成网络

知识点回顾:

  1. 对抗生成网络的思想:关注损失从何而来
  2. 生成器、判别器
  3. nn.sequential容器:适合于按顺序运算的情况,简化前向传播写法
  4. leakyReLU介绍:避免relu的神经元失活现象

对抗生成网络(GAN)

知识点回顾
  1. 对抗生成网络的思想

    • 思想:就像在餐厅中,有一个厨师(生成器)负责制作假菜,一个评论家(判别器)负责区分真菜和假菜。厨师的目标是制作出评论家无法区分的假菜,而评论家的目标是找出假菜。通过不断的对抗训练,厨师的厨艺(生成器的生成能力)和评论家的鉴赏力(判别器的判别能力)都会不断提高。

    • 对抗生成网络(GAN)由两个模型组成:生成器和判别器。生成器的目标是生成尽可能真实的样本,而判别器的目标是区分真实样本和生成样本。两者通过对抗训练不断优化,最终达到纳什均衡。

    • 损失来源:GAN 的损失函数来自生成器和判别器之间的对抗。判别器的损失来自于它对真实样本和生成样本的误判,生成器的损失来自于它生成的样本被判别器识别为假样本。

  2. 生成器和判别器

    • 生成器:厨师,负责制作假菜,目标是让评论家无法区分真假菜。类似于一个“伪造者”,负责生成尽可能真实的样本。

    • 判别器:评论家,负责区分真菜和假菜,目标是找出所有的假菜。类似于一个“警察”,负责区分真实样本和生成样本。

  3. nn.Sequential 容器

    • 定义nn.Sequential 是一个顺序容器,用于按顺序堆叠多个神经网络层。这简化了前向传播的写法,适合于层与层之间按顺序运算的情况。

  4. LeakyReLU 介绍

    • 定义:就像是餐厅的菜谱,按顺序列出每个烹饪步骤,简化了厨师的烹饪流程。LeakyReLU 是 ReLU 的变种,允许一小部分梯度通过,避免神经元失活现象。类似于在烹饪过程中,允许某些食材保留一定的原始风味,避免某些食材完全失活,从而丰富菜品的层次感。

    • 公式LeakyReLU(x) = max(0.01 * x, x),其中 0.01 是负斜率。

作业
  1. 对于心脏病数据集,对于病人这个不平衡的样本用 GAN 来学习并生成病人样本,观察不用 GAN 和用 GAN 的 F1 分数差异

    • 步骤

      1. 数据准备:加载心脏病数据集,处理数据以适应 GAN 的输入要求。

      2. 定义生成器和判别器:使用 nn.Sequential 定义生成器和判别器。

      3. 训练 GAN:通过对抗训练生成器和判别器。

      4. 数据增强:使用生成器生成额外的病人样本,增加数据集的多样性。

      5. 模型训练:使用原始数据集和增强后的数据集分别训练分类模型,比较 F1 分数。

import pandas as pd
import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import f1_score
from sklearn.impute import SimpleImputer# 加载数据
df = pd.read_csv('heart.csv')# 特征和标签分离
X = df.drop('target', axis=1)
y = df['target']# 检查缺失值
print("原始数据集中缺失值情况:")
print(df.isnull().sum())# 使用SimpleImputer填补缺失值
imp = SimpleImputer(missing_values=np.nan, strategy='mean')
X_imputed = imp.fit_transform(X)# 将数据分为病人和健康人
X_patients = X_imputed[y == 1]
X_healthy = X_imputed[y == 0]# 特征标准化
scaler = StandardScaler()
X_patients = scaler.fit_transform(X_patients)
X_healthy = scaler.transform(X_healthy)# 将数据转换为PyTorch张量
X_patients_tensor = torch.tensor(X_patients, dtype=torch.float32)
X_healthy_tensor = torch.tensor(X_healthy, dtype=torch.float32)# 定义生成器
generator = nn.Sequential(nn.Linear(100, 128),nn.ReLU(),nn.Linear(128, 256),nn.ReLU(),nn.Linear(256, X_patients.shape[1]),nn.Tanh()
)# 定义判别器
discriminator = nn.Sequential(nn.Linear(X_patients.shape[1], 256),nn.LeakyReLU(0.2),nn.Linear(256, 128),nn.LeakyReLU(0.2),nn.Linear(128, 1),nn.Sigmoid()
)# 定义损失函数和优化器
criterion = nn.BCELoss()
lr = 0.0002
optimizer_g = optim.Adam(generator.parameters(), lr=lr)
optimizer_d = optim.Adam(discriminator.parameters(), lr=lr)# 训练 GAN
num_epochs = 1000
batch_size = 32for epoch in range(num_epochs):# 训练判别器# 真实样本real_data = X_patients_tensor[torch.randint(0, X_patients_tensor.shape[0], (batch_size,))]real_labels = torch.ones(batch_size, 1)d_real_loss = criterion(discriminator(real_data), real_labels)# 生成样本noise = torch.randn(batch_size, 100)fake_data = generator(noise)fake_labels = torch.zeros(batch_size, 1)d_fake_loss = criterion(discriminator(fake_data.detach()), fake_labels)# 总损失和优化d_loss = d_real_loss + d_fake_lossoptimizer_d.zero_grad()d_loss.backward()optimizer_d.step()# 训练生成器noise = torch.randn(batch_size, 100)fake_data = generator(noise)g_loss = criterion(discriminator(fake_data), real_labels)optimizer_g.zero_grad()g_loss.backward()optimizer_g.step()if epoch % 100 == 0:print(f'Epoch [{epoch}/{num_epochs}] | D Loss: {d_loss.item():.4f} | G Loss: {g_loss.item():.4f}')# 生成额外的病人样本
num_new_samples = 100
noise = torch.randn(num_new_samples, 100)
generated_samples = generator(noise).detach().numpy()# 反标准化生成的样本
generated_samples = scaler.inverse_transform(generated_samples)# 将生成的样本添加到原始数据集中
X_generated = pd.DataFrame(generated_samples, columns=df.columns[:-1])
y_generated = pd.Series([1] * num_new_samples, name='target')# 合并原始数据集和生成的数据集
X_augmented = pd.concat([df, X_generated])
y_augmented = pd.concat([y, y_generated])# 使用 SimpleImputer 填补增强数据集中的缺失值
X_augmented_imputed = imp.transform(X_augmented)# 使用原始数据集训练模型
X_train, X_test, y_train, y_test = train_test_split(X_imputed, y, test_size=0.2, random_state=42)
model = LogisticRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
f1_original = f1_score(y_test, y_pred)# 使用增强后的数据集训练模型
X_augmented_train, X_augmented_test, y_augmented_train, y_augmented_test = train_test_split(X_augmented_imputed, y_augmented, test_size=0.2, random_state=42)
model_augmented = LogisticRegression()
model_augmented.fit(X_augmented_train, y_augmented_train)
y_augmented_pred = model_augmented.predict(X_augmented_test)
f1_augmented = f1_score(y_augmented_test, y_augmented_pred)print(f'Original F1 Score: {f1_original:.4f}')
print(f'Augmented F1 Score: {f1_augmented:.4f}')

import pandas as pd
import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import f1_score
from sklearn.impute import SimpleImputer# 加载数据
df = pd.read_csv('heart.csv')# 特征和标签分离
X = df.drop('target', axis=1)
y = df['target']# 检查缺失值
print("原始数据集中缺失值情况:")
print(df.isnull().sum())# 使用 SimpleImputer 填补缺失值
imp = SimpleImputer(missing_values=np.nan, strategy='mean')
X_imputed = imp.fit_transform(X)# 将数据分为病人和健康人
X_patients = X_imputed[y == 1]
X_healthy = X_imputed[y == 0]# 特征标准化
scaler = StandardScaler()
X_patients = scaler.fit_transform(X_patients)
X_healthy = scaler.transform(X_healthy)# 将数据转换为 PyTorch 张量
X_patients_tensor = torch.tensor(X_patients, dtype=torch.float32)
X_healthy_tensor = torch.tensor(X_healthy, dtype=torch.float32)# 定义生成器
generator = nn.Sequential(nn.Linear(100, 128),nn.ReLU(),nn.Linear(128, 256),nn.ReLU(),nn.Linear(256, X_patients.shape[1]),nn.Tanh()
)# 定义判别器
discriminator = nn.Sequential(nn.Linear(X_patients.shape[1], 256),nn.LeakyReLU(0.2),nn.Linear(256, 128),nn.LeakyReLU(0.2),nn.Linear(128, 1),nn.Sigmoid()
)# 定义损失函数和优化器
criterion = nn.BCELoss()
lr = 0.0002
optimizer_g = optim.Adam(generator.parameters(), lr=lr)
optimizer_d = optim.Adam(discriminator.parameters(), lr=lr)# 训练 GAN
num_epochs = 1000
batch_size = 32for epoch in range(num_epochs):# 训练判别器# 真实样本real_data = X_patients_tensor[torch.randint(0, X_patients_tensor.shape[0], (batch_size,))]real_labels = torch.ones(batch_size, 1)d_real_loss = criterion(discriminator(real_data), real_labels)# 生成样本noise = torch.randn(batch_size, 100)fake_data = generator(noise)fake_labels = torch.zeros(batch_size, 1)d_fake_loss = criterion(discriminator(fake_data.detach()), fake_labels)# 总损失和优化d_loss = d_real_loss + d_fake_lossoptimizer_d.zero_grad()d_loss.backward()optimizer_d.step()# 训练生成器noise = torch.randn(batch_size, 100)fake_data = generator(noise)g_loss = criterion(discriminator(fake_data), real_labels)optimizer_g.zero_grad()g_loss.backward()optimizer_g.step()if epoch % 100 == 0:print(f'Epoch [{epoch}/{num_epochs}] | D Loss: {d_loss.item():.4f} | G Loss: {g_loss.item():.4f}')# 生成额外的病人样本
num_new_samples = 100
noise = torch.randn(num_new_samples, 100)
generated_samples = generator(noise).detach().numpy()# 反标准化生成的样本
generated_samples = scaler.inverse_transform(generated_samples)# 将生成的样本转换为 DataFrame
generated_df = pd.DataFrame(generated_samples, columns=X.columns)# 合并原始数据集和生成的数据集
augmented_df = pd.concat([df, generated_df])
augmented_df['target'] = pd.concat([y, pd.Series([1] * num_new_samples)])# 使用 SimpleImputer 填补增强数据集中的缺失值
augmented_imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
augmented_imputer.fit(X)  # 使用原始特征来拟合
X_augmented_imputed = augmented_imputer.transform(augmented_df.drop('target', axis=1))# 使用原始数据集训练模型
X_train, X_test, y_train, y_test = train_test_split(X_imputed, y, test_size=0.2, random_state=42)
model = LogisticRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
f1_original = f1_score(y_test, y_pred)# 使用增强后的数据集训练模型
X_augmented_train, X_augmented_test, y_augmented_train, y_augmented_test = train_test_split(X_augmented_imputed, augmented_df['target'], test_size=0.2, random_state=42)
model_augmented = LogisticRegression()
model_augmented.fit(X_augmented_train, y_augmented_train)
y_augmented_pred = model_augmented.predict(X_augmented_test)
f1_augmented = f1_score(y_augmented_test, y_augmented_pred)print(f'Original F1 Score: {f1_original:.4f}')
print(f'Augmented F1 Score: {f1_augmented:.4f}')

ps;如果你学有余力对于gan的损失函数的理解,建议去找找视频看看,如果只是用,没必要学

@浙大疏锦行

http://www.yayakq.cn/news/801843/

相关文章:

  • 做网站找谁好网站建设文化策划方案
  • 网站显示结算点点网 wordpress
  • 企业网站排版规则免费申请公司网站
  • 网站信息化建设总体情况自己做的网站怎样链接数据库
  • Windows怎么建设网站如何给wordpress上传较大视频
  • c2c电子商务网站定制开发学校介绍网站模板
  • 做网站用什么笔记本网站开发步骤规划
  • 长春做网站建设的公司肃宁哪里建网站
  • 网站建设论文的部首windows怎么做网站
  • 海口网站运营托管公司长春网站建设优化企业
  • 网站被管理员权限星沙做网站
  • 辽宁做网站和优化江西建设单位网站
  • 做商城网站热点新闻事件及评论
  • 学校网站开发需求退休领了100万企业年金
  • 旅游网站建设的功能定位合肥知名网站建设公司
  • 山东网络推广网站和生活app下载安装最新版
  • 网上做试卷的网站精准营销策略
  • 网站整体优化两学一做山东网站
  • 网站开发毕业任务书面料 做网站
  • 花都网站开发wordpress多语言设置
  • 网站推广流程是美词原创网站建设
  • 合肥新格建站网wordpress修改导航字体
  • 微信网站背景图片未来 网站开发 知乎
  • 行业数据网站dede模板用图片多的网站不行
  • 吉利网站建设北京网站建设公司分享网站改版注意事项
  • 中国交通建设监理协会官方网站站长工具亚洲
  • 网站的音乐链接怎么做成品网站前台源码
  • 可以用什么做网站登录页面wordpress修改上传附件大小
  • 网站开发设计总结及心得体会外包加工网可信吗
  • 网站建设商业网站设计方案定制