[笔记] THUML部分代码校订笔记

  清华大学软件学院机器学习团队在GitHub上公开了其研究成果代码, 其代码完成度极高, 为后续学习提供了宝贵的参考资料. 该代码提供了一系列运行程序, 但在本地运行时出现了一些问题. 本文对目前出现的问题及解决方法进行记录. (声明: 并未使用sh脚本文件)

1. exp包

  exp包是用于实验运行的程序包, 其主要程序为exp_main, 其中包括验证、训练和测试函数. 在本地运行时出现以下问题, 并提供解决方案.

  1. 显存爆炸问题
  在执行训练程序时, 最近时常发生爆显存的问题. 在单个 epoch 中, 积累了几次批操作就会爆显存. 解决方法是, 在每次批操作结束后, 加入以下代码清除内存碎片:

torch.cuda.empty_cache()

此外, 可以通过以下代码查询剩余显存:

import torch

# 获取当前设备上的 GPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# 获取已经分配但未使用的 GPU 内存(即预留但尚未使用的内存)
reserved_memory = torch.cuda.memory_reserved(device)

# 获取已经分配并正在使用的 GPU 内存
allocated_memory = torch.cuda.memory_allocated(device)

# 计算剩余内存量
free_memory = torch.cuda.get_device_properties(device).total_memory - allocated_memory

print(f"已分配但未使用的 GPU 内存: {reserved_memory / 1024 ** 3:.2f} GiB")
print(f"已分配并正在使用的 GPU 内存: {allocated_memory / 1024 ** 3:.2f} GiB")
print(f"剩余 GPU 内存: {free_memory / 1024 ** 3:.2f} GiB")

  2. 运行时程序卡主或者出现 ValueError: too many values to unpack (expected 4) 错误
  这个不是THUML代码中的错误, 我把另一个同名代码搞混了. 但因为是同一个语句就记录一下.
  这种情况通常是在exp_main运行验证、训练和测试函数过程中, 在执行以下代码 (code.1) 出现:

for i, (batch_x, batch_y, batch_x_mark, batch_y_mark) in enumerate(train_loader):

造成这种情况的原因是通常发生在尝试将一个包含大于预期值的元素数量的序列解包给过少的变量时. 在 Python 中, 解包操作要求左侧的目标变量数量必须与右侧的元素数量相匹配,否则会引发 ValueError. 解决方法是补充一个index变量, 具体如下:

for i, (batch_x, batch_y, batch_x_mark, batch_y_mark,index) in enumerate(train_loader):

如果依然出现ValueError错误, 则检查parser变量在模型定义中输入输出参数是否设置对.
  此外, 我之前还在其他代码中遇到执行上述代码 (code.1) 卡主的情况, Spyder是卡主, 但jupyter正常运行, pycharm报出RuntimeError错误. 该情况通常在使用多进程模块(如multiprocessing)时出现。它表明在启动子进程之前,当前进程尚未完成其引导阶段。为了解决这个问题,你需要在启动子进程的主模块中添加一些代码,以确保它只在主模块执行时运行。这可以通过以下方式完成:

import multiprocessing

def main():
    # 主程序逻辑

if __name__ == '__main__':
    # 当前脚本作为主模块运行时才执行下面的代码
    multiprocessing.freeze_support()  # 仅在Windows上需要,在Unix/Linux系统上不会产生影响
    main()  # 调用主函数

2. run程序

  run程序是算法执行的主程序. 在运行过程种出现以下问题, 并提供解决方案.
  1. SystemExit: 2错误
  这个错误是由于必须赋值的变量并未赋值导致, 具体包括: --is_training, --model_id, --model, --data. 解决方法是, 将 ArgumentParser 对象赋值中的 ‘‘required=True’’ 语句删去. 以is_training为例, 具体如下:

# 原代码
parser.add_argument('--is_training', type=int, required=True, default=1, help='status')

# 修改为
parser.add_argument('--is_training', type=int, default=1, help='status')
  • 15
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 微分方程与数学物理问题是数学领域中一个重要的研究方向。微分方程是描述变量之间关系的数学工具,而数学物理问题是应用微分方程解决物理问题的一种方法。 在微分方程与数学物理问题的研究中,我们通常会遇到一些理论和实践上的困难。因此,及时掌握最新的研究成果和方法,尤其是中文校订版的pdf文件,对于我们的研究工作非常重要。它不仅可以帮助我们更好地理解微分方程与数学物理问题的基本概念和理论,还可以提供一些具体的例子和实例,帮助我们更好地应用这些方法解决实际问题。 通过研究微分方程与数学物理问题,我们能够深入理解自然界中的各种现象和规律。例如,通过微分方程的建模和求解,我们可以研究物体在空气中的运动、电路中的电流变化等。这些研究不仅可以为物理学中的问题提供解决思路,还可以帮助我们开发出更加准确和高效的数学工具和方法。 微分方程与数学物理问题还与许多其他学科有着密切的联系。例如,在工程学中,微分方程与数学物理问题可以用来研究电力系统中的传输线行为,以及机械系统中的振动现象。在经济学中,微分方程与数学物理问题可以用来建立经济模型,预测市场走势。因此,研究微分方程与数学物理问题不仅可以为数学领域增添新的理论,还可以为其他学科提供一种强有力的工具。 总之,微分方程与数学物理问题对于数学和物理学的发展非常重要。通过研究相关的理论和方法,我们可以深入理解自然界中的各种现象和规律,并为其他学科提供一种强大的工具。因此,及时获得微分方程与数学物理问题的相关文献资料,例如中文校订版的pdf文件,对于我们的研究工作至关重要。 ### 回答2: 微分方程与数学物理问题是数学物理领域的重要研究内容。微分方程描述了自然界中许多现象的数学模型,包括力学、电磁学、热传导等,它们是解决数学物理问题的基本工具。 《微分方程与数学物理问题》是一本教材或参考书,涵盖了微分方程和数学物理问题的理论和应用。它可能是一个PDF格式的电子书,提供了方便的在线阅读和参考。 这本书的目标群体可能是数学物理学习者、研究者和教师。它可能包含了各种基本的微分方程理论,如一阶微分方程、二阶线性常微分方程、偏微分方程等,以及它们的解法和应用。 此外,该书可能还涉及到数学物理问题的建模和求解方法,如拉普拉斯变换、费曼图、格林函数等。它还可能包括一些实际问题的案例研究,如振动问题、传热问题、电路问题等,以帮助读者理解如何将微分方程应用于实际问题的求解。 这本书的中文校对版PDF可能是对原书进行了校对并翻译成中文的版本,以便中国读者更好地理解和应用其中的知识。中文校对版PDF可能还包括了一些与中国相关的例子和应用案例,帮助读者更好地理解和应用微分方程与数学物理问题。 总之,《微分方程与数学物理问题》中文校对版PDF对于学习和研究微分方程和数学物理问题的读者来说是一本非常有价值的参考资料。它提供了理论和实践相结合的内容,帮助读者掌握微分方程的基本理论和解法,以及如何将其应用于数学物理问题的求解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值