我现在正在学习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 ?与导入数学中的导入相比,此导入有何特殊之处?
谢谢
答案 0 :(得分:2)
在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
答案 1 :(得分:0)
错误不是tf.keras
造成的。在模型定义中,您使用layers
中的keras
,而不使用tf.keras
。这就是为什么删除导入时出现错误的原因。将模型定义替换为:
model = tf.keras.Sequential([tf.keras.layers.Dense(units=1, input_shape=[1])])
现在,您无需从keras
导入tensorflow
。