Как получить входной и выходной каналы в CNN? - PullRequest
0 голосов
/ 04 июля 2018

Я специально смотрю на архитектуру AlexNet, найденную здесь: https://github.com/pytorch/vision/blob/master/torchvision/models/alexnet.py

Я не совсем понимаю, как они получают входной и выходной каналы. Основываясь на моих чтениях в AlexNet, я не могу понять, откуда они получают outputchannels = 64 (как второй аргумент функции Conv2d). Даже если 256 разделен на 2 графических процессора, это должно дать 128 , а не 64 . Входной канал 3 изначально представляет цветовые каналы в соответствии с моим предположением. Однако другие входные и выходные каналы также не имеют смысла для меня.

Может кто-нибудь уточнить, что такое входной и выходной каналы?

класс AlexNet (nn.Module):

def __init__(self, num_classes=1000):
    super(AlexNet, self).__init__()
    self.features = nn.Sequential(
        nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2), #why 64?
        nn.ReLU(inplace=True),
        nn.MaxPool2d(kernel_size=3, stride=2),
        nn.Conv2d(64, 192, kernel_size=5, padding=2),
        nn.ReLU(inplace=True),
        nn.MaxPool2d(kernel_size=3, stride=2),
        nn.Conv2d(192, 384, kernel_size=3, padding=1),
        nn.ReLU(inplace=True),
        nn.Conv2d(384, 256, kernel_size=3, padding=1),
        nn.ReLU(inplace=True),
        nn.Conv2d(256, 256, kernel_size=3, padding=1),
        nn.ReLU(inplace=True),
        nn.MaxPool2d(kernel_size=3, stride=2),

) enter image description here

1 Ответ

0 голосов
/ 04 июля 2018

3 - это количество входных каналов (R, G, B). То, что 64 является количеством каналов (то есть карт характеристик ) на выходе первой операции свертки. Таким образом, первый конвальный слой принимает цветное (RGB) изображение в качестве входных данных, применяет ядро ​​11x11 с шагом 4 и выдает 64 карты объектов.

Я согласен, что это отличается от количества каналов (96, 48 в каждом GPU) на диаграмме архитектуры (оригинальной реализации AlexNet).

Однако PyTorch не реализует оригинальную архитектуру Alexnet. Скорее он реализует вариант реализации AlexNet, описанный в статье: One weird trick for parallelizing convolutional neural networks.

Кроме того, см. cs231n - сверточные сети для получения дополнительной информации о том, как ввод, фильтры, шаг и заполнение приравниваются к выводу после операции conv.


P.S .: См. pytorch/vision/issues/185

...