利用GPU进行训练:
1 将网络模型,数据(输入,标注),损失函数三个转移到cuda上,
2 .to(device)
device=torch.device('cuda' if torch.cuda.is_available() else 'cpu)
对于网络模型和loss无需另外赋值,只有数据需要另外赋值
#!/usr/bin/python3 和 #!/usr/bin/env python3 的作用:
- 其作用是"指定由哪个解释器来执行脚本",很多人在系统中同时安装了 Python2 和 Python3, 但是 2 和 3 是不兼容的, 所以执行脚本时必须指定解释器。在"非 Unix-like 系统"中,默认不支持 shebang, 比如 Windows 自带的 Power Shell 不支持 shebang;
#!/usr/bin/env/ python3
表示从 "PATH 环境变量"中查找 python3 解释器的位置, 路径没有被写死, 而是在"环境变量"中寻找 python3 解释器的安装路径, 再调用该路径下的解释器来执行脚本.- 大部分 Python 文件不必写 Shebang, 只有被直接执行的文件才有必要加入 Shebang
-
#!/usr/bin/env python #coding=utf-8
为什么要指定字符编码?
因为 Python 2 默认使用的是 ASCII 编码 (不支持中文), Python 3 默认使用 UTF-8 编码 (万国码, 支持中文).
所以 Python 2 中为了支持中文, 都会在开头加入
#coding=utf-8
这个声明. 而 Python 3 默认支持 UTF-8 编码, 所以 Python 3 并不需要#coding=utf-8
声明
成功改写了第一份代码,但是效果没有想象中好,也没有达到论文中的效果,现在在看第二份代码,这份代码的模型框架部分没有第一份代码友好,但是这份代码的架构,或者是代码风格是不一样的,我姑且理解为他做了一个主界面?,有一个main.py用于输入各种参数,这里定义了run_model,我感觉他写的有点乱?,希望这份代码也能尽快读完,还是很想发出论文的!
torch.nn.NLLLOSS:
torch.nn.NLLLOSS通常不被独立当作损失函数,而需要和softmax、log等运算组合当作损失函数。
torch.nn.CrossEntropyLoss相当于softmax + log + nllloss
https://blog.csdn.net/qq_22210253/article/details/85229988
deepcopy:
深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在。所以改变原有被复制对象不会对已经复制出来的新对象产生影响。
浅复制并不会产生一个独立的对象单独存在,他只是将原有的数据块打上一个新标签,所以当其中一个标签被改变的时候,数据块就会发生变化,另一个标签也会随之改变。这就和我们寻常意义上的复制有所不同了。
gc.collect:
垃圾回收
torch.cuda.empty_cache():
清空显存缓冲区
fire.Fire:
https://zhuanlan.zhihu.com/p/99629342
fire 可以根据任何 Python 对象自动生成命令行接口,使用Fire最简单的方法是在任何Python程序结束时调用fire.Fire()
。 这会将程序的全部内容暴露给命令行。
import fire
def hello(name="World"):
return 'Hello {name}!'.format(name=name)
if __name__ == '__main__':
fire.Fire(hello)
我感觉fire相当于print all,打印这一页所有的内容,在terminal中打印,并且可选打印的内容