导入错误:无法导入np_utils名称。

46

我正在尝试运行keras的示例

但是我遇到了这个错误:

ImportError
Traceback (most recent call last)
<ipython-input-58-50de27eea0f8> in <module>()   
      8 import numpy as np  
      9 import matplotlib.pyplot as plt  
---> 10 from keras.models import Sequential  
     11 from keras.layers import Dense, LSTM  
     12   

/usr/local/lib/python2.7/dist-packages/keras/__init__.py in <module>()  
      1 from __future__ import absolute_import  
      2   
----> 3 from . import utils  
      4 from . import activations  
      5 from . import applications  

/usr/local/lib/python2.7/dist-packages/keras/utils/__init__.py in <module>()  
      1 from __future__ import absolute_import  
----> 2 from . import np_utils  
      3 from . import generic_utils  
      4 from . import data_utils  
      5 from . import io_utils  

ImportError: cannot import name np_utils  

我正在使用Ubuntu操作系统,并且通过以下命令安装了Keras:

sudo pip install keras 

这个问题已经被问过,但是没有得到答案: Keras:无法导入名称np_utils


我曾经遇到过同样的问题,解决方法是关闭控制台并重新打开一个新的... - Julien
我曾经遇到过同样的问题。在我的情况下,是因为Theano试图将缓存写入一个它没有写入权限的目录。改用Tensorflow后端解决了我的问题。 - Simon Gibbons
19个回答

44

np_utils 是一个单独的包(也是 keras 的依赖项 - 但不随其一起安装)。可以使用 pip 安装:

np_utils 是一个独立的软件包(同时也是 Keras 的依赖项,但不会随 Keras 一起安装)。可通过pip进行安装:

pip install np_utils

使用 - Keras==2.0.6


建议:由于某些奇怪(且仍未知)的原因,即使安装了导入包,也可能会出现错误。

from keras.utils.np_utils import to_categorical

尝试后仍然无效 - 我必须重启笔记本电脑(即使第一次重启也没用),并且一旦工作,我再次因为同样的导入调用而卡住了(在utils中有另一个import from. import conv_utils,需要tensorflow)。

我尝试使用pip install tensorflow安装tensorflow,结果如下:

Could not find a version that satisfies the requirement tensorflow (from versions: ) No matching distribution found for tensorflow

即使这个gist对我也没有用。


最终,我安装了Anaconda - 它预先安装了所有的科学包(numpy,scipy,scikit-learn等)。 已安装keras:

conda install keras

最好的是,它甚至安装了tensorflow作为它的依赖。


这不可能不使用conda吗? - ashley
你从哪里得知np_utils是一个包?在Keras中,np_utils是utils文件夹中的一个文件,请参见https://github.com/keras-team/keras/blob/master/keras/utils/np_utils.py。 - Dr. Snoopy
我是pypi上np_utils的维护者,但keras没有使用它。此外,那是一个相对导入,因此它是keras内部的。 - David

33

如果是 keras > 2.0 版本,请使用 from keras.utils import to_categorical

用法示例:to_categorical(y, num_classes=None)


11
他们将所有内容都移到了utils文件夹中,所以如果你正在使用tf 2.x或更高版本的keras,则只需使用tf.keras.utilskeras.utils
例如: keras.utils.np_utils.to_categoricalkeras.utils.to_categorical

1
这个解决方案已经在另一个答案中提出。 - Sergey Shubin

8

在使用时,我其实遇到了类似的问题。

from keras.utils import to_categorical

但我用以下方法解决了这个问题:

from tensorflow.keras.utils import to_categorical

8

我遇到了同样的问题。您需要执行pip install np_utils,然后重新启动终端。确保一切都是最新的。


4

在从keras导入任何内容之前,请尝试先导入numpy(我看到您已经这样做了,只是为了记录解决方案,这对我有用)。我遇到了同样的错误,当我尝试时:

import numpy as np
from __future__ import absolute_import
#Anything from keras

我觉得这个方法很有效。可以尝试通过以下方式预先安装最新的稳定版本futurenumpy包:

pip install future
pip install numpy

有时可能会出现conda和其他python安装相互干扰的情况。我之前是通过brew管理所有内容的,但是当我安装了conda后,许多我之前安装的软件包给了我一个导入错误(由于PYTHONPATH变量)。

2

我必须安装Tensorflow来解决这个问题。(从虚拟环境安装):

 pip install tensorflow

这对我起作用了,显然Keras默认情况下不会安装tensorflow或theano。 - Tim

1

这是我的解决方案:

from keras import utils

utils.to_categorical(...)

1

1

这在Google Colab中有效:

import tensorflow as tf

y_train=tf.keras.utils.to_categorical(y_train,num_classes=7)

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