我的问题是关于自动编码器的使用(在PyTorch中)。我有一个具有10个不同类别的分类特征的表格数据集。这些类别的名称完全不同-有些名称由一个单词组成,有些则由两个或三个单词组成。但是总的来说,我有10个唯一的类别名称。我想做的是创建一个自动编码器,将这些类别的名称编码-例如,如果我有一个名为'Medium size class'
的类别,我想看看是否有可能训练自动编码器将该名称编码为某种东西例如'mdmsc'
或类似的东西。它的用途是找出难以编码的数据点或不典型的数据点或类似的东西。我尝试从各种在线教程中改编自动编码器体系结构,但是对我来说似乎没有任何用处,或者我根本不知道如何使用它们,因为它们全都与图像有关。也许有人对如果可能的话如何实现这种自动编码器有任何想法?
Edit:这是我到目前为止拥有的模型(我只是尝试适应一些我在网上找到的架构):
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()
。我觉得也许我一开始可以做一些不同的事情,然后尝试以数字形式给出这些特征,但是我不确定应该怎么做。
首先,您需要根据将在数据点上进行迭代的数据来设置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)