我看到这样的代码:
import torch
from torch import nn
from sklearn.metrics import r2_score
我正在学习Python,但我没有看到真正的文档可以解释第一个导入,我认为前两行在其他语言中相当于:
from torch import torch.nn
我的意思是为什么有两行,我想是因为代码后来只使用了火炬,
我不明白Python中两个级别的子模块,有doc的url吗?超过 3 或 4 个模块级别怎么样?
Python 中的某些包包含子模块,默认情况下不加载这些子模块。这有几个优点。如果您不使用子模块(在您的情况下为
nn
),则不需要导入它,从而减少加载时间。它还有助于维护干净且模块化的代码库和命名空间。
通过两个导入,您实际上导入了
torch
和 nn
,并指定包 nn
可以在 torch
中找到,如 torch.nn
。
导入时可以使用三个关键字:
import
、from
和as
,其中as
仅用于更改本地命名空间中的包名称。import ... [as ...]
将仅导入包并使其在默认名称或使用 as
指定的名称下可用。from ... import ... [as ...]
时,您将从包中导入子模块。as
的包:
from torch import nn
与 import torch.nn as nn
相同。
您还可以始终在 import
关键字之后导入多个模块/子模块:from torch import nn, cuda
torch.nn
和 torch.cuda
。
同时导入两者的方法(
from torch import torch.nn
)将不起作用。这相当于:import torch.torch.nn as torch.nn
或from torch.torch import nn
。
您可以使用这个:
import torch, torch.nn as nn
对于必须导入第三层和第四层的每个子模块的担忧:
大多数子模块默认是隐式导入的。而且很少找到必须显式导入的子模块,而不是在包的第二层。
简而言之:如果您想使用
torch
和 nn
,您必须同时导入两者。如果您只使用 torch
无论如何,您不需要导入 nn
。