4
$\begingroup$

I'm trying to run the code below in my Jupyter Notebook. I get:

AttributeError: module 'tensorflow.python.keras.utils' has no attribute 'to_categorical'

This is code from Kaggle tutorial. I have installed Keras and 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)
$\endgroup$
2
$\begingroup$

Newer versions of keras==2.4.0 and tensorflow==2.3.0 would work as follows.

Import:

from keras.utils import np_utils

or

from keras import utils as np_utils

and then replace keras.utils.to_categorical with

keras.utils.np_utils.to_categorical
$\endgroup$
1
$\begingroup$

Use keras>=2.2 and tensorflow >=1.14 to resolve the issue.

$\endgroup$
0
1
$\begingroup$

Include this in your code

from tensorflow import keras

in place of

from tensorflow.python import keras

$\endgroup$
1
$\begingroup$

As it already has been said, to_categorical() is function. It in keras for tensorflow 2.x can be imported this way:

from keras.utils import to_categorical

then used like this:

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

it will print

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

Where 10 is the number of classes, the input values range is [0;number_of_classes-1]. The output is activated (1) or not active (0) position.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.