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中的导入相比,此导入有何特别之处?
谢谢
当您在 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\'\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n
错误不在于tf.keras. 在模型定义中,您使用layersfromkeras和 not tf.keras。这就是为什么您在删除导入时收到错误的原因。将您的模型定义替换为:
model = tf.keras.Sequential([tf.keras.layers.Dense(units=1, input_shape=[1])])
现在,您不需要keras从导入tensorflow。
| 归档时间: |
|
| 查看次数: |
1561 次 |
| 最近记录: |