代码之家  ›  专栏  ›  技术社区  ›  sy0

Pytork的二进制输入

  •  -1
  • sy0  · 技术社区  · 8 年前

    我可以问一下,如何使pytorch中加载的数据在加载后变成二进制? 就像Tensorflow可以通过以下方式实现:

    train_data  = mnist.input_data.read_data_sets(data_directory, one_hot=True)
    

    pytorch如何实现 one_hot=True 效应

    我现在拥有的data_loader是:

    torch.set_default_tensor_type('torch.FloatTensor')
    train_loader = torch.utils.data.DataLoader(
            datasets.MNIST('data/', train=True, download=True,
                           transform=transforms.Compose([
                             # transforms.RandomHorizontalFlip(),
                               transforms.ToTensor()])),
            batch_size=batch_size, shuffle=False)
    

    我想将train_loader中的数据进行二值化。 现在我要做的是:加载数据后,

    for data,_ in train_loader:
        torch.round(data) 
        data = Variable(data)
    

    使用 torch.round() 作用这是正确的吗?

    1 回复  |  直到 8 年前
        1
  •  0
  •   Oliver    8 年前

    采用一种热编码思想进行分类。听起来你可能在尝试创建一个自动编码器。

    如果要创建自动编码器,则无需舍入,因为BCELoss可以处理0到1之间的值。注意:训练时最好不要使用乙状结肠,而是使用 BCELossWithLogits 因为它提供了数值稳定性。

    下面是一个示例 autoencoder 带MNIST

    相反,如果您试图进行分类,则不需要一个热向量,您只需输出等于类数的神经元数,即对于MNIST输出10个神经元,然后将其传递给 CrossEntropyLoss 以及具有相应预期类值的长传感器

    下面是一个示例 classification 关于MNIST