【问题标题】:Why do we have to import keras from tensorflow if we have already imported tensorflow in python?如果我们已经在 python 中导入了 tensorflow,为什么还要从 tensorflow 中导入 keras?
【发布时间】:2019-11-02 20:22:45
【问题描述】:

我现在正在学习 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])])

会回来的 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 中的导入相比,此导入有什么特别之处?

谢谢

【问题讨论】:

  • print(tf.__version__) 给我 1.14.0-rc1

标签: python tensorflow import keras python-import


【解决方案1】:

在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

【讨论】:

  • 非常感谢 YHoffman!请问pmod.do()在哪里定义?在我看来pmod 是一个目录而不是一个 python 文件
  • 它在__init__.py 文件中定义,即何时导入。您执行import,现在您还可以在__init__ 文件中定义import cmod,这实际上会提升导入并允许您在不显式导入的情况下执行pmod.cmod.do(),因为它已经作为一部分导入pmod 的
  • 我看到 tensorflow 和 keras 已经导入了它,(很可能使用 init 文件)。祝你好运!
  • 非常感谢 YHoffman 的帮助!现在我了解了“导入”在 python 中的工作原理。我很感激! ?
【解决方案2】:

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

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

现在,您无需从tensorflow 导入keras

【讨论】:

  • 非常感谢毗湿奴!确实如你所说,我验证了!所以这个from tensorflow import keras的唯一好处就是写keras更方便,就像我们不必每次都写tf.keras,对吧?
  • 是的,你可以使用任何你觉得方便的东西。我更喜欢tf.keras
猜你喜欢
  • 1970-01-01
  • 2018-04-26
  • 2019-02-09
  • 1970-01-01
  • 1970-01-01
  • 2017-05-21
  • 2022-11-13
  • 1970-01-01
  • 2017-07-01
相关资源
最近更新 更多