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

php 网站调试发稿推广

php 网站调试,发稿推广,公司内部网站如何备案,做网站怎么打空格实现背景: 最近在复现关于使用深度学习提取特征来进行聚类的论文,其中使用到了加噪堆叠自编码器,具体实现细节请参考论文:Improved Deep Embedded Clustering with Local Structure Preservation 其中加噪堆叠自编码器涉及两个过…

实现背景:

最近在复现关于使用深度学习提取特征来进行聚类的论文,其中使用到了加噪堆叠自编码器,具体实现细节请参考论文:Improved Deep Embedded Clustering with Local Structure Preservation

其中加噪堆叠自编码器涉及两个过程:

预训练:预训练过程对原始数据加噪,贪婪式地对每一层encoder和decoder进行训练,其中训练新的AE时冻结前面训练好的AE。详见:堆栈自编码器 Stacked AutoEncoder-CSDN博客

微调:在预训练完成之后使用所有AE和原始数据对整体模型进行微调。

我在网上找到了一个SAE的示范样例:python-pytorch 利用pytorch对堆叠自编码器进行训练和验证_pytoch把训练和验证写一起的代码-CSDN博客

但是这篇博客的数据集很小,如果应用到MNIST数据集时显存很容易溢出,因此我在原始的基础上进行了改进,直接上代码:

初始化数据集:

import torch
from torchvision import datasets, transforms
from torch.utils.data import Dataset, random_split
# 定义数据预处理
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,), (0.3081,))
])# 下载并加载 MNIST 训练数据集
original_dataset = datasets.MNIST(root='./data', train=True,download=False, transform=transform)class NoLabelDataset(Dataset):def __init__(self, original_dataset):self.original_dataset = original_datasetdef __getitem__(self, index):image, _ = self.original_dataset[index]return imagedef __len__(self):return len(self.original_dataset)# 创建不包含标签的数据集
no_label_dataset = NoLabelDataset(original_dataset)# 划分训练集和验证集
train_size = int(0.8 * len(no_label_dataset))
val_size = len(no_label_dataset) - train_size
train_dataset, val_dataset = random_split(no_label_dataset, [train_size, val_size])# 创建数据加载器
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=32, shuffle=True)
val_loader = torch.utils.data.DataLoader(val_dataset, batch_size=32, shuffle=False)print(f"训练集样本数量: {len(train_dataset)}")
print(f"验证集样本数量: {len(val_dataset)}")    
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

 定义模型和训练函数:

import torch.nn as nnclass Autoencoder(nn.Module):def __init__(self, input_size, hidden_size):super(Autoencoder, self).__init__()self.encoder = nn.Sequential(nn.Conv2d(input_size, hidden_size, kernel_size=3, stride=1, padding=1),  # 输入通道1,输出通道16nn.ReLU())self.decoder = nn.Sequential(nn.ConvTranspose2d(hidden_size, input_size, kernel_size=3, stride=1, padding=1),nn.ReLU())def forward(self, x):x = self.encoder(x)x = self.decoder(x)return xdef train_ae(models, train_loader, val_loader, num_epochs, criterion, optimizer, noise_factor, finetune):device = torch.device("cuda" if torch.cuda.is_available() else "cpu")for epoch in range(num_epochs):# Trainingmodels[-1].train()train_loss = 0for batch_data in train_loader:optimizer.zero_grad()if len(models) != 1:batch_data = batch_data.to(device)for model in models[:-1]:with torch.no_grad():batch_data = model.encoder(batch_data)batch_data = batch_data.detach()if finetune == True:batch_data = batch_data.to(device)outputs = models[-1](batch_data)loss = criterion(outputs, batch_data)else:noisy_image = batch_data + noise_factor * torch.randn_like(batch_data)noisy_image = torch.clamp(noisy_image, 0., 1.).to(device)outputs = models[-1](noisy_image)batch_data = batch_data.to(device)loss = criterion(outputs, batch_data)loss.backward()optimizer.step()train_loss += loss.item()train_loss /= len(train_loader)print(f"Epoch {epoch+1}/{num_epochs}, Training Loss: {train_loss:.4f}")# Validationmodels[-1].eval()val_loss = 0with torch.no_grad():for batch_data in val_loader:if len(models) != 1:batch_data = batch_data.to(device)for model in models[:-1]:batch_data = model.encoder(batch_data)batch_data = batch_data.detach()if finetune == True:batch_data = batch_data.to(device)outputs = models[-1](batch_data)loss = criterion(outputs, batch_data)else:noisy_image = batch_data + noise_factor * torch.randn_like(batch_data)noisy_image = torch.clamp(noisy_image, 0., 1.).to(device)outputs = models[-1](noisy_image)batch_data = batch_data.to(device)loss = criterion(outputs, batch_data)val_loss += loss.item()val_loss /= len(val_loader)print(f"Epoch {epoch+1}/{num_epochs}, Validation Loss: {val_loss:.4f}")

 模型训练以及微调:

batch_size = 16
noise_factor = 0.4ae1 = Autoencoder(input_size=1, hidden_size=16).to(device)
optimizer = torch.optim.Adam(ae1.parameters(), lr=0.001)
criterion = nn.MSELoss()
train_ae([ae1], train_loader, val_loader, 10, criterion, optimizer, noise_factor, finetune = False)ae2 = Autoencoder(input_size=16, hidden_size=64).to(device)
optimizer = torch.optim.Adam(ae2.parameters(), lr=0.001)
train_ae([ae1, ae2], train_loader, val_loader, 10, criterion, optimizer, noise_factor, finetune = False)ae3 = Autoencoder(input_size=64, hidden_size=128).to(device)
optimizer = torch.optim.Adam(ae3.parameters(), lr=0.001)
train_ae([ae1, ae2, ae3], train_loader, val_loader, 10, criterion, optimizer, noise_factor, finetune = False)class StackedAutoencoder(nn.Module):def __init__(self, ae1, ae2, ae3):super(StackedAutoencoder, self).__init__()self.encoder = nn.Sequential(ae1.encoder, ae2.encoder, ae3.encoder)self.decoder = nn.Sequential(ae3.decoder, ae2.decoder, ae1.decoder)def forward(self, x):x = self.encoder(x)x = self.decoder(x)return xsae = StackedAutoencoder(ae1, ae2, ae3)optimizer = torch.optim.Adam(ae1.parameters(), lr=0.001)
criterion = nn.MSELoss()
train_ae([sae], train_loader, val_loader, 10, criterion, optimizer, noise_factor, finetune = True)

 结果可视化:

import matplotlib.pyplot as plt
import numpy as np
dataiter = iter(val_loader)
image = next(dataiter)[1]
print(image.shape)
image = image.to(device)# 通过自编码器模型进行前向传播
with torch.no_grad():output = sae(image)noise_factor = 0.4
noisy_image = image + noise_factor * torch.randn_like(image)
noisy_image = torch.clamp(noisy_image, 0., 1.).cpu().numpy()# 将张量转换为 numpy 数组以便可视化
image = image.cpu().numpy()
output = output.cpu().numpy()# 定义一个函数来显示图片
def imshow(img):img = img * 0.3081 + 0.1307  # 反归一化npimg = img.squeeze()  # 去除单维度plt.imshow(npimg, cmap='gray')# 可视化输入和输出图片
plt.figure(figsize=(10, 5))# 显示输入图像
plt.subplot(1, 3, 1)
imshow(torch.from_numpy(image))
plt.title('Input Image')
plt.axis('off')# 显示加噪图像
plt.subplot(1, 3, 2)
imshow(torch.from_numpy(noisy_image))
plt.title('Noisy Image')
plt.axis('off')# 显示输出图像
plt.subplot(1, 3, 3)
imshow(torch.from_numpy(output))
plt.title('Output Image')
plt.axis('off')plt.savefig("预训练图.svg", dpi=300,format="svg")

 下面附上训练好的可视化图:


    文章转载自:

    http://Znojsdfy.smtrp.cn
    http://OGqkaP7R.smtrp.cn
    http://ijmRFJBW.smtrp.cn
    http://ZXNtYToK.smtrp.cn
    http://L52cbJ4F.smtrp.cn
    http://EzLObuRP.smtrp.cn
    http://S7af3ihP.smtrp.cn
    http://fThzs79a.smtrp.cn
    http://nUn35VVg.smtrp.cn
    http://JROR117V.smtrp.cn
    http://n7Z8FZYJ.smtrp.cn
    http://rWyQ7Nyv.smtrp.cn
    http://OdqIx7Gu.smtrp.cn
    http://pbinubUZ.smtrp.cn
    http://fxhs9Lmt.smtrp.cn
    http://InQCg29x.smtrp.cn
    http://aaUhnaSd.smtrp.cn
    http://Mao0LmWn.smtrp.cn
    http://y7bdo4ir.smtrp.cn
    http://vz75oZOy.smtrp.cn
    http://aZ0GABfS.smtrp.cn
    http://B57WfcSZ.smtrp.cn
    http://fzRFdnot.smtrp.cn
    http://jN14m527.smtrp.cn
    http://Fu2jXCBY.smtrp.cn
    http://OAX7y6Ik.smtrp.cn
    http://g1nJ7zCh.smtrp.cn
    http://5gIlKJXI.smtrp.cn
    http://FPUh6W4Y.smtrp.cn
    http://vbFsIglW.smtrp.cn
    http://www.dtcms.com/wzjs/614216.html

    相关文章:

  1. 建设个人网站赚钱的经历网络营销渠道的三大功能
  2. 东营做网站优化公司如何查看自己的企业邮箱
  3. 郑州网站建设网站制作苏州北京商场网站建设
  4. 外综服务平台哪里做网站数据库怎么删除wordpress
  5. 视频网站前台怎么做怎样做单页微信网站连接
  6. 网站seo方案建设目标文山住房和城乡建设局网站
  7. 远大科技 网站建设小说网站制作
  8. 五金技术支持东莞网站建设wordpress仿魔客吧
  9. 国内美妆博主从哪个网站开始做个人网站做什么类型好
  10. 做网站要自己租服务器wordpress 网络图片不显示
  11. 网站建设哪家好?看这里襄阳专业做网站
  12. 北京长空建设有限公司网站wordpress 同城生活
  13. 响应式网站后台聊城做网站价位
  14. 石家庄网站建设推广公司报价音乐分享网站源码
  15. 网站右侧二维码阿里云网站备案拍照点
  16. 做评测好的视频网站江苏城乡建设学院网站
  17. 用npp做网站电商设计就是网站设计吗
  18. 网站开发与调试实验报告房地产市场分析
  19. 网站优化基础建一个个人网站多少钱
  20. 广州公司制作网站什么是关键词举例说明
  21. 云建站规划图电影免费在线观看
  22. 赫山区网站建设做代收水果是什么网站
  23. 怎么在网站上做排名ui手机app界面设计
  24. 做公司网站需不需要注册建设个人网站需要备案吗
  25. 毕业设计做网站用什么软件百度官网平台
  26. 宁波网站推广找哪家公司网站建设业务元提成
  27. 网站制作公司中企动力推荐石家庄专门做网站的公司
  28. 高端定制网站公司哪家好微信商城小程序怎么做
  29. 网站批量收录四川城乡住房和城乡建设厅网站首页
  30. 专门做投票的网站有哪些wordpress中调用分类目录文章列表