Создание набора данных для ввода только изображений - PullRequest
1 голос
/ 03 июня 2019

Мне нужен объект набора данных, который содержит только изображения для обучения без учителя в среде 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

1 Ответ

0 голосов
/ 06 июня 2019

Если вы используете Classifier, набор данных необходимо вернуть в формате x0, x1, ... xk, y, где x0, x1, ... xk будет передано в predictor (в данном случае это класс AutoEncoder), и его выходное значение y_pred и фактическое y используется для расчета потерь, указанных в lossfun.

В вашем случае ответ y также совпадает с вводом. Я думаю, что вы можете написать следующее, чтобы вернуть x и y, которые на самом деле одинаковы:

def get_example(self, i):
    return self.Images[i], self.Images[i]
...