查看环境变量
文件逻辑
A
----a1.py
----a2.py
B
----b1.py
----b2.py
c1.py
我们执行python A/a1.py时,且想要调用c1。默认sys.path中包含的是’A/’,因此对于和py处出一个文件夹的文件可以直接进行import,对于c1,环境变量sys.path中是没有的,我们此时的工作目录(os.getcwd)是’/’,因此将当前工作目录路径加入到环境变量就可以正常调用c1了。即sys.path.append(’.’)。
import sys
print(sys.path)
print(os.path.abspath(os.path.join(os.getcwd(), '../')))
输出父级工作目录
print(os.path.abspath(os.path.join(os.getcwd(), '../')))
model.train() 和model.eval()
a) model.eval(),不启用 BatchNormalization 和 Dropout。此时pytorch会自动把BN和DropOut固定住,不会取平均,而是用训练好的值。不然的话,一旦test的batch_size过小,很容易就会因BN层导致模型performance损失较大;
b) model.train() :启用 BatchNormalization 和 Dropout。 在模型测试阶段使用model.train() 让model变成训练模式,此时 dropout和batch normalization的操作在训练q起到防止网络过拟合的问题。
因此,在使用PyTorch进行训练和测试时一定要记得把实例化的model指定train/eval。
pickle
在python中使用,python中几乎所有的数据类型(列表、字典,集合,类等)都可以用pickle来序列化。
# pickle.dump(obj, file, protocol) 序列化对象obj,将其写入到文件对象file中。
# 参数protocol是序列化模式,取值为1、2、3,分别代表文本的形式、二进制的形式。
# 将对象序列化到文件中:
f = open('tp.pkl', 'w')
pickle.dump(a, f, 0) #将a序列化到f中
f.close()
# 将对象从文件中加载:
f = open('to.pkl', 'r')
b = pickle.load(f) # 将对象从文件中加载出来,放到b上
f.close()
TensorboardX SummaryWriter
writer = tensorboardX.SummaryWriter('log')
writer.add_scalar('loss/train', accloss, epoch) # 参数分别为标量图像名称、图像y轴数据、图像x轴数据
writer.add_scalar('loss/valid', valloss, epoch)
# 添加多个标量到summary中,多个标量需要使用键值对的形式输入,最后会在同一张图上展示
writer.add_scalars()
# 代码结束后会在当前工作目录下自动生成一个runs目录。
linux du命令(disk usage)
查看当前目录以及下一级文件磁盘使用情况
du -h --max-depth=1
linux ls命令(list)
ls -sh filename
其中-s表示查看文件的size
-h表示以human readable的格式显示
tensor.detach()
用于切断网络一些分支的反向传播。
本文探讨了Python环境中如何通过调整sys.path来正确导入不同目录层级下的模块,并详细解析了PyTorch中model.train()与model.eval()的区别及应用场景。此外,还介绍了pickle模块的序列化操作及TensorBoardX的日志记录方法。
1796





