为什么我们已经在 python 中导入了 tensorflow,为什么还要从 tensorflow 中导入 keras?

Why do we have to import keras from tensorflow if we have already imported tensorflow in python?

我现在正在学习 tensorflow 和 keras,我看到所有教程都有这两个导入:

import tensorflow as tf
from tensorflow import keras

根据我对python导入的理解,我认为第二行是多余的,因为如果我们已经在第一行导入了tensorflow,那么我们应该已经导入了tensorflow中的每个模块。就像我们有

import math 

那么我们应该有 math.log(), math.sqrt() 可用。

但是,如果我发表评论

from tensorflow import keras

然后这行代码

model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])

会return 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?

中的导入相比,此导入有何特别之处

谢谢

错误与 tf.keras 无关。在您的模型定义中,您使用 keras 中的 layers 而不是 tf.keras。这就是为什么您在删除导入时会收到错误消息的原因。将您的模型定义替换为:

model = tf.keras.Sequential([tf.keras.layers.Dense(units=1, input_shape=[1])])

现在,您不需要从 tensorflow 导入 keras

当你在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