1

我需要一个仅包含用于 Chainer 框架中无监督学习的图像的数据集对象。我正在尝试为此目的使用 DatasetMixin。

图像是包含图像的列表。

class SimpleDataset(dataset.DatasetMixin):
    def __init__(self, Images):
        self.Images = Images
    def __len__(self):
        return len(self.Images)
    def get_example(self, i):
        return self.Images[i]

SimpleDataset 类似乎无法读取图像,因为在运行 trainer.run() 时出现错误:

call() missing 1 required positional argument: 'x'

在将图像列表放入 DatasetMixin 类之前,我是否需要进一步处理它?

使用 DatasetMixin 以这种方式只提供图像有什么问题吗?

我该怎么做才能将图像(没有任何标签或其他东西)提供给我的模型?

class AutoEncoder(chainer.Chain):
    def __init__(self, n_in, n_out):
        super(AutoEncoder, self).__init__(
            l1 = L.Linear(n_in, n_out),
            l2 = L.Linear(n_out, n_in)
    )
        self.add_param('decoder_bias', n_in)
        self.decoder_bias.data[...] = 0

    def __call__(self, x):
        h1 = F.dropout(self.l1(x))
        h2 = F.linear(h1, F.transpose(self.l1.W), self.decoder_bias)
        return F.sigmoid(h2)

    def encode(self, x):
        return F.dropout(self.l1(x))

    def decode(self, x):
        return self.l2(x)

model = L.Classifier(AutoEncoder(40000, 1000), lossfun=F.mean_squared_error)
model.compute_accuracy = False
4

1 回答 1

0

如果您使用Classifier,则数据集需要以将输入的格式返回(x0, x1, ... xk, y在本例中为类),其输出值和实际值用于 指定的损失计算。x0, x1, ... xkpredictorAutoEncodery_predylossfun

在您的情况下,答案y也与输入相同。我认为您可以编写以下内容以返回xy这实际上是相同的:

def get_example(self, i):
    return self.Images[i], self.Images[i]
于 2019-06-06T01:20:18.853 回答