深度学习Pytorch的细节使用+模型+数据转化+基本知识等

Introduction

学习使用了深度学习Pytorch差不多一年半多了,今天在这里呢,来总结一些不怎么使用的细节方面的代码知识点,为以后方便查找和使用。

1、Pytorch模型调用相关函数
保存模型:

#保存整个模型,model为你的神经网络
torch.save(model,'save.pt')#.pt 或.pth形式
#只保存训练好的权重:
torch.save(model.state_dict(), 'save.pt')

加载模型使用:

model=cnn() #cnn()这里表示为你定义的神经网络模型
model.eval() #这里表示为测试使用
#第一种:加载整个模型
(命名变量) = torch.load("save.pt")
#第二种:加载整个模型参数
model.load_state_dict(torch.load(param_file))  # load模型

若当你的模型或者你调用他人的模型为在gpu上训练的,但你想cpu上载入时:

model.load_state_dict(t.load(params_file, map_location='cpu'))

2.Pytorch模型测试与单一数据使用
当你需要单独地一个数据来测试时,你可以使用下面的代码:

img0 = Image.open(img0_tuple[0])
img0 = img0.convert("L")#图像转换黑白
img0 = transform(img0) #这里需要跟你训练数据中的transform一样
img0= Variable(img0.unsqueeze(0)) #添加维度(eg:3->4)
output1 = model(Variable(img0) #Vaariable可求导变量

在这里,我需要强调以下为什么要添加维度,首先我们要知道由于在训练时,我们喂给神经网络的数据格式时这样的:(batch_size,in_channel,height,width),因此呢,我们单一加载一个数据时,也需要满足四个维度。

3、训练结果数据可视化

#首先定义两组数组
loss_history= [] #用来保存训练过程中的loss值
Accuracy_history= [] #用来保存训练时的准确率值

epoch_number = 0

loss_history.append(loss_contrastive.item())
Accuracy_history.append((accuray.item())
epoch_number += 1
#这里保存的数据值为每一次epoch时保存一次.
#注意:当结束完训练时,跳出训练循环时
show_plot(epoch_number,loss_history,Accuracy_history)
#show_plot为自己定义的函数

其中show_plot函数定义如下:

def show_plot(iteration, loss,Accuracy_history):
    plt.plot(iteration, loss,color='red',abel="loss_history")
    plt.plot(iteration,Accuracy_history,abel="Accuracy_history")
    plt.ylabel('loss')
    plt.xlabel('Number of training')
    plt.show()

当然了,你要是想用上位机界面显示效果的话,可以采用PyQT,这里你可以参考我的另一篇博客

4、数据转换
numpy中的ndarray转化成pytorch中的tensor : torch.from_numpy()

pytorch中的tensor转化成numpy中的ndarray : numpy()
例如:

将Variable张量转化为numpy:
V_data = V_data.data.numpy()

import numpy as np
import torch

np_arr = np.array([1,2,3,4])
tensor_=torch.from_numpy(np_arr)
ten_numpy=tensor_.numpy()

这里需要注意的是,你定义的numpy数组或者tensor使用了Variable时,想要转换为tensor或者numpy时,例如:

#mydata为Variable(tensor)类型时,转换为numpy
mydata=mydata.data.numpy()

5、图像数据读取、类型与转换

5.1、cv2库:

import cv2
img=cv2.imread('xxx.jpg')#加载图片
cv2.imshow('src',img)#显示图片

#img。shape为获取图像numpy数据格式
#img.size为图像数据像素值个数
#img.dtype为numpy中数据类型

cv2读取图片为一个numpy矩阵,彩色图片维度是(高度,宽度,通道数),数据类型是uint8。若获取的为灰度图,读进来的灰度图的矩阵格式是(高度,宽度)。
cv2中图片矩阵变换:

img = img.transpose(2,0,1)
#若读取格式为(3,124,224,则上面的转换为(224,3,124)

5.2、PIL.Image.open

from PIL import Image
img = Image.open('xxx.jpg')
print(img.format) 
print(img.size) #注意,省略了通道 (w,h)
print(img.mode)  #L为灰度图,RGB为真彩色,RGBA为加了透明通道
img.show() # 显示图片

Image.open()读取图片返回的是一个对象(JPEG),特别的有些很有意思的执行语句:

import np
#复制图像
img = img.copy()
#灰度图像获取
gray = Image.open('xxx.jpg').convert('L')
#转化为矩阵形式
arr=np.array(img)
#矩阵再转为图像
new_im = Image.fromarray(arr)
#分离合并通道
r, g, b = img.split()
img = Image.merge("RGB", (b, g, r))

5.3、matplotlib.pyplot as plt

import matplotlib.pyplot as plt
import numpy as np
image = plt.imread('xxx.jpg')
plt.imshow(image)
plt.show()

值得注意的是plt.imread读入的也是一个矩阵,但跟cv2不一样的是,彩图读进的是RGB,格式为 (h,w,c),还有就是存储图像时,注意,必须在show之前savefig,否则存储的图片一片空白

6、异常处理
当我们编写代码的时候,或者编写网络时候出现可以忽略的异常IOError,但我们又不想结束程序,这时候我们可以捕捉它,做异常处理

try:
    #此处编写原来想要的程序代码块
except IOError:#(IOErro为一个异常,可以替换其他异常种类)
    print('fail to do something!')

7、常见的激活函数
无论是在学习也好,找工作笔试也好,这些都是最基本的问题,下面跟着我的思路来走。
(1)question one: 什么是激活函数
(2)question two: 为什么要用激活函数
(3)question three: 常见的三大类激活函数是什么

8、学习率的下降方式

9、减少过拟合的方法

有待补充。。。。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我们很容易掌握AI深度学习。让机器能够模仿人脑的思考方式,从而摆脱原来的固有数据库比较的限制。深度学习的发展课件:链接:https://pan.baidu.com/s/1Ck4GN9N0OCzQgH0MxZOqeQ 提取码:b74k随着机器学习, 深度学习的发展,很多人眼很难去直接量化的特征, 深度学习可以搞定, 这就是深度学习带给我们的优点和前所未有的吸引力。很多特征我们通过传统算法无法量化,或者说很难去做到的, 深度学习可以搞定。特别是在图像分类, 目标检测这些问题上取得了显著的提升。下图是近几年来深度学习在图像分类问题上取得的成绩。●   机器视觉缺陷检测的痛点●   仍存在下面主要的问题和难点 1) 受环境、光照、生产工艺和噪声等多重因素影响,检测系统的信噪比一般较低,微弱信号难以检出或不能与噪声有效区分。如何构建稳定、可靠、鲁棒的检测系统,以适应光照变化、噪声以及其他外界不良环境的干扰,是要解决的问题之一。 2) 由于检测对象多样、表面缺陷种类繁多、形态多样、复杂背景,对于众多缺陷类型产生的机理以及其外在表现形式之间的关系尚不明确,致使对缺陷的描述不充分,缺陷的特征提取有效性不高,缺陷目标分割困难;同时,很难找到“标准”图像作为参照,这给缺陷的检测和分类带来困难,造成识别率尚有待提高。 3) 机器视觉表面缺陷检测,特别是在线检测,其特点是数据量庞大、冗余信息多、特征空间维度高,同时考虑到真正的机器视觉面对的对象和问题的多样性,从海量数据中提取有限缺陷信息的算法能力不足,实时性不高。 4) 与机器视觉表面检测密切相关的人工智能理论虽然得到了很大的发展,但如何模拟人类大脑的信息处理功能去构建智能机器视觉系统还需要理论上的进一步研究,如何更好的基于生物视觉认识、指导机器视觉得检测也是研究人员的难点之一。 5) 从机器视觉表面检测的准确性方面来看,尽管一系列优秀的算法不断出现,但在实际应用中准确率仍然与满足实际应用的需求尚有一定差距,如何解决准确识别与模糊特征之间、实时性与准确性之间的矛盾仍然是目前的难点。 传统算法在某些特定的应用中已经取得了较好的效果,但仍然存在许多不足。例如:图像预处理步骤繁多且具有强烈的针对性,鲁棒性差;多种算法计算量惊人且无法精确的检测缺陷的大小和形状。而深度学习可以直接通过学习数据更新参数,避免了人工设计复杂的算法流程,并且有着极高的鲁棒性和精度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值