Как точно настроить только FC1 и FC2 в VGG-19 PyTorch ⇐ Python
Как точно настроить только FC1 и FC2 в VGG-19 PyTorch
Мне нужно точно настроить предварительно обученный VGG-19 с помощью pytorch. У меня есть следующие конкретные задачи:
[*]Точная настройка весов всех уровней сети VGG-19. [*]Точная настройка весов только двух последних полносвязных слоев (FC1 и FC2). в сети ВГГ-19. И это единственная информация, которую мне предоставили. Структура VGG-19 следующая:
VGG( (функции): Последовательный( (0): Conv2d(3, 64, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (1): ReLU(вместо=Истина) (2): Conv2d(64, 64, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (3): ReLU(вместо=Истина) (4): MaxPool2d (kernel_size=2, шаг=2, заполнение=0, расширение=1, ceil_mode=False) (5): Conv2d(64, 128, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (6): ReLU (вместо = Истина) (7): Conv2d(128, 128, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (8): ReLU(вместо=Истина) (9): MaxPool2d (kernel_size=2, шаг=2, заполнение=0, расширение=1, ceil_mode=False) (10): Conv2d(128, 256, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (11): ReLU(вместо=Истина) (12): Conv2d(256, 256, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (13): ReLU(вместо=Истина) (14): Conv2d(256, 256, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (15): ReLU(вместо=Истина) (16): Conv2d(256, 256, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (17): ReLU(вместо=Истина) (18): MaxPool2d (kernel_size=2, шаг=2, заполнение=0, расширение=1, ceil_mode=False) (19): Conv2d(256, 512, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (20): ReLU(вместо=Истина) (21): Conv2d(512, 512, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (22): ReLU(вместо=Истина) (23): Conv2d(512, 512, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (24): ReLU(вместо=Истина) (25): Conv2d(512, 512, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (26): ReLU(вместо=Истина) (27): MaxPool2d (kernel_size=2, шаг=2, заполнение=0, расширение=1, ceil_mode=False) (28): Conv2d(512, 512, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (29): ReLU(вместо=Истина) (30): Conv2d(512, 512, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (31): ReLU(вместо=Истина) (32): Conv2d(512, 512, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (33): ReLU(вместо=Истина) (34): Conv2d(512, 512, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (35): ReLU(вместо=Истина) (36): MaxPool2d (kernel_size=2, шаг=2, заполнение=0, расширение=1, ceil_mode=False) ) (avgpool): AdaptiveAvgPool2d(output_size=(7, 7)) (классификатор): Последовательный( (0): Линейный (in_features=25088, out_features=4096, смещение=True) (1): ReLU(вместо=Истина) (2): Отсев (p=0,5, на месте=False) (3): Линейный (in_features=4096, out_features=4096, смещение=True) (4): ReLU(вместо=Истина) (5): Отсев (p=0,5, на месте=False) (6): Линейный (in_features=4096, out_features=1000, смещение=True) ) ) Я попробовал выполнить первое задание вот так и считаю, что это правильно:
model = models.vgg19(pretrained=True) для параметра в model.parameters(): param.requires_grad = Истина model.classifier[6] = nn.Linear(4096, len(class_to_idx)) Но я не смог решить вторую задачу, я попробовал это и не уверен:
model2 = models.vgg19(pretrained=True) для параметра в model2.parameters(): param.requires_grad = Ложь # Установите для require_grad значение True для FC1 и FC2 для параметра в model2.classifier[0].parameters(): param.requires_grad = Истина для параметра в model2.classifier[3].parameters(): param.requires_grad = Истина # Измените последние полностью связанные слои на количество классов в вашем наборе данных. model2.classifier[6] = nn.Linear(4096, len(class_to_idx)) Как сделать вторую часть? Должен ли я сохранить model2.classifier[6] или определить новую последовательную структуру?
Мне нужно точно настроить предварительно обученный VGG-19 с помощью pytorch. У меня есть следующие конкретные задачи:
[*]Точная настройка весов всех уровней сети VGG-19. [*]Точная настройка весов только двух последних полносвязных слоев (FC1 и FC2). в сети ВГГ-19. И это единственная информация, которую мне предоставили. Структура VGG-19 следующая:
VGG( (функции): Последовательный( (0): Conv2d(3, 64, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (1): ReLU(вместо=Истина) (2): Conv2d(64, 64, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (3): ReLU(вместо=Истина) (4): MaxPool2d (kernel_size=2, шаг=2, заполнение=0, расширение=1, ceil_mode=False) (5): Conv2d(64, 128, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (6): ReLU (вместо = Истина) (7): Conv2d(128, 128, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (8): ReLU(вместо=Истина) (9): MaxPool2d (kernel_size=2, шаг=2, заполнение=0, расширение=1, ceil_mode=False) (10): Conv2d(128, 256, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (11): ReLU(вместо=Истина) (12): Conv2d(256, 256, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (13): ReLU(вместо=Истина) (14): Conv2d(256, 256, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (15): ReLU(вместо=Истина) (16): Conv2d(256, 256, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (17): ReLU(вместо=Истина) (18): MaxPool2d (kernel_size=2, шаг=2, заполнение=0, расширение=1, ceil_mode=False) (19): Conv2d(256, 512, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (20): ReLU(вместо=Истина) (21): Conv2d(512, 512, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (22): ReLU(вместо=Истина) (23): Conv2d(512, 512, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (24): ReLU(вместо=Истина) (25): Conv2d(512, 512, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (26): ReLU(вместо=Истина) (27): MaxPool2d (kernel_size=2, шаг=2, заполнение=0, расширение=1, ceil_mode=False) (28): Conv2d(512, 512, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (29): ReLU(вместо=Истина) (30): Conv2d(512, 512, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (31): ReLU(вместо=Истина) (32): Conv2d(512, 512, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (33): ReLU(вместо=Истина) (34): Conv2d(512, 512, kernel_size=(3, 3), шаг=(1, 1), заполнение=(1, 1)) (35): ReLU(вместо=Истина) (36): MaxPool2d (kernel_size=2, шаг=2, заполнение=0, расширение=1, ceil_mode=False) ) (avgpool): AdaptiveAvgPool2d(output_size=(7, 7)) (классификатор): Последовательный( (0): Линейный (in_features=25088, out_features=4096, смещение=True) (1): ReLU(вместо=Истина) (2): Отсев (p=0,5, на месте=False) (3): Линейный (in_features=4096, out_features=4096, смещение=True) (4): ReLU(вместо=Истина) (5): Отсев (p=0,5, на месте=False) (6): Линейный (in_features=4096, out_features=1000, смещение=True) ) ) Я попробовал выполнить первое задание вот так и считаю, что это правильно:
model = models.vgg19(pretrained=True) для параметра в model.parameters(): param.requires_grad = Истина model.classifier[6] = nn.Linear(4096, len(class_to_idx)) Но я не смог решить вторую задачу, я попробовал это и не уверен:
model2 = models.vgg19(pretrained=True) для параметра в model2.parameters(): param.requires_grad = Ложь # Установите для require_grad значение True для FC1 и FC2 для параметра в model2.classifier[0].parameters(): param.requires_grad = Истина для параметра в model2.classifier[3].parameters(): param.requires_grad = Истина # Измените последние полностью связанные слои на количество классов в вашем наборе данных. model2.classifier[6] = nn.Linear(4096, len(class_to_idx)) Как сделать вторую часть? Должен ли я сохранить model2.classifier[6] или определить новую последовательную структуру?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как интегрировать модель Vgg, созданную в Keras, в приложение C? У меня есть файл (.h5)
Anonymous » » в форуме Python - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-