pytorch实现自编码器
时间: 2023-07-12 15:52:29 浏览: 73
PyTorch是一种非常流行的深度学习框架,它提供了非常方便的方式来实现自编码器。下面是一个简单的自编码器的PyTorch实现示例:
```python
import torch
import torch.nn as nn
import torch.optim as optim
# 定义自编码器模型
class Autoencoder(nn.Module):
def __init__(self):
super(Autoencoder, self).__init__()
self.encoder = nn.Sequential(
nn.Linear(784, 128),
nn.ReLU(True),
nn.Linear(128, 64),
nn.ReLU(True),
nn.Linear(64, 12),
nn.ReLU(True),
nn.Linear(12, 2))
self.decoder = nn.Sequential(
nn.Linear(2, 12),
nn.ReLU(True),
nn.Linear(12, 64),
nn.ReLU(True),
nn.Linear(64, 128),
nn.ReLU(True),
nn.Linear(128, 784),
nn.Tanh())
def forward(self, x):
x = self.encoder(x)
x = self.decoder(x)
return x
# 加载数据集
train_loader = torch.utils.data.DataLoader(
torchvision.datasets.MNIST('./data', train=True, download=True,
transform=torchvision.transforms.ToTensor()),
batch_size=128, shuffle=True)
# 初始化模型和损失函数
model = Autoencoder()
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=1e-3, weight_decay=1e-5)
# 训练模型
for epoch in range(10):
for data in train_loader:
img, _ = data
img = img.view(img.size(0), -1)
optimizer.zero_grad()
output = model(img)
loss = criterion(output, img)
loss.backward()
optimizer.step()
print('epoch [{}/{}], loss:{:.4f}'
.format(epoch+1, 10, loss.data))
```
在这个例子中,我们定义了一个`Autoencoder`类,它包含一个编码器和一个解码器。我们使用MNIST数据集进行训练。在训练过程中,我们将MNIST图像展平为一维张量,并将其提供给模型进行训练。我们使用均方误差损失函数和Adam优化器进行训练。最终输出训练损失以及重构图像的结果。