年也过了,也不能一直玩,该学习还是要学习。
过年前我算是把环境配置好,然后把项目跑起来了,现在的问题是我看不懂这个代码什么意思
代码还是要一行一行看,每一行都看懂了,全文自然就知道了
1
from pathlib import Path
import argparse
import yaml
import torch
import os
import random
import numpy as np
import torch.backends.cudnn as cudnn
这个就是导入一堆库,这里面就torch最麻烦,因为不但要配torch还要配cuda,而且通过命令是无法执行完成的。因为太大了,在下载的过程中会出现各种各样的问题,因此把torch下载到本地,然后再安装是唯一的办法。
2
from train import BasicTrain
from model.model import PLSNet
from dataloader import init_dataloader
这一部分导入的不是python的官方库,而是本地的.py文件。这里就是导入了train.py,model.py,dataloader.py文件
3
if __name__ == '__main__':
os.environ["CUDA_VISIBLE_DEVICES"] = "1"
parser = argparse.ArgumentParser()
parser.add_argument('--config_filename', default='setting/abide_PLSNet.yaml', type=str,
help='Configuration filename for training the model.')
parser.add_argument('--repeat_time', default=100, type=int)
args = parser.parse_args()
torch.cuda.set_device(0)
# 控制随机性
seed = 0
random.seed(seed)
np.random.seed(seed)
if torch.cuda.is_available():
torch.cuda.manual_seed_all(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
# cudnn.benchmark = False
cudnn.deterministic = True
for i in range(args.repeat_time):
main(args)
if name == ‘main’:这一句其实我觉得莫名其妙,不习惯,就当做路人npc算了。
os.environ[“CUDA_VISIBLE_DEVICES”] = "1"我查了一圈,原来这个是用来指定gpu的,可是我电脑上只有一个gpu啊
我在控制台界面输入nvidia-smi得到的结果就是我只有一个gpu,而且编号为0,那这一句应该改一下os.environ[“CUDA_VISIBLE_DEVICES”] = “0”
,也不知道我之前怎么运行成功的
parser = argparse.ArgumentParser()
parser.add_argument('--config_filename', default='setting/abide_PLSNet.yaml', type=str,
help='Configuration filename for training the model.')
parser.add_argument('--repeat_time', default=100, type=int)
args = parser.parse_args()
我这个项目的readme里面告诉我在控制台界面要执行命令
python main.py --config_filename setting/abide_RGTNet.yaml
为什么控制台能够识别–config_filename呢,就是因为parser是一个对象,argumentparser这个对象的一个实例。
add_argument是一个方法,添加了参数,比如此处就定义了–config_filename和–repeat_time这两个参数
我终于懂args到底是干嘛用的了,args.config_filename和args.repeat_time,就是用来访问这两个参数的。
4
torch.cuda.set_device(0)
# 控制随机性
seed = 0
random.seed(seed)
np.random.seed(seed)
if torch.cuda.is_available():
torch.cuda.manual_seed_all(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
# cudnn.benchmark = False
cudnn.deterministic = True
这一段是用到了torch方法。torch.cuda.set_device(0)这个是最简单的,就是选中gpu设备,我也没啥好选的,只有一个gtx960M
seed = 0
random.seed(seed)
np.random.seed(seed)
if torch.cuda.is_available():
torch.cuda.manual_seed_all(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
torch.cuda.manual_seed_all(seed)这几句话一个意思都是为了结果可以复现,如果不设定一个固定的seed,那么每次运行的结果都不一样,没有可参考性
cudnn.deterministic = True原来这个也是为了结果具有可重复性
5
for i in range(args.repeat_time):
main(args)
此处是重复执行100次main主函数
6yaml文件是配置文件
fold: 0
time_seires: /data/CodeGoat24/FBNETGEN/ABIDE_pcp/abide.npy
time_seires: /data/CodeGoat24/FBNETGEN_ho/ABIDE_pcp/abide.npy
time_seires: ./data/CodeGoat24/FBNETGEN_AAL/ABIDE_pcp/abide.npy
time_seires: /data/CodeGoat24/FBNETGEN_cc400/ABIDE_pcp/abide.npy
model:
type: PLSNet
extractor_type: attention
embedding_size: 8
window_size: 4
cnn_pool_size: 16
num_gru_layers: 4
dropout: 0.5
train:
lr: 1.0e-4
weight_decay: 1.0e-4
epochs: 500
pool_ratio: 0.7
optimizer: adam
stepsize: 200
group_loss: true
sparsity_loss: true
sparsity_loss_weight: 0.5e-4
log_folder: result
uniform or pearson
pure_gnn_graph: pearson
这个配置文件里的神经网络我看不懂了,我得去看个视频