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

时间:2017-05-18 17:13:16

标签: python keras

我正在运行多层感知器(MLP)Keras website的测试脚本,用于多类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)

这是错误消息:

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

4 个答案:

答案 0 :(得分:6)

db.inventory.insert(
{
item: “ABC1”,
details: {
model: “14Q3”,
manufacturer: “XYZ Company”
},
stock: [ { size: “S”, qty: 25 }, { size: “M”, qty: 50 } ],
category: “clothing”
}
)

从上面开始,您只在from keras.models import Sequential from keras.layers import Dense, Dropout, Activation from keras.optimizers import SGD

中导入了以下子模块
  • keras
  • keras.models
  • keras.layers

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

所以,你可以做任何一个

keras.utils

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

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

例如,

import keras 不一定导入import urllib因为如果有这么多大子模块,每次导入所有子模块都是低效的。

答案 1 :(得分:3)

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

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

正确的访问方式是:

from keras.utils.np_utils import to_categorical

答案 2 :(得分:2)

一般方法:

from keras.utils import to_categorical
Y_train = to_categorical(y_train, num_classes)

具体方式:

from keras.utils import to_categorical

print(to_categorical(1, 2))
print(to_categorical(0, 2))

将输出

[0. 1.]
[1. 0.]

答案 3 :(得分:1)

这对我有用:

import tensorflow as tf
from keras import utils as np_utils 

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