自动编码器重构输入一维信号并计算重构误差的pytorch代码
时间: 2023-12-19 13:07:56 浏览: 27
以下是一个简单的自动编码器重构输入一维信号并计算重构误差的 PyTorch 代码示例:
```python
import torch
import torch.nn as nn
import torch.optim as optim
# 定义自动编码器模型
class AutoEncoder(nn.Module):
def __init__(self, input_size, hidden_size):
super(AutoEncoder, self).__init__()
self.encoder = nn.Linear(input_size, hidden_size)
self.decoder = nn.Linear(hidden_size, input_size)
def forward(self, x):
x = self.encoder(x)
x = self.decoder(x)
return x
# 定义训练数据
input_data = torch.randn(100, 1)
# 定义模型参数
input_size = 1
hidden_size = 10
learning_rate = 0.001
num_epochs = 1000
# 初始化模型和优化器
model = AutoEncoder(input_size, hidden_size)
optimizer = optim.Adam(model.parameters(), lr=learning_rate)
criterion = nn.MSELoss()
# 训练模型
for epoch in range(num_epochs):
# 前向传播
output = model(input_data)
# 计算重构误差
loss = criterion(output, input_data)
# 反向传播和优化
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 打印训练信息
if epoch % 100 == 0:
print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))
# 测试模型
test_data = torch.tensor([[0.5], [0.2], [-0.1]])
with torch.no_grad():
output = model(test_data)
print('Input: {}\nOutput: {}'.format(test_data.numpy(), output.numpy()))
```
这个示例中,我们定义了一个简单的一维自动编码器模型,并使用均方误差作为损失函数进行训练。训练过程中,我们使用随机生成的输入数据,并输出每个 epoch 的重构误差。在训练结束后,我们测试模型时使用了一些输入数据,并输出了模型的重构输出。