AttributeError:模块“tensorflow.python.keras.utils”没有属性“to_categorical”

数据挖掘 喀拉斯 张量流
2021-10-13 14:12:28

我正在尝试在我的 Jupyter Notebook 中运行以下代码。我得到:

AttributeError:模块“tensorflow.python.keras.utils”没有属性“to_categorical”

这是来自 Kaggle 教程的代码。我已经安装了 Keras 和 Tensorflow。

 import numpy as np
    import pandas as pd
    from sklearn.model_selection import train_test_split
    from tensorflow.python import keras
    from tensorflow.python.keras.models import Sequential
    from tensorflow.python.keras.layers import Dense, Flatten, Conv2D, Dropout  

      img_rows, img_cols = 28, 28
    num_classes = 10
    
    def data_prep(raw):
        out_y = keras.utils.to_categorical(raw.label, num_classes)
    
        num_images = raw.shape[0]
        x_as_array = raw.values[:,1:]
        x_shaped_array = x_as_array.reshape(num_images, img_rows, img_cols, 1)
        out_x = x_shaped_array / 255
        return out_x, out_y
    
    raw_data = pd.read_csv('trainMNIST.csv')
    
    x, y = data_prep(raw_data)
    
    model = Sequential()
    model.add(Conv2D(20, kernel_size=(3, 3),
                     activation='relu',
                     input_shape=(img_rows, img_cols, 1)))
    model.add(Conv2D(20, kernel_size=(3, 3), activation='relu'))
    model.add(Flatten())
    model.add(Dense(128, activation='relu'))
    model.add(Dense(num_classes, activation='softmax'))
    
    model.compile(loss=keras.losses.categorical_crossentropy,
                  optimizer='adam',
                  metrics=['accuracy'])
    model.fit(x, y,
              batch_size=128,
              epochs=2,
              validation_split = 0.2)
4个回答

较新版本的 keras==2.4.0 和 tensorflow==2.3.0 将按如下方式工作。

进口:

from keras.utils import np_utils

或者

from keras import utils as np_utils

然后替换keras.utils.to_categorical

keras.utils.np_utils.to_categorical

将此包含在您的代码中

from tensorflow import keras

代替

from tensorflow.python import keras

使用 keras>=2.2 和 tensorflow >=1.14 来解决问题。

正如已经说过的,to_categorical()是函数。它在 keras 中用于 tensorflow 2.x 可以这样导入:

from keras.utils import to_categorical

然后像这样使用:

digit=6
x=to_categorical(digit, 10)
print(x)

它会打印

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

其中 10 是类数,输入值范围是 [0;number_of_classes-1]。输出处于激活 (1) 或未激活 (0) 位置。