Почему мы должны импортировать керы из тензорного потока, если мы уже импортировали тензорный поток в python? - PullRequest
1 голос
/ 20 июня 2019

Я сейчас изучаю tenorflow и keras и вижу, что все уроки имеют следующие два импорта:

import tensorflow as tf
from tensorflow import keras

Исходя из моего понимания импорта python, я подумал, что вторая строка является дополнительной, так как если мы уже импортировали тензор потока в первой строке, то мы импортируем каждый модуль в тензор потока. Как если бы у нас было

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

Почему мы не можем напрямую использовать tf.keras , если у нас есть только импорт тензорного потока как tf ? Что особенного в этом импорте по сравнению с импортом в import math ?

Спасибо

Ответы [ 2 ]

2 голосов
/ 20 июня 2019

Когда вы импортируете модуль в 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
0 голосов
/ 20 июня 2019

Ошибка не с tf.keras.В определении модели вы используете layers из keras, а не tf.keras.Вот почему вы получаете ошибку при удалении импорта.Замените определение модели на:

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

Теперь вам не нужно импортировать keras из tensorflow.

...