나는 몇몇 cnn을 가지고 있는데, 나는 상태 dict에서 어떤 키에 해당하는 중간 계층의 값을 가져오고 싶다. 어떻게이 작업을 수행 할 수 있습니까? 감사합니다. .PyTorch에서 상태 dict와 일치하는 레이어의 기능 값을 얻는 방법은 무엇입니까?
0
A
답변
1
주어진 모델에서 정방향 통과를 재정의하는 새 클래스를 만들어야한다고 생각합니다. 그러나 대부분의 경우 모델의 아키텍처와 관련된 코드를 만들어야합니다. 여기에 예제가 있습니다 :
class extract_layers():
def __init__(self, model, target_layer):
self.model = model
self.target_layer = target_layer
def __call__(self, x):
return self.forward(x)
def forward(self, x):
module = self.model._modules[self.target_layer]
# get output of the desired layer
features = module(x)
# get output of the whole model
x = self.model(x)
return x, features
model = models.vgg19(pretrained=True)
target_layer = 'features'
extractor = extract_layers(model, target_layer)
image = Variable(torch.randn(1, 3, 244, 244))
x, features = extractor(image)
이 경우, 나는 pytorch models zoo에 주어진 사전 정의 된 vgg19 네트워크를 사용하고 있습니다. 네트워크는 두 개의 모듈로 구성되며, 길쌈 부분은 features
이고 완전 연결 부분은 classifier
입니다. 이 경우, features
은 네트워크의 모든 길쌈 레이어를 래핑하기 때문에 직선적입니다. 당신이 연결 층의 출력을 바꿀 필요가 당신이 염두에 두어야한다, 또한
for name, module in self.model._modules.items():
x = module(x) # forward the module individually
if name in self.target_layer:
features = x # store the output of the desired layer
: 아키텍처가 서로 다른 이름을 가진 여러 레이어가있는 경우, 당신은이 비슷한을 사용하여 출력을 저장해야합니다 길쌈 부분에서 완전 연결 부분까지. 해당 레이어의 이름을 알고 있으면 쉽게 수행 할 수 있습니다.
[앞으로 _ 시도 _ – jdhao