实验中的代码写作至关重要,好的写作习惯有助于项目的推进,从而帮助实验者减少花费在实验上的时间。
命名
推荐使用时间戳命名法:时间戳+数据+具体细节。同时文件存储在所在日期到文件夹下方便进行管理。
# timestamp是日期为名的文件夹,id_是时间标识用于文件命名
import datetime
from datetime import timezone, timedelta
timestamp = datetime.datetime.now().astimezone(timezone(timedelta(hours=8))).strftime("%Y%m%d/")
id_ = datetime.datetime.now().astimezone(timezone(timedelta(hours=8))).strftime("%Y%m%d-%H%M%S")
# model_save
# pytorch
torch.save(model,'model'+id)
# tensorflow
model.save('model'+id_+'.h5')
# model_load
# pytorch
model = torch.load(model_path)
# tensorflow
model = tensorflow.keras.models.load_model(model_path)
项目结构
详见博客:代码写作套路【4】项目文件夹构建
参数
模型训练与测试所需要的参数众多。以模型测试实验的参数为例,模型测试实验中的参数包括,所选择的模型,测试数据,测试规模等等。使用常规的方法每次测试都要向测试代码中输入参数较为麻烦。使用argparse
包可以简化每次训练的过程。
# parse
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--test_query_size", help="number of query for test model", type=int, default=100)
parser.add_argument("--original_data", help="the csv file we play ce on",type=str, default='forest10.csv')
parser.add_argument("--model", help = 'the model you want to test')
args = parser.parse_args()
test_query_size = args.test_query_size
data = pd.read_csv(args.original_data)
model = tf.keras.models.load_model(args.model)
parse
展示了实验案例
pdb调试
pdb调试工具可以帮助我们快速解决bug。
# pdb
import pdb
'''your code'''
pdb.set_trace()
'''your code'''
在终端中运行python代码时,可以运行python -m pdb [your py]
可以得到相同的效果。
模型细节查看
这部分可以参考代码阅读套路【1】中的内容,先将模型加载出来(或是训练出来),然后调用下面语句,查看这个模型的可选属性有哪些。
print(model.__dict__) # 查看有哪些模型细节可以查看
for name, parameters in model.named_parameters(): # 查看模型参数
print(name, ':', parameters)
实验跑得很慢怎么办
有时候实验跑的太慢也会成为阻碍实验继续进行的一个因素,这时候可以考虑以下几个解决方案
- 从cpu换到gpu
- 从一个device到另一个device
- 不使用虚拟环境
实验结果下载
实验结果命名时要遵循统一命名规则,这样方便下载实验结果。
# 将所有名字中含有xbhat的文件移动到tmp
find -name "*xbhat*" | xargs -I file mv file tmp
空间预算与解决
在使用阿里云时时常发生服务器存储空间不够的情况,这个时候可以通过ln方法建立链接,将文件夹链接到临时空间中。
df -hl
可以发现/dev
,/dev/shm
拥有很大空间,可以用于存储实验结果,进行完实验后将结果立刻下载到本地(重启服务器后存在临时硬盘的内容会消失)。
ln -s [link_to_folder] tmp
运行上述代码,则可以在文件夹下新建立tmp文件夹,并将tmp链接至临时空间。