【发布时间】:2020-10-01 07:42:26
【问题描述】:
我对 PyTorch 完全陌生(以前使用过张量流),但我被困在我正在做的事情上。我的任务是使用预训练模型从应用程序文档中提取特征,然后计算相似度分数以识别重复项。我已将所有 pdf 转换为 .jpg,并加载了预训练模型并修改了最后一层以提取特征。文件夹结构是这样的:
root
|- Application 1
| |- image 1
| |- image 2...
|- Application 2
| |- image 1
| |- image 2...
我要做的是从每个子目录中的图像中提取特征并计算它们之间的欧几里德距离并输出相似度矩阵。我遇到问题的地方,这可能看起来很基本,实际上是在加载数据后做出预测。以下是我到目前为止的代码,任何帮助将不胜感激。
def get_pretrained_model_notop(model_name): #pull the model and change last layer
pretrained_model = model_name(pretrained=True) #downloads pretrained model weights
for param in pretrained_model.parameters():
param.requires_grad = False #freezes layers
pretrained_model = nn.Sequential(*list(pretrained_model.children())[:-1]) #drops final layer, because we aren't classifying 1000 imagenet classes
pretrained_model.fc = nn.Sequential(
nn.Flatten() #adds flatten layer at end of model
)
if torch.cuda.is_available(): #uses GPU if available
pretrained_model = pretrained_model.cuda()
return pretrained_model
def get_similarity(pretrained_model,train_imgs): #function to extract features from the model and compute similarity scores
bottleneck_feature_example = pretrained_model(train_imgs)
similarity = euclidean_distances(bottleneck_feature_example)
similarity=similarity/similarity.max()
similarity_df = pd.DataFrame(similarity)
similarity_df=1-similarity_df
return np.round(similarity_df,4)
transforms = transforms.Compose([transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406],
[0.229, 0.224, 0.225])])
img_dir='path'
images = datasets.ImageFolder(img_dir,transform=transforms)
data_loader = torch.utils.data.DataLoader(images,
batch_size=32,
shuffle=True,
num_workers=4)
model_list=[models.densenet201]
model_name=['densenet201']
pretrained_model=[get_pretrained_model_notop(selected_model) for selected_model in model_list]
for data in data_loader:
pred=[get_similarity(pretrained,data) for pretrained in pretrained_model]
pred_label_ensemble=sum(pred) / len(pred)
pred_label_ensemble.columns=page_numbers
prob_output_folder = unzipped.replace('MF_loan_document', 'MF_loan_document_results')
pred_label_ensemble.to_csv(prob_output_folder+'/'+'results.csv',index=False)
【问题讨论】:
标签: pytorch classification conv-neural-network