(以下相关图来自于jeremy)

# 什么是自编码器

## 欠完备自编码器

L(x,g(f(x)))

class AutoEncoder(nn.Module):
def __init__(self):
super(AutoEncoder, self).__init__()
# 自编码器的编码器构造
self.encoder = nn.Sequential(
nn.Linear(28*28, 128),              # 784 => 128
nn.LeakyReLU(0.1, inplace=True),    # 激活层
nn.Linear(128, 64),                 # 128 => 64
nn.LeakyReLU(0.1, inplace=True),
nn.Linear(64, 12),                  # 64 => 12
nn.LeakyReLU(0.1, inplace=True),
nn.Linear(12, 3),                   # 最后我们得到3维的特征，之后我们在3维坐标中进行展示
)
# 自编码器的解码器构造
self.decoder = nn.Sequential(
nn.Linear(3, 12),                   # 3 => 12
nn.LeakyReLU(0.1, inplace=True),
nn.Linear(12, 64),                  # 12 => 64
nn.LeakyReLU(0.1, inplace=True),
nn.Linear(64, 128),                 # 64 -> 128
nn.LeakyReLU(0.1, inplace=True),
nn.Linear(128, 28*28),              # 128 => 784
nn.Sigmoid(),                       # 压缩值的范围到0-1便于显示
)

def forward(self, x):
hidden = self.encoder(x)                # 编码操作，得到hidden隐含特征
output = self.decoder(hidden)           # 解码操作，通过隐含特征还原我们的原始图
return hidden, output

optimizer = torch.optim.Adam(autoencoder.parameters(), lr=configure['lr'])

## 稀疏自编码器

L(x,\hat x)+ \lambda\sum\limits_i|a_i^{(h)}|

L(x,\hat x)+\sum\limits_{j}KL(\rho||\hat \rho_j)

# weight_decay为权重衰减系数,我们这里设置为1e-4
# 但这里的惩罚函数为L2
optimizer = torch.optim.Adam(autoencoder.parameters(), lr=configure['lr'], weight_decay=1e-4)

class AutoEncoder(nn.Module):
def __init__(self):
super(AutoEncoder, self).__init__()

self.encoder = nn.Sequential(
nn.Linear(28*28, 28*28),        # 现在所有隐含层的维数是一样的，没有缩小也没有放大
nn.LeakyReLU(0.1, inplace=True),
nn.Linear(28*28, 28*28),
nn.LeakyReLU(0.1, inplace=True),
nn.Linear(28*28, 28*28),
)
self.decoder = nn.Sequential(
nn.Linear(28*28, 28*28),
nn.LeakyReLU(0.1, inplace=True),
nn.Linear(28*28, 28*28),
nn.LeakyReLU(0.1, inplace=True),
nn.Linear(28*28, 28*28),
nn.Sigmoid(),
)

def forward(self, x):
hidden = self.encoder(x)
output = self.decoder(hidden)
return hidden, output

61 篇文章37 人订阅

0 条评论

## 相关文章

4966

6015

4594

1.1K6

### 干货|机器学习：Python实现聚类算法之K-Means

1.简介 K-means算法是最为经典的基于划分的聚类方法，是十大经典数据挖掘算法之一。 K-means算法的基本思想是：以空间中k个点为中心进行聚类，对最...

6196

1939

7864

2068

### 跟我一起数据挖掘（23）——C4.5

C4.5简介 C4.5是一系列用在机器学习和数据挖掘的分类问题中的算法。它的目标是监督学习：给定一个数据集，其中的每一个元组都能用一组属性值来描述，每一个元组属...

3609

1361