PyTorch 15.深度学习中常见的python操作

PyTorch 15.深度学习中常见的python操作

  • Pickle模块
  • Python调试器pdb
    • 单步执行模式
    • 单刀直入

Pickle模块

说明:Python中的pickle模块实现了基本的数据序列与反序列化,序列化对象可以在磁盘上保存对象,并在需要的时候读取出来。任何对象都可以执行序列化操作。

dump()方法

pickle.dump(obj, file, [,protocol])

参数定义
obj:序列化对象,将对象obj保存到文件file中去
file:file表示保存到的类文件对象,file必须有write()接口,file可以是一个以‘w’打开的文件,或者是一个StringIO对象,也可以是任何可以实现write()接口的对象
protocol:序列化模式,默认是0(ASCII协议,表示以文本的形式进行序列化),protocol的值还可以是1和2(1表示以老式的二进制协议,2表示新二进制协议)

import pickle

fw = open("pickleFileName.txt", 'wb')
pickle.dump("try", fw)

load()方法

pickle.load(file)

注释:反序列化对象,将文件中的数据解析为一个python对象。file中有read()接口和readline()接口

import pickle

fr = open("pickleFileName.txt", "rb")
result = pickle.load(fr)
print(result)

Python调试器pdb

pdb的两种用法

  1. 非侵入式方法
    无需修改源码,在命令行中可以直接进行调试
python3 -m pdb filename.py
  1. 侵入式方法
    需要在被调试的代码中添加一行代码
import pdb
pdb.set_trace()

单步执行模式

  1. 查看源代码
    命令:
l

说明:
查看当前位置前后11行源代码(多次会翻页)
当前位置在代码中会用–>符号标出
命令:

ll

说明:
查看当前函数或框架的所有源代码

  1. 添加断点
    命令:
b
b linenum
b filename:linenum
b functionname

linenum:表示断点添加到哪一行
filename:文件名,断点添加到哪个文件
functionname:函数名,在该函数执行的第一行设置断点
b:不带参数表示查看断点位置

  1. 添加临时断点
    命令:
tbreak
tbreak linenum
tbreak filename:linenum
tbreak functionname

说明:
执行一次后自动删除

  1. 清除断点
    命令:
cl
cl filename:linenum
cl bpnumber 

参数:
bpnumber 断点序号(多个以空格分隔)
说明:
不带参数用于清除所有断点(包括临时断点)
带参数则清除指定文件行或当前文件指定序号的断点

  1. 打印变量值
    命令:
p expression

参数:
expression Python表达式

  1. 逐行调试命令

命令1

s #执行下一行(能够进入函数体)

命令2

n # 执行下一行(不会进入函数体)

命令3:

r # 执行当前运行函数到结束
  1. 非逐行调试命令

命令1

c # 持续执行下去,制导遇到一个断点

命令2

unt linenum # 持续执行直到运行到指定行

命令3

j linenum # 直接跳转到指定行(注意,被跳过的代码不执行)
  1. 查看函数参数

命令:

a # 在函数中打印函数的参数和参数的值
  1. 打印变量类型

命令:
whatis expression
说明:
打印表达式的类型,常用来打印变量值

  1. 启动交互式解释器
interact # 启动一个python的交互式解释器,使用当前代码的全局命名空间
  1. 打印堆栈信息
w #打印堆栈信息,最新的帧在最底部,箭头表示当前帧

单刀直入

如果不想从程序开头执行pdb,那么可以在程序中import pdb之后,直接在代码里需要调试的地方放一个pdb.set_trace(),就可以设置一个断点,程序会在pdb.set_trace()暂停并进入pdb调试环境,可以用pdb变量名查看变量,或者c继续运行

你可能感兴趣的:(Pytorch复习,python,深度学习,pytorch)