为何我在自己的代码中的新建函数前使用#@save,新建的函数不能保存到d2l包中?我们使用#@save标签的目的不就是方便将新建的函数加入d2l包中吗?如果不能用它为d2l包增加内容,这个标签岂不是失去了存在的意义?
哪位大咖能解答一下吗(我用的python3.8+pytorch1.10+d2l 0.17.1)?
测试代码大体是这样的:
#@save
def mycode(a,b):
return a+b
为何我在自己的代码中的新建函数前使用#@save,新建的函数不能保存到d2l包中?我们使用#@save标签的目的不就是方便将新建的函数加入d2l包中吗?如果不能用它为d2l包增加内容,这个标签岂不是失去了存在的意义?
哪位大咖能解答一下吗(我用的python3.8+pytorch1.10+d2l 0.17.1)?
测试代码大体是这样的:
#@save
def mycode(a,b):
return a+b
@save 应该是个装饰器吧,需要把#
去掉。
试试这样写:
@save
def mycode(a, b):
return a + b
这个不是写死的吗,我的理解是他在notebook里面用#@save
标记的这些函数,是包含在d2l里面的,不用自己再搓了,#@save
只是告诉你这个在d2l里面可以直接调用。
#@save和普通注释在功能上没有什么区别,不能够将写好的代码自动保存到d2l库当中。#@save就是告诉你这个函数我们已经在d2l当中定义好了,你可以以后直接调用,不用自己每次重新写了,起到一个标识的作用。
你好,我的d2l包里老是缺函数,每次都得自己把前面的函数复制粘贴过来用,学到语言模型这块发现居然连load_data_time_machine也没有,函数复制过来居然告诉我没有timemachine这个关键词,好生折腾。。。所以想请问一下这正常嘛
我遇到的问题类似,同求一个能用的解决方案
我最近半天一直在思考这个问题,关于#@save的解释:
1)在s2l书籍里面是这样介绍的:
2)这个的意思是作者把这些函数直接写死在了d2l里面的torch.py文件中的,我们可以通过"d2l.function()"来调用,而不需要我们多次书写这样的代码,减少冗余,我们只需要在第一次搞明白这个函数是在干什么就可以了。
3)但是在实际操作的时候还会遇到一种问题,就是你参考d2l书运行代码,出现d2l.XXX不存在的现象,是因为你看的书教程里面的d2l包版本和你自己下载的d2l包不一致导致的(d2l包缺失相关的函数),具体可以自己的电脑里面"envs\d2l\Lib\site-packages\d2l\torch.py"中查看,对于没有的函数,我们可以自己写在里面,方便我们未来调用。
4)解决办法:i. 下载与你自己看的参考书中要求的d2l包版本;
ii. 将缺失的函数体/类,粘贴到3)中描述的torch.py文件里面,就可以调用了。
ps:这个#@save只是一个普通的注释,没有任何功能(我之前还以为这是个特殊的组合功能,能保存函数/类到d2l库里面。。。。。。),如果遇到没有的情况,就往前面翻书,把缺失的函数,类补到torch.py里面就可以了
有错别字,1)里面是d2l书籍,是我自己一些拙见,希望对大家有帮助。
有部分函数d2l包里面没有,需要自己粘贴到d2l/torch.py文件里面!!!