【问题标题】:Build and Train an autoencoder in Pytorch for dimensionality reduction of vector inputs在 Pytorch 中构建和训练一个自动编码器,用于向量输入的降维
【发布时间】:2021-07-01 10:04:04
【问题描述】:

谁能帮我弄清楚如何构建一个 Pytorch 可以理解的数据集?我有一个化学成分数据集,其中每个向量都包含所有零,但对应原子位置的化合物中每个元素的分数丰度:

我的目标是尝试使用这些向量进行非线性降维。 所以,通过排除第一列,我基本上是在考虑 103 维向量。 唯一的问题是我不知道如何实际准备这种数据来训练自动编码器:从字面上看,我发现的所有教程都解释了如何将它们与图像一起使用(MNIST 手写数字数据集)。下面附上我准备的一个基本模型:

class Autoencoder(nn.Module):
def __init__(self, input_size, hidden_size):
    super().__init__()
    self.encoder = nn.Sequential(
    nn.Linear(input_size, hidden_size),
    nn.ReLU(),
    nn.Linear(hidden_size, 3)) #reduce the size
    
    self.decoder = nn.Sequential(
    nn.Linear(3, hidden_size),
    nn.ReLU(),
    nn.Linear(hidden_size, input_size),
    nn.ReLU()) #reduce the size

def forward(self, x):
    encoded = self.encoder(x)
    decoded = self.decoder(encoded)
    
    return decoded

我知道我应该准备一个所谓的DataLoader 来继续实例化一个训练循环,但实际上我不知道为数值做这件事。希望你有一些建议。

非常感谢,

詹姆斯

更新:

与此同时,我设法创建了一个像这样的 Pytorch 数据集类,它似乎可以工作:

class ChemicalFractions(Dataset):
    def __init__(self):
        #here I load the data
        data = pd.read_csv('path-to-my-data',)
        self.x = torch.from_numpy(data.values)
        self.n_samples= data.shape[0]
    
    def __getitem__(self,index):
        return self.x[index]
        
    def __len__(self):
        return self.n_samples

现在我仍然需要实例化 DataLoader..

【问题讨论】:

    标签: pytorch autoencoder


    【解决方案1】:

    实例化数据加载器非常简单:

    params = {'batch_size' : 8,
              'shuffle'    : True,
              'num_workers': 0,
              'drop_last'  : True
              }
    
    dataset = ChemicalFractions()
    train_dataloader = DataLoader(dataset, **params)
    

    您可以包含许多参数,详细信息here 但我包含的参数足以让您入门。

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 2019-10-18
      • 2020-01-23
      • 2020-08-30
      • 2021-01-29
      • 2021-05-10
      • 1970-01-01
      • 2019-08-14
      • 2019-10-01
      相关资源
      最近更新 更多