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

Posted

技术标签:

【中文标题】如何在 Tensorflow 中从 tf.keras 导入 keras?【英文标题】:How to import keras from tf.keras in Tensorflow? 【发布时间】:2018-04-26 01:17:58 【问题描述】:
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 版

【问题讨论】:

【参考方案1】:

像这样使用 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

其余的保持不变。

【讨论】:

在哪里可以找到 layer_utils 的任何想法?它曾经是这样导入的:from keras.utils import layer_utils 但是,按照上面的建议:tensorflow.python.keras.utils import layer_utils 会导致错误:ImportError: cannot import name 'layer_utils' 我对 maxnorm 也有同样的问题【参考方案2】:

试试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。

【讨论】:

from tensorflow import keras 是一样的,对吧?【参考方案3】:

每次降级不太好,您可能需要进行如下更改:

张量流

将张量流导入为 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

重点是不要使用

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

你需要添加

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

【讨论】:

【参考方案4】:

为简单起见,我将采用 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

【讨论】:

不反对,但这并不能真正回答 OP 的问题【参考方案5】:

这在 tensorflow==1.4.0 中对我有用

从 tensorflow.python 导入 keras

【讨论】:

【参考方案6】:

为每个来检查为什么tensorflow.kerasPyCharm 中不可见的人更新。

从 TensorFlow 2.0 开始,只有 PyCharm 版本 > 2019.3 能够正确识别 tensorflow (tensorflow.keras) 内的 tensorflowkeras

此外,建议(由 Francois Chollet)每个人都切换到 tensorflow.keras 代替普通的 keras

【讨论】:

【参考方案7】:

我在导入这些库时遇到了类似的问题。我正在使用 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'

我解决了这个擦除 tensorflow.python

使用此代码我解决了错误:

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

【讨论】:

我相信这只是因为您还安装了独立的 keras 包。这实际上并没有使用 tensorflow 自带的 keras。 @BryanHead 是对的。您可以通过pip show tensorflow 查看您的 tensorflow 版本 其实在使用from tensorflow.keras.layers的时候解决了,因为有暴露的模块。 tensorflow.python 包在某些方面是私有的。【参考方案8】:

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

【讨论】:

以上是关于如何在 Tensorflow 中从 tf.keras 导入 keras?的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow GRU 层调用()参数——TypeError:调用()得到了一个意外的关键字参数“reset_after”

在Ubuntu中从源码编译TensorFlow

在特殊的 Conda 环境中从控制台调用 Python 脚本(使用 TensorFlow 等库)

Tensorflow 不是确定性的,它应该在哪里

在Ubuntu中构建的Tensorflow MKL-DNN会默默地产生错误结果

如何在 Spark 中从 cassandra datastax 云中读取数据