데이터에 대한 효율적인 압축을 신경망을 통해 자동으로 학습하는 모델
일반적으로 입력 데이터 자체가 라벨로 사용 -> 비지도 학습에 속함
Input에서 들어와 신경망을 통해 잠재변수 code가 된다.
압축된 code는 다시 신경망을 통과해 output 된다.
class Autoencoder(mm.Module):
def __init__(self):
super(Autoencoder,self).__init__()
self.encoder = nn.Linear(28*28,20)
self.decoder = nn.Linear(20,28*28)
def forward(self,x):
x = x.view(batch_size,-1)
encoded = self.encoder(x)
out = self.decoder(encoder).view(batch_size,1,28,28)
return out
model = Autoencoder()
loss_func = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(),lr = learning_rate)
for i in range(num_epoch):
for j,[image,label] in enumerate(train_loader):
optimizer.zero_grad()
output = model.forward(image)
loss = loss_func(output,image)
loss.backward()
optimizer.step()
교재 : 파이토치 첫걸음