我的问题是关于自动编码器的使用(在PyTorch中)。我有一个具有10个不同类别的分类特征的表格数据集。这些类别的名称完全不同-有些名称由一个单词组成,有些则由两个或三个单词组成。但是总的来说,我有10个唯一的类别名称。我想做的是创建一个自动编码器,对这些类别的名称进行编码-例如,如果我有一个名为'Medium size class'
的类别,我想看看是否可以训练自动编码器对该名称进行编码像'mdmsc'
之类的东西。它的用途是找出难以编码的数据点或不典型的数据点或类似的东西。我尝试从各种在线教程中改编自动编码器体系结构,但是对我来说似乎什么都没有用,或者我根本不知道如何使用它们,因为它们全都与图像有关。也许有人不知道这种自动编码器如何实现?
编辑:这是我到目前为止拥有的模型(我只是尝试适应一些我在网上找到的体系结构):
class Autoencoder(nn.Module):
def __init__(self, input_shape, encoding_dim):
super(Autoencoder, self).__init__()
self.encode = nn.Sequential(
nn.Linear(input_shape, 128),
nn.ReLU(True),
nn.Linear(128, 64),
nn.ReLU(True),
nn.Linear(64, encoding_dim),
)
self.decode = nn.Sequential(
nn.Linear(encoding_dim, 64),
nn.ReLU(True),
nn.Linear(64, 128),
nn.ReLU(True),
nn.Linear(128, input_shape)
)
def forward(self, x):
x = self.encode(x)
x = self.decode(x)
return x
model = Autoencoder(input_shape=10, encoding_dim=5)
我也用LabelEncoder()
然后用OneHotEncoder()
给出这些功能/类别,我提到了数字形式。但是,经过训练后,输出与输入相同(类别名称未更改),但是当我尝试仅使用编码器部分时,由于尺寸原因,我无法应用LabelEncoder()
,然后再应用OneHotEncoder()
问题。我觉得也许一开始我可以做些不同的事情,然后尝试以数字形式给出这些特征,但是我不确定应该怎么做。
答案 0 :(得分:0)
首先,您需要根据将要遍历数据点的数据来设置train_loader。
然后,您需要弄清楚将要使用哪种损失和优化程序:
# mean-squared error loss
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=.001) #learning rate depend on your task
准备好之后,您可以按照以下基本步骤训练自动编码器:
for epoch in range(epochs):
for features in train_loader:
optimizer.zero_grad()
outputs = model(batch_features)
train_loss = criterion(outputs, features)
train_loss.backward()
optimizer.step()
完成模型训练后,您可以使用以下方法检查嵌入:
embedding = model.encode(your_input)