Я мигрирую из фреймворков Keras / TF и у меня возникли небольшие проблемы с пониманием процесса обучения переносу в PyTorch.
Я хочу использовать каркас Pytorch-Lightning и хочу переключаться между разными нейронными сетями в одном скрипте .
По этому примеру мы можем переключаться между различными нейронными сетями в их реализации:
class BERT(pl.LightningModule):
def __init__(self, model_name, task):
self.task = task
if model_name == 'transformer':
self.net = Transformer()
elif model_name == 'my_cool_version':
self.net = MyCoolVersion()
Вопрос: как создать новую нейронную сеть что расширяет nn.Module и использует процесс обучения передачи?
Моя собственная реализация выглядит следующим образом: я использую сеть vgg16 и заменил слой классификатора только одним f c двумя выходными нейронами.
class VGGNetwork(nn.Module):
def __init__(self):
super(VGGNetwork, self).__init__()
# vgg16 is the default model here, we can use bn etc...
self.model = vgg16(pretrained=True)
# removing the last three layers of classifier only 2 ...
self.model.classifier = nn.Sequential(nn.Linear(512 * 7 * 7, 2))
def forward(self, x):
return self.model.forward(x)
Это правильный способ, как это сделать?