我现在正在学习 tensorflow 和 keras,我看到所有教程都有这两个导入:
import tensorflow as tf
from tensorflow import keras
根据我对 python import 的理解,我认为第二行是额外的,因为如果我们已经在第一行中导入了 tensorflow,那么我们应该已经导入了 tensorflow 中的每个模块。就像我们有
import math
那么我们应该有 math.log()、math.sqrt() 可用。
但是,如果我评论
from tensorflow import keras
然后是这行代码
model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])
会回来 NameErrorTraceback(最近调用最后)
<ipython-input-3-740ba65f0ade> in <module>()
----> 1 model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])
NameError: name 'keras' is not defined
如果只有import tensorflow as tf,为什么不能直接使用tf.keras?与 import math 中的导入相比,此导入有何特别之处?
谢谢
请您参考如下方法:
当你在 python 中导入一个模块时,你只导入那个模块(连同模块导入的模块),导入模块中定义的任何模块都需要自己导入,
例子
$ ptree
.
├── imports.py
└── pmod
├── cmod.py
└── __init__.py
1 directory, 3 files
$ cat imports.py
import pmod
pmod.do()
pmod.cmod.do()
$ python3 imports.py
hello from pmod
Traceback (most recent call last):
File "imports.py", line 4, in <module>
pmod.cmod.do()
AttributeError: module 'pmod' has no attribute 'cmod'
但是,如果我明确地导入它,它就会起作用
$ cat imports.py
import pmod
import pmod.cmod
pmod.do()
pmod.cmod.do()
$ python3 imports.py
hello from pmod
hello from cmod
