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

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

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

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

##读取数据import pandas as pdpd.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数组(矩阵)的操作

##载入模块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文件的构造:

: 是数组集合(文件)

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

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

python数组定义方法_python如何定义空数组_python定义空数组

##hdf5文件的创建import h5pyimport numpy as npA = np.random.randint(100, size=(4,4))B = np.random.randint(100, size=(5,3,3))# 创建hdf5文件f1 = h5py.File("data.hdf5", "w")##存储数据,创建datasetdset1 = f1.create_dataset("dataset1", (4,4), dtype='i', data=A)##组内添加datasetg1 = f1.create_group("group1")dset2 = g1.create_dataset("dataset2", (5,3,3), dtype='i', data=B)## 添加元数据dset1.attrs['scale'] = 0.01dset1.attrs['offset'] = 15##关闭文件f1.close()

#读取hdf5文件f2 = h5py.File('data.hdf5', 'r')## matrix Adset1 = f2['dataset1'][:]## matrix Bdset2 = f2['group1']['dataset2'][:]

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

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

##载入图像import cv2img = 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最大阈值##寻找ROIcontours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

6. PIL图像读取工具

##载入图像from PIL import Imageim = Image.open ("test.jpg")##数组转化pil_img= Image.fromarray(im)##PIL转numpynp_img= np.array(pil_img)

7. pyro概率模型编程工具

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

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

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

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

具体实例:

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

9. torch深度学习模型框架

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

##数据载入###载入深度学习需要重构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()

##模型###来源于torchvisionmodel = models.resnet18()###基于torch的nn.models进行构建import torch.nn as nnclass 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

##损失函数,优化函数criterion = torch.nn.MSELoss(reduction='sum')optimizer = torch.optim.SGD(model.parameters(), lr=1e-4)

##训练模型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() # 反向传播后参数更新

##保存模型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. 可视化工具,进行结果绘制的工具

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

import matplotlib.pyplot as pltdef 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)

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

欢迎大家互相学习交流!

加入IP合伙人(站长加盟) | 全面包装你的品牌,搭建一个全自动交付的网赚资源独立站 | 晴天实测8个月运营已稳定月入3W+
限时特惠:本站每日持续更新海量内部创业教程,一年会员只需98元,全站资源免费无限制下载点击查看会员权益

站长微信: qtw123cn

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注