pytorch 的二值化输入

binarize input for pytorch

请问如何让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()函数。这是正确的吗?

one-hot编码思想用于class化。听起来您可能正在尝试创建一个自动编码器。

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

这是一个 autoencoder 与 MNIST

的例子

如果您尝试做 classifcation,则不需要单热向量,您只需输出等于 classes 数量的神经元数量,即 MNIST输出 10 个神经元,然后将其与具有相应预期 class 值

的 LongTensor 一起传递给 CrossEntropyLoss

这是 MNIST

classification 的示例