前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python深耕之图像深度学习必备工具包

Python深耕之图像深度学习必备工具包

作者头像
一粒沙
发布2022-11-21 21:48:34
5840
发布2022-11-21 21:48:34
举报
文章被收录于专栏:R语言交流中心R语言交流中心

因为研究方向的变动将本号更名为《R语言交流中心与Python深耕之路》,从R语言扩展到Python编程。今天给大家介绍下一个完整的深度学习模型的构建所需要的必备python模块。

1. os 工作目录,文件,shell的操作

代码语言:javascript
复制
##获得当前工作目录
os.getcwd()
##重置工作目录
os.fchdir()
##列出指定目录下的所有文件及子目录
os.listdir()
##删除指定文件test.py
os.remove(“test.py”)
##运行shell命令
os.system()
##分割路径和文件名
os.path.split(‘/data/hh,txt’)##(“/data”,”hh.txt”)
##分离文件名和扩展名
os.path.splitext()
##判断目录或文件返回TRUE或者FALSE
os.path.isfile()
os.path.isdir()
##为工作目录下文件拼接绝对路径
os.path.abspath()
##去除文件的绝对路径,返回文件名
os.path.basename()
##返回文件路径
os.path.dirname()
##获得文件的大小
os.path.getsize()
##链接目录和文件名
os.path.join(path,name)

2. pandas 读取数据表格并进行相关操作

代码语言:javascript
复制
##读取数据
import pandas as pd
pd.read_csv() 读取csv文件
pd.read_excel() 读取excel文件
##构建数据框
Data= pd.DataFrame({"id":[1001,1002,1003,1004,1005,1006], "city":['Beijing ', 'SH', ' guangzhou ', 'Shenzhen', 'shanghai', 'BEIJING '], "age":[23,44,54,32,34,32], },columns =['id','date','city' ,'age'])
##查看数据基本信息
Data.info()
##查看维度信息
Data.shape()
##查看某一列的数据类型
Data['id'].dtype
##提取数据
Data.iloc[:,1] #第二列所有行
##数据的导出
Data.to_excel('test.xlsx', sheet_name='test')
Data.to_csv('test.csv')

3. numpy数组(矩阵)的操作

代码语言:javascript
复制
##载入模块
import numpy as np
##创建空数组
numpy.empty(shape, dtype = float, order = 'C')
## 创建全0/1的数组
np.ones(shape, dtype)
np.zeros(shape, dtype)
##仿照数组a创建对应的全0/1数组
np.ones_like(a, dtype)
np.zeros_like(a, dtype)
##获得数组a的行列数
a.shape ##(行,列)
##数组的转置
a.transpose()
##整个数组的最大/小值
a.max()
a.min()
##整个数组求和,均值,标准差
a.sum()
a.mean()
a.std()

4. h5py深度学习数据源文件的构建

首先我们看下hdf5文件的构造:

dataset : 是数组集合(文件)

group:是数组集合所属的分组(文件夹)

hdf5文件的内部构造基本和文件夹和文件的关系差不多,进行相互参考。当然此文件在深度学习数据的载入也是非常高效的胜过npz,pickle等。基本框架如下图:

代码语言:javascript
复制
##hdf5文件的创建
import h5py
import numpy as np
A = np.random.randint(100, size=(4,4))
B = np.random.randint(100, size=(5,3,3))
# 创建hdf5文件
f1 = h5py.File("data.hdf5", "w")
##存储数据,创建dataset
dset1 = f1.create_dataset("dataset1", (4,4), dtype='i', data=A)
##组内添加dataset
g1 = f1.create_group("group1")
dset2 = g1.create_dataset("dataset2", (5,3,3), dtype='i', data=B)
## 添加元数据
dset1.attrs['scale'] = 0.01
dset1.attrs['offset'] = 15
##关闭文件
f1.close()
代码语言:javascript
复制
#读取hdf5文件
f2 = h5py.File('data.hdf5', 'r')
## matrix A
dset1 = f2['dataset1'][:]
## matrix B
dset2 = f2['group1']['dataset2'][:]

5. opencv主要是对图像进行分析操作

此工具主要对前期的图像数据进行预处理的工具,尤其是在进行病理WSI图像的处理时可以起到为图像的预处理节约大量的时间。其中重要的几个函数是:

代码语言:javascript
复制
##载入图像
import cv2
img = cv2.imread("test.jpg")
##图像色彩模式改变
gray=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
##二进制处理图,ret为阈值,binary为处理后图像
ret, binary = cv2.threshold(gray, 117, 255, cv2.THRESH_BINARY)#117开始阈值,255最大阈值
##寻找ROI
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

6. PIL图像读取工具

代码语言:javascript
复制
##载入图像
from PIL import Image
im = Image.open ("test.jpg")
##数组转化
pil_img= Image.fromarray(im)
##PIL转numpy
np_img= np.array(pil_img)

7. pyro概率模型编程工具

这个工具相当于比较高级概率函数重构库,当然本人目前没有这个算法修改的能力,如果是高水平的你也许用的到,请自行研究。

8. torchvision深度学习库,包含主流的深度学习框架

torchvision是pytorch的一个图形库,它服务于PyTorch深度学习框架的,主要用来构建计算机视觉模型,主要有以下几个重要的函数

代码语言:javascript
复制
torchvision.datasets #为方便实例化提供的样例数据集
torchvision.models #包含常用的模型框架
torchvision.transforms #进行图像增加的各种转换

具体实例:

代码语言:javascript
复制
##模型加载,使用 pretrained=True 可以加载一个别人预训练好的模型。
import torchvision.models as models
resnet18 = models.resnet18()
alexnet = models.alexnet(pretrained=True)
##图像增强
from torchvision import transforms as transforms
transform = transforms.Compose([
    transforms.Resize(96), # 缩放到 96 * 96 大小
    transforms.ToTensor(),
    transforms.Normalize((0.5), (0.5)) # 归一化
])

9. torch深度学习模型框架

相信这个工具大家应该是可以说只要接触深度学习必定会接触的框架之一。详细的教程应该也是铺天盖地。在这里大体说一下训练一个模型的必备内容:

代码语言:javascript
复制
##数据载入
###载入深度学习需要重构datalodar类
class LXRTDataLoader(torch.utils.data.Dataset):
    def __init__(self):
        with h5py.File("img.hdf5", 'r') as f:
              self.length = len(f['dataset'])   # to get the length, do not load
   
    def __len__(self):
        return self.length
    def open_hdf5(self):
        self.img_hdf5 = h5py.File('img.hdf5', 'r')
        self.dataset = self.img_hdf5['dataset'] # if you want dataset.
    def __getitem__(self, item: int):
        if not hasattr(self, 'img_hdf5'):
            self.open_hdf5()
        img0 = self.img_hdf5['dataset'][0] # Do loading here
        img1 = self.dataset[1]
        return img0, img1
    def close(self):
        self.img_hdf5.close()
代码语言:javascript
复制
##模型
###来源于torchvision
model = models.resnet18()
###基于torch的nn.models进行构建
import torch.nn as nn
class model(nn.Module):
    def __init__(self):
        super(Net,self).__init__()#实现父类的初始化
        self.conv1=nn.Conv2d(3,6,5)#定义卷积层组件
        self.pool1=nn.MaxPool2d(2,2)#定义池化层组件
        self.conv2=nn.Conv2dn(6,16,5)
        self.pool2=nn.MaxPool2d(2,2)
        self.fc1=nn.Linear(16*5*5,120)#定义线性连接
        self.fc2=nn.Linear(120,84)
        self.fc3=nn.Linear(84,10)
    def forward(self,x):#x模型的输入
        x=self.pool1(F.relu(self.conv1(x)))
        x=self.pool2(F.relu(self.conv2(x)))
        x=x.view(-1,16*5*5)#表示将x进行reshape,为后面做为全连接层的输入
        x=F.relu(self.fc1(x))
        x=F.relu(self.fc2(x))
        x=self.fc3(x)
    return x
代码语言:javascript
复制
##损失函数,优化函数
criterion = torch.nn.MSELoss(reduction='sum')
optimizer = torch.optim.SGD(model.parameters(), lr=1e-4)
代码语言:javascript
复制
##训练模型
train_ls, test_ls = [], []
for t in range(epoch):
    for step, (x, y) in enumerate(train_loader):
        # Forward pass: Compute predicted y by passing x to the model
        y_pred = model(x)
        # Compute and print loss
        loss = criterion(y_pred, y) # 计算损失函数
        # Zero gradients, perform a backward pass, and update the weights.
        optimizer.zero_grad() # 梯度置零,因为反向传播过程中梯度会累加上一次循环的梯度
        loss.backward() # loss反向传播
        optimizer.step() # 反向传播后参数更新
代码语言:javascript
复制
##保存模型
torch.save(model.state_dict(), 'model.pt')##参数字典
torch.save(model, 'model.pkl')##完整模型
#加载模型
model.load_state_dict(torch.load(' model.pt'))##参数字典
model.load = torch.load('model.pkl')##完整模型

10. matplotlib可视化工具,进行结果绘制的工具

此工具包作为可视化的工具,在这里不展开细讲了,提供一个可以可视化pytorch模型训练过程的实例:

代码语言:javascript
复制
import matplotlib.pyplot as plt
def plot_train(x, y, x_label, y_label, x2 =None, y2 =None, legend=None, figsize=(5, 3)):
##创建figure
    plt.xlabel(x_label)
    plt.ylabel(y_label)
    plt.semilogy(x, y)
    if x2 and y2:
        plt.semilogy(x2, y2, linestyle=':')
   
    if legend:
        plt.legend(legend)

当然,以上都是基础的完成流程,其中还涉及一些细节需要进行优化,改造,调参。这些在后续的时间中会一一进行更新,希望和大家一起努力进入人工智能领域。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-09-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言交流中心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档