Я пытался разделить сеть на две части с помощью pytorch Children(), но это не сработало.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Я пытался разделить сеть на две части с помощью pytorch Children(), но это не сработало.

Сообщение Anonymous »

Вот простой пример. Я попытался разделить сеть (Resnet50) на две части: головную и хвостовую, используя дочерние элементы. Концептуально это должно работать, но это не так. Почему?
import torch
import torch.nn as nn
from torchvision.models import resnet50

head = nn.Sequential(*list(resnet.children())[:-2])
tail = nn.Sequential(*list(resnet.children())[-2:])
x = torch.zeros(1, 3, 160, 160)

resnet(x).shape # torch.Size([1, 1000])
head(x).shape # torch.Size([1, 2048, 5, 5])
tail(head(x)).shape # Error: RuntimeError: size mismatch, m1: [2048 x 1], m2: [2048 x 1000] at /pytorch/aten/src/TH/generic/THTensorMath.cpp:136

Для сведения, хвост — это не что иное, как
Sequential(
(0): AdaptiveAvgPool2d(output_size=(1, 1))
(1): Linear(in_features=2048, out_features=1000, bias=True)
)

Так что я действительно знаю, что смогу сделать это. Но тогда почему функция изменения формы (view) нет в детях?
pool =resnet._modules['avgpool']
fc = resnet._modules['fc']
fc(pool(head(x)).view(1, -1))


Подробнее здесь: https://stackoverflow.com/questions/656 ... -it-doesnt
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»