keras.utils.to_categorical() - 未定义名称keras

xjt*_*c55 2 python keras

我正在运行来自Keras网站的多层感知器(MLP)的测试脚本,用于多类softmax分类.在jupyter笔记本中运行我得到错误"名称'keras'未定义".这可能是一个我不喜欢的简单的python语法问题,但是这段代码直接来自keras所以我希望它应该按原样运行.我使用keras运行其他神经网络,所以我很确定我已经安装了所有东西(使用anaconda安装了keras).有人可以帮忙吗?我在底部包含了代码和错误.谢谢!

from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.optimizers import SGD

# Generate dummy data
import numpy as np
x_train = np.random.random((1000, 20))
y_train = keras.utils.to_categorical(np.random.randint(10, size=(1000, 1)), num_classes=10)
x_test = np.random.random((100, 20))
y_test = keras.utils.to_categorical(np.random.randint(10, size=(100, 1)), num_classes=10)

model = Sequential()
# Dense(64) is a fully-connected layer with 64 hidden units.
# in the first layer, you must specify the expected input data shape:
# here, 20-dimensional vectors.
model.add(Dense(64, activation='relu', input_dim=20))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
              optimizer=sgd,
              metrics=['accuracy'])

model.fit(x_train, y_train,
          epochs=20,
          batch_size=128)
score = model.evaluate(x_test, y_test, batch_size=128)
Run Code Online (Sandbox Code Playgroud)

这是错误消息:

NameError                                 Traceback (most recent call last)
<ipython-input-1-6d8174e3cf2a> in <module>()
      6 import numpy as np
      7 x_train = np.random.random((1000, 20))
----> 8 y_train = keras.utils.to_categorical(np.random.randint(10, size=(1000, 1)), num_classes=10)
      9 x_test = np.random.random((100, 20))
     10 y_test = keras.utils.to_categorical(np.random.randint(10, size=(100, 1)), num_classes=10)

NameError: name 'keras' is not defined
Run Code Online (Sandbox Code Playgroud)

Mo *_*o K 11

from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.optimizers import SGD
Run Code Online (Sandbox Code Playgroud)

从上面,您只导入了以下子模块 keras

  • keras.models
  • keras.layers
  • keras.optimizers

但这不会自动导入外部模块keras 或其他子模块keras.utils

所以,你可以做任何一个

import keras
import keras.utils
from keras import utils as np_utils
Run Code Online (Sandbox Code Playgroud)

但是from keras import utils as np_utils使用最广泛.

特别import keras是不是一个好习惯,因为导入更高的模块不一定导入其子模块(尽管它在Keras中有效)

例如,

import urllib 不一定导入,urllib.request因为如果有这么多大子模块,每次导入它的所有子模块效率都很低.


pro*_*sti 7

一般方式:

from keras.utils import to_categorical
Y_train = to_categorical(y_train, num_classes)
Run Code Online (Sandbox Code Playgroud)

具体方式:

from keras.utils import to_categorical

print(to_categorical(1, 2))
print(to_categorical(0, 2))
Run Code Online (Sandbox Code Playgroud)

会输出

[0. 1.]
[1. 0.]
Run Code Online (Sandbox Code Playgroud)


R.K*_*R.K 5

虽然这是一个老问题,但尚未更新访问 to_categorical 函数的最新方法。

这个函数现在已经打包在 np_utils 中了。

正确的访问方式是:

from keras.utils.np_utils import to_categorical
Run Code Online (Sandbox Code Playgroud)