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

【深度学习基础模型】Autoencoders (AE) 详细理解并附实现代码。

【深度学习基础模型】Auto-association by multilayer perceptrons and singular value decomposition

【深度学习基础模型】Auto-association by multilayer perceptrons and singular value decomposition


文章目录

  • 【深度学习基础模型】Auto-association by multilayer perceptrons and singular value decomposition
  • 1.Autoencoders (AE) 的原理和应用
    • 1.1 AE 原理
    • 1.2 AE 在遥感中的应用
  • 2.Python 代码实现 Autoencoder 在遥感图像处理中的应用
    • 2.1AE 模型的实现
    • 2.2代码解释
  • 3.总结


参考地址:https://www.asimovinstitute.org/neural-network-zoo/
论文地址:https://link.springer.com/article/10.1007/BF00332918#preview

欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!

1.Autoencoders (AE) 的原理和应用

1.1 AE 原理

Autoencoders (AE) 是一种特殊的神经网络架构,主要用于学习输入数据的压缩表示。其目标是通过对输入数据进行编码(压缩)和解码(重构)来学习一种有效的低维表示

AE 的基本结构可以概括为:

  • 编码器(Encoder):将高维输入数据转换为低维的隐含表示(latent representation),通常称为“瓶颈”或“代码”。
  • 解码器(Decoder):将低维表示重新解码成原始的高维数据。
  • 对称性:编码器和解码器一般是对称的,即网络的层数和神经元个数从输入到瓶颈再回到输出是对称的。
  • 损失函数:通常使用均方误差(MSE)作为损失函数,来衡量输入数据与重构数据之间的差异。

AE 的主要应用领域包括:

  • 数据降维:AE 可以有效地将高维数据压缩成低维表示,同时保留关键特征。
  • 去噪:DAE 的一种应用是在存在噪声的情况下,AE 通过学习数据的固有特征来还原原始数据。
  • 特征提取:AE 通过学习紧凑的表示,能从高维数据中提取有用的特征,常用于分类、聚类等任务。
  • 生成模型:变体如变分自编码器(VAE)被用于生成新数据。

在遥感领域,AE 可以应用于图像的降维、去噪、变化检测等任务。

1.2 AE 在遥感中的应用

在遥感图像处理中,AE 可以用来处理大量的高维遥感影像数据,通过降维、去噪等方式减少噪声影响,并提取出有效的特征。例如,可以将多光谱图像中的各波段进行压缩表示,同时保持信息的完整性,或在图像中进行变化检测

2.Python 代码实现 Autoencoder 在遥感图像处理中的应用

下面我们通过一个简化的 Python 实现,展示如何使用 AE 来对遥感图像进行降维和重构。

2.1AE 模型的实现

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset
import numpy as np
import matplotlib.pyplot as plt

# 定义 Autoencoder 模型
class Autoencoder(nn.Module):
    def __init__(self, input_size, hidden_size):
        super(Autoencoder, self).__init__()
        
        # 编码器
        self.encoder = nn.Sequential(
            nn.Linear(input_size, hidden_size),
            nn.ReLU()  # 激活函数
        )
        
        # 解码器
        self.decoder = nn.Sequential(
            nn.Linear(hidden_size, input_size),
            nn.Sigmoid()  # 将输出范围限定在 [0, 1]
        )
    
    def forward(self, x):
        encoded = self.encoder(x)
        decoded = self.decoder(encoded)
        return decoded

# 生成模拟遥感图像数据 (64 维特征,每个样本代表一个像元的光谱)
X = np.random.rand(1000, 64)  # 1000 个样本,每个样本有 64 维光谱特征
X = torch.tensor(X, dtype=torch.float32)

# 创建数据加载器
dataset = TensorDataset(X, X)  # 输入数据与输出数据相同
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)

# 定义模型、优化器和损失函数
input_size = 64
hidden_size = 32  # 压缩到 32 维
autoencoder = Autoencoder(input_size=input_size, hidden_size=hidden_size)
optimizer = optim.Adam(autoencoder.parameters(), lr=0.001)
criterion = nn.MSELoss()  # 损失函数为均方误差

# 训练 Autoencoder 模型
num_epochs = 50
for epoch in range(num_epochs):
    for data, target in dataloader:
        optimizer.zero_grad()
        output = autoencoder(data)
        loss = criterion(output, target)
        loss.backward()
        optimizer.step()
    
    if epoch % 10 == 0:
        print(f'Epoch {epoch}, Loss: {loss.item()}')

# 使用训练好的模型进行降维和重构
encoded_data = autoencoder.encoder(X).detach().numpy()
decoded_data = autoencoder.decoder(torch.tensor(encoded_data)).detach().numpy()

# 可视化原始数据和重构后的数据
plt.figure(figsize=(6, 3))
plt.subplot(1, 2, 1)
plt.title('Original')
plt.imshow(X.numpy()[:10], aspect='auto', cmap='hot')
plt.subplot(1, 2, 2)
plt.title('Reconstructed')
plt.imshow(decoded_data[:10], aspect='auto', cmap='hot')
plt.show()

2.2代码解释

1.模型定义:

class Autoencoder(nn.Module):
    def __init__(self, input_size, hidden_size):
        super(Autoencoder, self).__init__()
        
        # 编码器
        self.encoder = nn.Sequential(
            nn.Linear(input_size, hidden_size),
            nn.ReLU()  # 激活函数
        )
        
        # 解码器
        self.decoder = nn.Sequential(
            nn.Linear(hidden_size, input_size),
            nn.Sigmoid()  # 输出范围限定在 [0, 1]
        )
  • Autoencoder 包含编码器和解码器。编码器将输入数据压缩到较小的隐藏层表示(即 32 维),解码器则将其重新还原到原始维度(64 维)。

2.数据生成:

X = np.random.rand(1000, 64)  # 生成 1000 个样本,每个样本有 64 维光谱特征
X = torch.tensor(X, dtype=torch.float32)
  • 模拟生成了随机的遥感光谱数据。每个样本有 64 维,代表多光谱图像的像元。

3.数据加载器:

dataset = TensorDataset(X, X)  # 输入和输出都是 X
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)
  • 使用 DataLoader 创建批处理数据集,训练时会同时输入和输出相同的数据。

4.模型训练:

num_epochs = 50
for epoch in range(num_epochs):
    for data, target in dataloader:
        optimizer.zero_grad()
        output = autoencoder(data)
        loss = criterion(output, target)
        loss.backward()
        optimizer.step()
  • 使用 50 个 epoch 进行训练,输入带有噪声或误差的光谱数据,模型学习如何重构这些数据以接近原始输入。
  • 每个 epoch 都会计算输出和目标的损失,并进行反向传播更新权重。

5.编码和解码

encoded_data = autoencoder.encoder(X).detach().numpy()
decoded_data = autoencoder.decoder(torch.tensor(encoded_data)).detach().numpy()
  • 在训练完成后,利用编码器提取压缩后的低维表示,并使用解码器重构数据。

6.可视化

plt.subplot(1, 2, 1)
plt.title('Original')
plt.imshow(X.numpy()[:10], aspect='auto', cmap='hot')
plt.subplot(1, 2, 2)
plt.title('Reconstructed')
plt.imshow(decoded_data[:10], aspect='auto', cmap='hot')
  • 将原始数据与模型重构的数据进行对比,观察 AE 的降维和重构效果。

3.总结

Autoencoder 在遥感图像处理中的应用可以用于压缩高维数据、降噪以及提取特征。在遥感混合像元分解任务中,AE 可以帮助提取每个像元的光谱特征,进而提高解混分析的准确性。通过简单的 Python 实现,我们展示了如何用 AE 来重构和降维遥感数据。


http://www.kler.cn/news/321919.html

相关文章:

  • 大数据:快速入门Scala+Flink
  • Iceberg 基本操作和快速入门
  • 8.11 矢量图层线要素单一符号使用四(短划线)
  • Java语言的Springboot框架+云快充协议1.5+充电桩系统+新能源汽车充电桩系统源码
  • 安全帽检测系统丨OPENAIGC开发者大赛高校组AI创作力奖
  • 机器学习实战:使用Python和scikit-learn构建预测模型
  • [单master节点k8s部署]27.Istio流量管理(三)
  • ElementUI el-tree 树组件 增加辅助线
  • Docker与Kubernetes学习
  • 网络基础概念和 socket 编程
  • 前端——js基础
  • 三维扫描 | 解锁低成本、高效率的工作秘籍
  • WPF项目中使用Caliburn.Micro框架实现日志和主题切换
  • 论文解析_客户分组对商业银行个人信用评分模型的提升作用研究,作者张亚京-中国人民银行征信中心博士后工作站
  • 数据仓库适用的业务场景
  • 【高分系列卫星简介】
  • 系统架构设计师 SOA与微服务架构篇
  • Spark-RDD持久化
  • IDEA2020运行项目时不从配置的maven仓库找jar包,从C盘默认路径下找jar包
  • 使用 React useEffect 实现条件判断的最佳实践
  • c语言200例 64
  • 示例说明:sql语法学习
  • 9.sklearn-K-means算法
  • 人员个体检测、PID行人检测、行人检测算法样本
  • c++----继承(初阶)
  • 开源 AI 智能名片 S2B2C 商城小程序与营销工具的快速迭代
  • 其实你不懂老板的心——解释器模式
  • VUE.js笔记
  • 直接在tomcat下面访问jsp
  • 在虚幻引擎中实现Camera Shake 相机抖动/震屏效果