如何在TensorFlow中从tf.keras导入keras?

81
import tensorflow as tf
import tensorflow 

from tensorflow import keras
from keras.layers import Dense

我遇到了以下错误

from keras.layers import Input, Dense
Traceback (most recent call last):

  File "<ipython-input-6-b5da44e251a5>", line 1, in <module>
    from keras.layers import Input, Dense

ModuleNotFoundError: No module named 'keras'

我该如何解决这个问题?

注意:我正在使用Tensorflow 1.4版本

9个回答

128

请像这样使用tensorflow中的keras模块:

import tensorflow as tf

导入类:

from tensorflow.python.keras.layers import Input, Dense

或者直接使用:

dense = tf.keras.layers.Dense(...)

Tensorflow 2修改:

from tensorflow.keras.layers import Input, Dense

其余部分保持不变。


2
有没有想法在哪里找到layer_utils?以前是这样导入的:from keras.utils import layer_utils然而,根据您上面的建议:tensorflow.python.keras.utils import layer_utils会导致错误:ImportError: 无法导入名称'layer_utils' - Rafael_Espericueta
2
我也遇到了maxnorm的同样问题。 - ARAT
3
使用tensorflow.python.keras从未被认为是正确的,因为它绕过了公共API。虽然在TF 2.6之前它可以工作,但现在不再行,因为Tensorflow现在在tensorflow包之外使用keras模块。请参见发布说明Keras已拆分为单独的PIP软件包(keras),其代码已移动到GitHub存储库keras-team/keras中。tf.keras的API端点保持不变,但现在由keras PIP软件包支持。...代码不同,混合它们会出错。 - A Roebel

8

尝试使用 from tensorflow.python import keras 命令,你只需要一行代码就可以将依赖于keras的代码转换为tensorflow格式。

你还可以尝试使用 from tensorflow.contrib import keras 命令。这适用于tensorflow 1.3版本。

编辑:对于tensorflow 1.10及以上版本,你可以使用import tensorflow.keras as keras来获取tensorflow中的keras。


3
我已经转向使用tensorflow 1.10.0。在这个版本中,你需要使用tensorflow.keras。使用import tensorflow as tfkeras = tf.keras来一行代码将纯keras转换为tensorflow keras。 - Ramesh Kamath
1
from tensorflow import keras 是相同的,对吧? - endolith

5
为了简单起见,我将介绍Keras和tf.keras中代码的两个版本。这里的示例是一个包含不同层的简单神经网络模型。
在Keras(v2.1.5)中:
from keras.models import Sequential
from keras.layers import Dense

def get_model(n_x, n_h1, n_h2):
    model = Sequential()
    model.add(Dense(n_h1, input_dim=n_x, activation='relu'))
    model.add(Dense(n_h2, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(4, activation='softmax'))
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
    print(model.summary())
    return model

tf.keras(v1.9)中
import tensorflow as tf

def get_model(n_x, n_h1, n_h2):
    model = tf.keras.Sequential()
    model.add(tf.keras.layers.Dense(n_h1, input_dim=n_x, activation='relu'))
    model.add(tf.keras.layers.Dense(n_h2, activation='relu'))
    model.add(tf.keras.layers.Dropout(0.5))
    model.add(tf.keras.layers.Dense(4, activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    print(model.summary())

    return model

或者可以通过以下方式导入,而不是上述提到的方式。
from tensorflow.keras.layers import Dense

官方文档 tf.keras

注意:TensorFlow版本为1.9


1
不是要打负评,但这并没有真正回答楼主的问题。 - Super-intelligent Shade

5

每次降级并不完全是好的选择,你可能需要按照下面所示进行以下更改:

TensorFlow

导入tensorflow库:

import tensorflow as tf

#Keras
from tensorflow.keras.models import Sequential, Model, load_model, save_model
from tensorflow.keras.callbacks import ModelCheckpoint
from tensorflow.keras.layers import Dense, Activation, Dropout, Input, Masking, TimeDistributed, LSTM, Conv1D, Embedding
from tensorflow.keras.layers import GRU, Bidirectional, BatchNormalization, Reshape
from tensorflow.keras.optimizers import Adam

from tensorflow.keras.layers import Reshape, Dropout, Dense,Multiply, Dot, Concatenate,Embedding
from tensorflow.keras import optimizers
from tensorflow.keras.callbacks import ModelCheckpoint

The point is that instead of using

from keras.layers import Reshape, Dropout, Dense,Multiply, Dot, Concatenate,Embedding

你需要添加

from tensorflow.keras.layers import Reshape, Dropout, Dense,Multiply, Dot, Concatenate,Embedding

5
从TensorFlow 2.0开始,只有PyCharm版本大于2019.3才能识别tensorflow(tensorflow.keras)中的tensorflow和keras。Keras的作者Francois Chollet建议每个人都使用tensorflow.keras代替普通的keras。
这里还有一个重要的提醒:
对于TF >= 2.0的重要说明
这是一个持续存在的问题,来自JetBrains(实际上是来自TensorFlow方面),似乎这个错误时不时会出现(https://youtrack.jetbrains.com/issue/PY-53599)。
有时候,PyCharm不能正确地导入/识别tensorflow或其他导入。
根据Python + TF + PyCharm版本的不同,您可能需要在以下导入类型之间切换:
from tensorflow.keras.models import Model

或者

from tensorflow.python.keras.models import Model

2

这个方法在tensorflow==1.4.0版本下适用:

从tensorflow.python中导入keras模块。


1
我遇到了导入这些库的类似问题。我正在使用Anaconda Navigator 1.8.2和Spyder 3.2.8。
我的代码如下:
import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np
import math

#from tf.keras.models import Sequential  # This does not work!
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import InputLayer, Input
from tensorflow.python.keras.layers import Reshape, MaxPooling2D
from tensorflow.python.keras.layers import Conv2D, Dense, Flatten

我得到以下错误:
from tensorflow.python.keras.models import Sequential

ModuleNotFoundError: No module named 'tensorflow.python.keras'

我用以下代码解决了这个错误:

我用以下代码解决了这个错误:

import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np
import math

#from tf.keras.models import Sequential  # This does not work!
from keras.models import Sequential
from keras.layers import InputLayer, Input
from keras.layers import Reshape, MaxPooling2D
from keras.layers import Conv2D, Dense, Flatten

3
我认为这只能工作是因为你也安装了独立的Keras软件包。实际上它并没有使用TensorFlow内置的Keras。 - Bryan Head
1
@BryanHead 是正确的。您可以通过 pip show tensorflow 命令检查您的tensorflow版本。 - MeadowMuffins
1
当使用from tensorflow.keras.layers时,问题实际上已经解决了,因为这些模块是公开的。tensorflow.python包在某些方面是私有的。 - phi

1

我在PyCharm中使用Tensorflow 2.0.0时遇到了同样的问题。PyCharm无法识别tensorflow.keras;我更新了我的PyCharm,问题得到了解决!


1
如果您在PyCharm环境中运行(观察到tensorflow==2.13.0版本),请使用以下内容。
import tensorflow as tf
import tensorflow 

from tensorflow.python import keras
from keras.layers import Dense

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接