自动编码器对数据的特征/类别进行编码

问题描述 投票:0回答:1

我的问题是关于自动编码器的使用(在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()。我觉得也许我一开始可以做一些不同的事情,然后尝试以数字形式给出这些特征,但是我不确定应该怎么做。

python deep-learning pytorch categorical-data autoencoder
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.