Pytorch提取模型特征向量保存至csv的例子


Posted in Python onJanuary 03, 2020

Pytorch提取模型特征向量

# -*- coding: utf-8 -*-
"""
dj
"""
import torch
import torch.nn as nn
import os
from torchvision import models, transforms
from torch.autograd import Variable 
import numpy as np
from PIL import Image 
import torchvision.models as models
import pretrainedmodels
import pandas as pd
class FCViewer(nn.Module):
 def forward(self, x):
  return x.view(x.size(0), -1)
class M(nn.Module):
 def __init__(self, backbone1, drop, pretrained=True):
  super(M,self).__init__()
  if pretrained:
   img_model = pretrainedmodels.__dict__[backbone1](num_classes=1000, pretrained='imagenet') 
  else:
   img_model = pretrainedmodels.__dict__[backbone1](num_classes=1000, pretrained=None)  
  self.img_encoder = list(img_model.children())[:-2]
  self.img_encoder.append(nn.AdaptiveAvgPool2d(1))
  self.img_encoder = nn.Sequential(*self.img_encoder)
  if drop > 0:
   self.img_fc = nn.Sequential(FCViewer())         
  else:
   self.img_fc = nn.Sequential(
    FCViewer())
 def forward(self, x_img):
  x_img = self.img_encoder(x_img)
  x_img = self.img_fc(x_img)
  return x_img 
model1=M('resnet18',0,pretrained=True)
features_dir = '/home/cc/Desktop/features' 
transform1 = transforms.Compose([
  transforms.Resize(256),
  transforms.CenterCrop(224),
  transforms.ToTensor()]) 
file_path='/home/cc/Desktop/picture'
names = os.listdir(file_path)
print(names)
for name in names:
 pic=file_path+'/'+name
 img = Image.open(pic)
 img1 = transform1(img)
 x = Variable(torch.unsqueeze(img1, dim=0).float(), requires_grad=False)
 y = model1(x)
 y = y.data.numpy()
 y = y.tolist()
 #print(y)
 test=pd.DataFrame(data=y)
 #print(test)
 test.to_csv("/home/cc/Desktop/features/3.csv",mode='a+',index=None,header=None)

jiazaixunlianhaodemoxing

import torch
import torch.nn.functional as F
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
import argparse
class ResidualBlock(nn.Module):
 def __init__(self, inchannel, outchannel, stride=1):
  super(ResidualBlock, self).__init__()
  self.left = nn.Sequential(
   nn.Conv2d(inchannel, outchannel, kernel_size=3, stride=stride, padding=1, bias=False),
   nn.BatchNorm2d(outchannel),
   nn.ReLU(inplace=True),
   nn.Conv2d(outchannel, outchannel, kernel_size=3, stride=1, padding=1, bias=False),
   nn.BatchNorm2d(outchannel)
  )
  self.shortcut = nn.Sequential()
  if stride != 1 or inchannel != outchannel:
   self.shortcut = nn.Sequential(
    nn.Conv2d(inchannel, outchannel, kernel_size=1, stride=stride, bias=False),
    nn.BatchNorm2d(outchannel)
   )

 def forward(self, x):
  out = self.left(x)
  out += self.shortcut(x)
  out = F.relu(out)
  return out

class ResNet(nn.Module):
 def __init__(self, ResidualBlock, num_classes=10):
  super(ResNet, self).__init__()
  self.inchannel = 64
  self.conv1 = nn.Sequential(
   nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1, bias=False),
   nn.BatchNorm2d(64),
   nn.ReLU(),
  )
  self.layer1 = self.make_layer(ResidualBlock, 64, 2, stride=1)
  self.layer2 = self.make_layer(ResidualBlock, 128, 2, stride=2)
  self.layer3 = self.make_layer(ResidualBlock, 256, 2, stride=2)
  self.layer4 = self.make_layer(ResidualBlock, 512, 2, stride=2)
  self.fc = nn.Linear(512, num_classes)

 def make_layer(self, block, channels, num_blocks, stride):
  strides = [stride] + [1] * (num_blocks - 1) #strides=[1,1]
  layers = []
  for stride in strides:
   layers.append(block(self.inchannel, channels, stride))
   self.inchannel = channels
  return nn.Sequential(*layers)

 def forward(self, x):
  out = self.conv1(x)
  out = self.layer1(out)
  out = self.layer2(out)
  out = self.layer3(out)
  out = self.layer4(out)
  out = F.avg_pool2d(out, 4)
  out = out.view(out.size(0), -1)
  out = self.fc(out)
  return out


def ResNet18():

 return ResNet(ResidualBlock)

import os
from torchvision import models, transforms
from torch.autograd import Variable 
import numpy as np
from PIL import Image 
import torchvision.models as models
import pretrainedmodels
import pandas as pd
class FCViewer(nn.Module):
 def forward(self, x):
  return x.view(x.size(0), -1)
class M(nn.Module):
 def __init__(self, backbone1, drop, pretrained=True):
  super(M,self).__init__()
  if pretrained:
   img_model = pretrainedmodels.__dict__[backbone1](num_classes=1000, pretrained='imagenet') 
  else:
   img_model = ResNet18()
   we='/home/cc/Desktop/dj/model1/incption--7'
   # 模型定义-ResNet
   #net = ResNet18().to(device)
   img_model.load_state_dict(torch.load(we))#diaoyong  
  self.img_encoder = list(img_model.children())[:-2]
  self.img_encoder.append(nn.AdaptiveAvgPool2d(1))
  self.img_encoder = nn.Sequential(*self.img_encoder)
  if drop > 0:
   self.img_fc = nn.Sequential(FCViewer())         
  else:
   self.img_fc = nn.Sequential(
    FCViewer())
 def forward(self, x_img):
  x_img = self.img_encoder(x_img)
  x_img = self.img_fc(x_img)
  return x_img 
model1=M('resnet18',0,pretrained=None)
features_dir = '/home/cc/Desktop/features' 
transform1 = transforms.Compose([
  transforms.Resize(56),
  transforms.CenterCrop(32),
  transforms.ToTensor()]) 
file_path='/home/cc/Desktop/picture'
names = os.listdir(file_path)
print(names)
for name in names:
 pic=file_path+'/'+name
 img = Image.open(pic)
 img1 = transform1(img)
 x = Variable(torch.unsqueeze(img1, dim=0).float(), requires_grad=False)
 y = model1(x)
 y = y.data.numpy()
 y = y.tolist()
 #print(y)
 test=pd.DataFrame(data=y)
 #print(test)
 test.to_csv("/home/cc/Desktop/features/3.csv",mode='a+',index=None,header=None)

以上这篇Pytorch提取模型特征向量保存至csv的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
总结python爬虫抓站的实用技巧
Aug 09 Python
Jupyter notebook远程访问服务器的方法
May 24 Python
numpy中矩阵合并的实例
Jun 15 Python
完美解决python中ndarray 默认用科学计数法显示的问题
Jul 14 Python
Python解析Excle文件中的数据方法
Oct 23 Python
将pandas.dataframe的数据写入到文件中的方法
Dec 07 Python
python 画3维轨迹图并进行比较的实例
Dec 06 Python
Django 路由层URLconf的实现
Dec 30 Python
Python urlencode和unquote函数使用实例解析
Mar 31 Python
Django 解决新建表删除后无法重新创建等问题
May 21 Python
pandas提升计算效率的一些方法汇总
May 30 Python
Python读取和写入Excel数据
Apr 20 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
Jan 03 #Python
python实现上传文件到linux指定目录的方法
Jan 03 #Python
pytorch::Dataloader中的迭代器和生成器应用详解
Jan 03 #Python
django商品分类及商品数据建模实例详解
Jan 03 #Python
PyTorch和Keras计算模型参数的例子
Jan 02 #Python
Pytorch中实现只导入部分模型参数的方式
Jan 02 #Python
PyTorch中topk函数的用法详解
Jan 02 #Python
You might like
用PHP实现Ftp用户的在线管理
2012/02/16 PHP
php使用curl抓取qq空间的访客信息示例
2014/02/28 PHP
通过curl模拟post和get方式提交的表单类
2014/04/23 PHP
判断脚本加载是否完成的方法
2009/05/26 Javascript
jQuery中ajax的使用与缓存问题的解决方法
2013/12/19 Javascript
从数组中随机取x条不重复数据的JS代码
2013/12/24 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
2014/11/23 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
浅谈express 中间件机制及实现原理
2017/08/31 Javascript
JS实现div模块的截图并下载功能
2017/10/17 Javascript
nodejs实现简单的gulp打包
2017/12/21 NodeJs
webpack4 CSS Tree Shaking的使用
2018/09/03 Javascript
微信小程序里引入SVG矢量图标的方法
2019/09/20 Javascript
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
[03:18]【TI9纪实】社区大触GL与木木
2019/08/25 DOTA
如何使用python爬取csdn博客访问量
2016/02/14 Python
Python进阶之尾递归的用法实例
2018/01/31 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
2018/04/28 Python
python3之模块psutil系统性能信息使用
2018/05/30 Python
Python之用户输入的实例
2018/06/22 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
Win10下python 2.7.13 安装配置方法图文教程
2018/09/18 Python
python实现感知器算法(批处理)
2019/01/18 Python
FFT快速傅里叶变换的python实现过程解析
2019/10/21 Python
如何基于Python获取图片的物理尺寸
2019/11/25 Python
python基于plotly实现画饼状图代码实例
2019/12/16 Python
pytorch中的自定义反向传播,求导实例
2020/01/06 Python
基于K.image_data_format() == 'channels_first' 的理解
2020/06/29 Python
通俗讲解python 装饰器
2020/09/07 Python
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
瑞典多品牌连锁店:Johnells
2021/01/13 全球购物
读《工匠精神》有感:热爱工作,精益求精
2019/12/28 职场文书
导游词之重庆渣滓洞
2020/01/08 职场文书
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS
微软PC Health Check电脑健康状况检查应用下载(Win11配置检测工具)
2021/06/26 数码科技