孤独症(5)

今天我猛然惊醒,寒假只剩下三天了,2月14号我就要去学校了,但是我的科研进展微乎其微,我瞬间感觉很丧气。但是我也算是经历诸多挫折了,我现在只问自己一个问题,我现在能做什么。
首先,2月11,2月12,2月13,起码这三天,我在吃晚饭前不玩游戏不玩手机不看小说,我可以运动,我可以看书,我可以做家务,我可以学习。
1

    train_dataset, val_dataset, test_dataset = torch.utils.data.random_split(
        dataset, [train_length, val_length, length-train_length-val_length])

我们看一下这里的代码dataset无非就是原来的data嘛,后面这一部分,length是1009,train_length就是10090.7=706,val_length就是10090.1=100,它还有一个test_data,就是1009-706-100=203,所以这段代码的终极奥义局势train_dataset有706个样本,val_dataset有100个样本,test_dataset有203个样本
2

train_dataloader = utils.DataLoader(
        train_dataset, batch_size=dataset_config["batch_size"], shuffle=True, drop_last=False)

这段代码的核心是dataloader,dataloader其实是为了批量处理数据而发明的,比如此处。batch_size是16,那么就是把train_dataset的706个样本每16个划分为一组,这样就划分了45组,这样批量训练可以加快训练速度。

    val_dataloader = utils.DataLoader(
        val_dataset, batch_size=dataset_config["batch_size"], shuffle=True, drop_last=False)

    test_dataloader = utils.DataLoader(
        test_dataset, batch_size=dataset_config["batch_size"], shuffle=True, drop_last=False)

这两段是同样的意思
3

    return (train_dataloader, val_dataloader, test_dataloader), node_size, node_feature_size, timeseries

这一段是最重要的,dataloader函数要返回什么?要返回的就是三个训练器,以及划分矩阵的维度,还有训练数据
4
dataloader这个函数看完了,现在我看看main.py主函数

        dataloaders, node_size, node_feature_size, timeseries_size = \
            init_dataloader(config['data'])

这个node_size是100,node_feature_size和timeseries_size各是111。
5

use_train = BasicTrain

我就奇怪,这个BasicTrain我没见过,原来是引入的train里的一个函数
6

        optimizer = torch.optim.Adam(
            model.parameters(), lr=config['train']['lr'],
            weight_decay=config['train']['weight_decay'])
        opts = (optimizer,)

这一段的目的是初始化优化器,这个lr和weight都是从abide_PLSNet.yaml里面读取的,都是adam算法要用到的。我虽然没学过这个adam算法,但是我询问gpt了解到这个算法是一种深度模型用到的优化算法。
7

        loss_name = 'loss'
        if config['train']["group_loss"]:
            loss_name = f"{loss_name}_group_loss"
        if config['train']["sparsity_loss"]:
            loss_name = f"{loss_name}_sparsity_loss"

我看懂这一段什么意思了
这个loss用单引号引起来代表它就是个字符串,之前没有定义过它。

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

再看一下我的abide_PLSNet.yaml这个配置文件,里面的group_loss和sparsity_loss都是true,那这个loss_name就不断增加。
loss_name_group_loss_sparsity_loss
8

        save_folder_name = Path(config['train']['log_folder'])/Path(config['model']['type'])/Path(
            # date_time +
            f"{config['data']['dataset']}_{config['data']['atlas']}")

也是奇了怪了,一个路径,直接写了不就行了,还要组合这了那了

result/PLSNet/ABIDE_else

9
就剩一个train函数了

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
os.environ["CUDA_VISIBLE_DEVICES"] = "0, 1"

你像我这台电脑,虽然很老了,但是好歹是个游戏本,有个gtx960M,所以device就会选择cuda,我电脑只有一个显卡,对应的标号是0,所以这个那个1没啥用

10

    def __init__(self, train_config, model, optimizers, dataloaders, log_folder) -> None:
        self.logger = Logger()
        self.model = model.to(device)
        self.train_dataloader, self.val_dataloader, self.test_dataloader = dataloaders
        self.epochs = train_config['epochs']
        self.optimizers = optimizers
        self.best_acc = 0
        self.best_model = None
        self.best_acc_val = 0
        self.best_auc_val = 0
        self.loss_fn = torch.nn.CrossEntropyLoss(reduction='mean')
        self.pool_ratio = train_config['pool_ratio']
        self.group_loss = train_config['group_loss']

        self.sparsity_loss = train_config['sparsity_loss']
        self.sparsity_loss_weight = train_config['sparsity_loss_weight']

        self.save_path = log_folder

        self.save_learnable_graph = True

        self.init_meters()

这个init初始化函数我一看就不对劲,因为我只往train函数里传了五个参数,为什么init函数却有6个参数吗,包括一个self,原来self是一个实例,通过self可以调动各种参数

        train_process = use_train(
            config['train'], model, opts, dataloaders, save_folder_name)

main函数的这一句往train里传了五个参数,分别是abide_PLSNet.yaml的train部分,model包括,abide_PLSNet.yaml的model部分,还有样本的100个维度,111个时间节点;opts是初始化器,大概是用来训练深度模型的;我刚才感觉有点奇怪,opts和dataloader有什么区别呢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值