KAN代码训练阅读

发布于:2024-12-06 ⋅ 阅读:(108) ⋅ 点赞:(0)

改变网格参数       

if _ % 5 == 0 and _ < 50:
            model.update_grid_from_samples(x_i)

  • if _ % 5 == 0 and _ < 50: 这是一个条件判断语句,其中_通常是一个循环的迭代计数器(例如,for循环中的索引)。这个条件判断做了两件事:

    • _% 5 == 0:这个表达式检查迭代计数器_是否是5的倍数。如果是,这意味着代码块将在每5次迭代时执行一次。
    • and _ < 50:这个表达式确保只有在迭代计数器_小于50的情况下,代码块才会执行。结合起来,这个条件意味着代码块将在第0、5、10、15、…、45次迭代时执行,总共执行10次。
  • model.update_grid_from_samples(x_i):这一行代码调用了model对象(可能是一个深度学习模型)的update_grid_from_samples方法,并传递了一个参数x_i。这个方法调用的目的可能是根据样本数据x_i更新模型内部的某种网格表示。在深度学习解PDE的上下文中,这可能意味着在每次迭代时,模型都会利用新的样本数据来细化或调整用于近似PDE解的内部网格或参数。

简而言之,这段代码的作用是在深度学习模型训练的前50次迭代中,每隔5次迭代使用当前的样本数据更新模型的内部网格。这是深度学习求解PDE问题中的一个常见步骤,目的是让模型逐渐学习到PDE解的特征。

loss算了俩遍

toy

见注释(因为global)

def train():
    optimizer = LBFGS(model.parameters(), lr=1, history_size=10, line_search_fn="strong_wolfe", tolerance_grad=1e-32, tolerance_change=1e-32, tolerance_ys=1e-32)
#进度条
    pbar = tqdm(range(steps), desc='description', ncols=100)

    for _ in pbar:
        def closure():
            global loss_interior, loss_bc
            optimizer.zero_grad()
            
            #内部损失
            loss_interior=torch.mean((model(x_i) - target_fun(x_i))**2)
            
            #边界损失
            loss_bc=torch.mean((model(x_b) - target_fun(x_b))**2)

             #加权和 
            loss = alpha * loss_interior + loss_bc
            
            #反向传播
            loss.backward()
            return loss

        if _ % 5 == 0 and _ < 50:
            model.update_grid_from_samples(x_i)

            #STEP
        optimizer.step(closure)

        loss = alpha * loss_interior + loss_bc#loss没有global声明,另外俩有
        

        if _ % log == 0:
            pbar.set_description(" loss: %.2e " % (loss))

train()

 


网站公告

今日签到

点亮在社区的每一天
去签到