如果我们已经在Python中导入了tensorflow,为什么还要从tensorflow导入keras呢?

Bil*_*hen 6 python import python-import keras tensorflow

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

import tensorflow as tf
from tensorflow import keras
Run Code Online (Sandbox Code Playgroud)

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

import math 
Run Code Online (Sandbox Code Playgroud)

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

但是,如果我评论

from tensorflow import keras
Run Code Online (Sandbox Code Playgroud)

然后这行代码

model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])
Run Code Online (Sandbox Code Playgroud)

将返回 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
Run Code Online (Sandbox Code Playgroud)

如果我们只有import tensorflow as tf,为什么不能直接使用tf.keras与import math中的导入相比,此导入有何特别之处?

谢谢

YHo*_*man 5

当您在 python 中导入模块时,您仅导入该模块(以及该模块导入的模块),导入模块中定义的任何模块都需要单独导入,

\n\n

例子

\n\n
$ ptree\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 imports.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 pmod\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cmod.py\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 __init__.py\n\n1 directory, 3 files\n\n$ cat imports.py \nimport pmod\n\npmod.do()\npmod.cmod.do()\n\n$ python3 imports.py \nhello from pmod\nTraceback (most recent call last):\n  File "imports.py", line 4, in <module>\n    pmod.cmod.do()\nAttributeError: module \'pmod\' has no attribute \'cmod\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是如果我明确导入它它确实有效

\n\n
$ cat imports.py \nimport pmod\nimport pmod.cmod\n\npmod.do()\npmod.cmod.do()\n\n$ python3 imports.py \nhello from pmod\nhello from cmod\n
Run Code Online (Sandbox Code Playgroud)\n


Vis*_*asu 2

错误不在于tf.keras. 在模型定义中,您使用layersfromkeras和 not tf.keras。这就是为什么您在删除导入时收到错误的原因。将您的模型定义替换为:

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

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

  • 是的,您可以使用任何您认为方便的东西。我更喜欢“tf.keras”。 (2认同)