深度学习pytorch代码各种常见头文件

1. from __future__ import print_function

  在开头加上from __future__ import print_function这句之后,即使在python2.X,使用print就得像python3.X那样加括号使用。python2.X中print不需要括号,而在python3.X中则需要。

# python2.7
print "Hello world"

# python3
print("Hello world")

  如果某个版本中出现了某个新的功能特性,而且这个特性和当前版本中使用的不兼容,也就是它在该版本中不是语言标准,那么我如果想要使用的话就需要从future模块导入。

  其他例子: 
    from __future__ import division , 
    from __future__ import absolute_import , 
    from __future__ import with_statement 。等等 
  加上这些,如果你的python版本是python2.X,你也得按照python3.X那样使用这些函数。

https://blog.csdn.net/xiaotao_1/article/details/79460365


2.python中os和os.path模块


其它函数:

os.path.isabs() 指定路径是否为绝对路径
os.path.isdir() 指定路径是否存在且为一个目录
os.path.isfile() 指定路径是否存在且为一个文件
os.path.islink() 指定路径是否存在且为一个符号链接
os.path.samefile() 两个路径名是否指向同一个文件
os.path.exists() 检验路径是否真实存在

文件处理:
os.listdir() 列出目录下的所有文件和文件夹,返回一个列表
os.mkdir(‘test’) 创建单个目录(如果目录已存在,会产生OSError错误)
os.makedirs(r’c:\python\test’) 创建多级目录
os.remove() 删除文件,如果文件不存在,或者没有权限,则会产生错误
os.rmdir() 删除目录(如果目录中有文件会产生OSError错误,删除非空目录使用shutil.rmtree(”))
os.removedirs() 删除多个目录
os.rename(old, new) 重命名
os.name 指示你正在使用的平台,Windows,它是’nt’,而对于Linux/Unix用户,它是’posix’
os.chdir() 改变工作目录
os.getenv() 与os.putenv() 设置和读取环境变量
os.exit() 退出当前进程

文件信息:
import os
import time
os.path.basename() #获取文件名
os.path.dirname() #获取路径名
os.path.getsize(file) #获取文件大小(字节为单位)
os.path.getatime(file) #获取最近访问时间1318921018.0 ( 浮点型秒数)
os.path.getctime(file) #获取文件创建时间
os.path.getmtime(file) #获取最近修改时间
time.gmtime(os.path.getmtime(file)) #以struct_time形式输出最近修改时间
os.path.abspath(file) #获取绝对路径’/Volumes/Leopard/Users/Caroline/Desktop/1.mp4′
os.path.normpath(file) #获取’/Volumes/Leopard/Users/Caroline/Desktop/1.mp4′

https://www.zhukun.net/archives/6096


3.Variable

pytorch中有两种变量类型,一个是Tensor,一个是Variable(0.4.0版本已经将 Variable 和 Tensor合并,统称为 Tensor)

  • Tensor: 就像ndarray一样,一维TensorVector,二维TensorMatrix,三维及以上称为Tensor
  • Variable:是Tensor的一个wrapper,不仅保存了值,而且保存了这个值的creator,需要BP的网络都是Variable参与运算

pytorch自动求导工具包在torch.autograd中,autograd是专门为了BP算法设计的,所以这autograd只对输出值为标量的有用,因为损失函数的输出是一个标量。如果y是一个向量,那么backward()函数就会失效。

from torch.autograd import Variable
x = torch.rand(5)
x = Variable(x,requires_grad = True)
y = x * 2
grads = torch.FloatTensor([1,2,3,4,5])
y.backward(grads)#如果y是scalar的话,那么直接y.backward(),然后通过x.grad方式,就可以得到var的梯度
x.grad           #如果y不是scalar,那么只能通过传参的方式给x指定梯度
Variable containing:
  2
  4
  6
  8
 10
[torch.FloatTensor of size 5]

我们之所以可以实现autograd多亏了Variable和Function这两种数据类型的功劳。要进行autograd必需先将tensor数据包成Variable。Varibale和tensor基本一致,所区别在于多了下面几个属性。

variable是tensor的外包装,variable类型变量的data属性存储着tensor数据,grad属性存储关于该变量的导数,creator是代表该变量的创造者。

variable和function它们是彼此不分开的,先上图:

数据向前传输和向后传输生成导数的过程示意图

如图,假设我们有一个输入变量input(数据类型为Variable)input是用户输入的,所以其创造者creator为null值,input经过第一个数据操作operation1(比如加减乘除运算)得到output1变量(数据类型仍为Variable),这个过程中会自动生成一个function1的变量(数据类型为Function的一个实例),而output1的创造者就是这个function1。随后,output1再经过一个数据操作生成output2,这个过程也会生成另外一个实例function2,output2的创造者creator为function2。

在这个向前传播的过程中,function1和function2记录了数据input的所有操作历史,当output2运行其backward函数时,会使得function2和function1自动反向计算input的导数值并存储在grad属性中。

creator为null的变量才能被返回导数,比如input,若把整个操作流看成是一张图(Graph),那么像input这种creator为null的被称之为图的叶子(graph leaf)。而creator非null的变量比如output1和output2,是不能被返回导数的,它们的grad均为0。所以只有叶子节点才能被autograd。

https://www.jianshu.com/p/cbce2dd60120



4.图像处理库PIL的基本模块

PIL有如下几个模块:image模块、ImageChops模块、ImageCrackCode模块、ImageDraw模块、ImageEnhance模块、ImageFile模块、ImageFileIO模块、ImageFilter模块、ImageFont模块、ImageGrab模块、ImageOps模块、ImagePath模块、ImageSequence模块、ImageStat模块、ImageTk模块、ImageWin模块、PSDraw模块。

1、  Image模块

Image模块提供了一个相同名称的类,即image类,用于表示PIL图像。这个模块还提供了一些函数,包括从文件中加载图像和创建新的图像。

Image模块是PIL中最重要的模块,它提供了诸多图像操作的功能,比如创建、打开、显示、保存图像等功能,合成、裁剪、滤波等功能,获取图像属性功能,如图像直方图、通道数等。

Image模块的使用如下:

>>>from PIL import Image

>>> im =Image.open('D:\\Code\\Python\\test\\img\\1.jpg')

>>>im.getbands()

('R', 'G', 'B')

>>>im.mode

'RGB'

>>> im.show()

2、  ImageChops模块包含一些算术图形操作,叫做channel operations(“chops”)。这些操作可用于诸多目的,比如图像特效,图像组合,算法绘图等等。通道操作只用于8位图像(比如“L”模式和“RGB”模式)。

4、  ImageDraw模块为image对象提供了基本的图形处理功能。例如,它可以创建新图像,注释或润饰已存在图像,为web应用实时产生各种图形。

5、ImageEnhance模块包括一些用于图像增强的类。它们分别为Color类、Brightness类、Contrast类和Sharpness类。

6. ImageFile模块为图像打开和保存功能提供了相关支持功能。另外,它提供了一个Parser类,这个类可以一块一块地对一张图像进行解码(例如,网络联接中接收一张图像)。这个类的接口与标准的sgmllibxmllib模块的接口一样。

7、  ImageFileIO模块用于从一个socket或者其他流设备中读取一张图像。不赞成使用这个模块。在新的code中将使用ImageFile模块的Parser类来代替它。

8、  ImageFilter模块包括各种滤波器的预定义集合,与Image类的filter方法一起使用。该模块包含这些图像增强的滤波器:BLURCONTOURDETAILEDGE_ENHANCEEDGE_ENHANCE_MOREEMBOSSFIND_EDGESSMOOTHSMOOTH_MORESHARPEN

https://blog.csdn.net/icamera0/article/details/50651926

5.Argparse 

在python 2.7 后,不推荐使用 optparse, 而推荐使用 argparse.

Argparse的作用就是为py文件封装好可以选择的参数,使他们更加灵活,丰富。

详细解释参考:https://www.cnblogs.com/lovemyspring/p/3214598.html

实例理解参考:https://blog.csdn.net/It_way/article/details/44815141

6.PyTorch中文文档

PyTorch是使用GPU和CPU优化的深度学习张量库。总链接:http://pytorch-cn.readthedocs.io/zh/latest/

关于张量:


torch.cuda

该包增加了对CUDA张量类型的支持,实现了与CPU张量相同的功能,但使用GPU进行计算。它是懒惰的初始化,所以你可以随时导入它,并使用is_available()来确定系统是否支持CUDA。https://blog.csdn.net/HowardWood/article/details/79508648

torchvision包 包含了目前流行的数据集,模型结构和常用的图片转换工具。


7.随机种子:

在训练开始时,参数的初始化是随机的,为了让每次的结果一致,我们需要设置随机种子。在main函数中加入如下语句:

opt.seed = random.randint(1, 10000)
print("Random Seed: ", opt.seed)
torch.manual_seed(args.seed)#为CPU设置随机种子
if cuda:
    torch.cuda.manual_seed(seed)#为当前GPU设置随机种子
    torch.cuda.manual_seed_all(seed)#为所有GPU设置随机种子

8. torch里面的小技巧:

① torch.backends.cudnn.benchmark = True  在程序刚开始加这条语句可以提升一点训练速度,没什么额外开销。

② 有时候可能是因为每次迭代都会引入点临时变量,会导致训练速度越来越慢,基本呈线性增长。开发人员还不清楚原因,但如果周期性的使用torch.cuda.empty_cache()的话就可以解决这个问题。这个命令是清除没用的临时变量的。


  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值