Вот простой пример. Я попытался разделить сеть (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
Я пытался разделить сеть на две части с помощью pytorch Children(), но это не сработало. ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Почему while(end > Begin) не сработало, а while(begin <= end) сработало? [закрыто]
Anonymous » » в форуме JAVA - 0 Ответы
- 118 Просмотры
-
Последнее сообщение Anonymous
-
-
-
PHP – разделить строку на две равные части, но во второй строке больше слов
Anonymous » » в форуме Php - 0 Ответы
- 50 Просмотры
-
Последнее сообщение Anonymous
-