Pytorch: Почему мои отклонения набора данных не дают правильный результат? - PullRequest
0 голосов
/ 26 сентября 2019

Вот функция, которую я написал:

def channel_var(image_dataset):
    res = image_dataset[0]
    for image in image_dataset[1:]:
        res += image
    return tuple(map(lambda x: x/len(image_dataset),
     (torch.var(res[0]),
      torch.var(res[1]),
      torch.var(res[2]))))

, затем я протестировал ее с нормальным распределением:

m = normal.Normal(0, 3)
m.sample((1, 3, 32, 32))

И я получил неправильный результат:

channel_var(list_test)

>>(tensor(0.0338), tensor(0.0352), tensor(0.0365))

Спасибо

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Ваша функция неверна.И это потому, что вы вычисляете среднее изображение, а затем вычисляете дисперсию канала в среднем изображении.Я не думаю, что ты этого хочешь.Вы можете просто найти дисперсию в каждом канале, используя

torch.var(img, dim=[0,2,3])

, предполагая, что dim=1 - это размер канала, а img - тензор резака.Если img не является тензором факела, вы можете объединить список imgs для создания тензора.

Вы можете сделать это как операция torch.var(torch.cat(img, dim=0), dim=[0,2,3]) cat, объединяющая список в тензор.

0 голосов
/ 27 сентября 2019

Я хочу рассчитать дисперсию всего моего набора данных для каждого канала.Каждый элемент является тензором факела.Ваш метод кажется хорошим для 1 изображения.Можете ли вы показать мне реализацию?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...