如果我们已经在python中导入了tensorflow,为什么我们必须从tensorflow导入keras?

时间:2019-06-20 03:57:10

标签: python tensorflow import keras python-import

我现在正在学习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 ?与导入数学中的导入相比,此导入有何特殊之处?

谢谢

2 个答案:

答案 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