【发布时间】:2021-04-17 18:38:08
【问题描述】:
我正在研究 VQA 模型,我需要一些帮助,因为我是新手。
我想在运行 train 之前使用 VGG19 网络的迁移学习,所以当我启动 train 时,我将拥有前面的图像特征(试图解决性能问题)。
可以这样做吗?如果是这样,有人可以用pytorch分享一个例子吗?
下面是相关代码:
class img_CNN(nn.Module):
def __init__(self, img_size):
super(img_CNN, self).__init__()
self.model = models.vgg19(pretrained=True)
self.in_features = self.model.classifier[-1].in_features
self.model.classifier = nn.Sequential(*list(self.model.classifier.children())[:-1]) # remove vgg19 last layer
self.fc = nn.Linear(in_features, img_size)
def forward(self, image):
#with torch.no_grad():
img_feature = self.model(image) # (batch, channel, height, width)
img_feature = self.fc(img_feature)
return img_feature
class vqamodel(nn.Module):
def __init__(self, output_dim,input_dim, emb_dim, hid_dim, n_layers, dropout, answer_len, que_size, img_size,model_vgg,in_features):
super(vqamodel,self).__init__()
self.image=img_CNN(img_size)
self.question=question_lstm(input_dim, emb_dim, hid_dim, n_layers, dropout,output_dim,que_size)
self.tanh=nn.Tanh()
self.relu=nn.ReLU()
self.dropout=nn.Dropout(dropout)
self.fc1=nn.Linear(que_size,answer_len) #the input to the linear network is equal to the combain vector
self.softmax=nn.Softmax(dim=1)
def forward(self, image, question):
image_emb=self.image(image)
question_emb=self.question(question)
combine =question_emb*image_emb
out_feature=self.fc1(combine)
out_feature=self.relu(out_feature)
return (out_feature)
如何取出 models.vgg19(pretrained=True),在图像数据加载器上训练之前运行它并将图像表示保存在 NumPy 数组中?
谢谢!
【问题讨论】:
标签: model pytorch transfer-learning vgg-net pre-trained-model