Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unable to build `Dense` layer with non-floating point dtype Error

Tags:

tensorflow

I am currently learning Deep learning and Keras. When I am executing this code I am getting weird error: "TypeError: Unable to build Dense layer with non-floating point dtype " and I can't figure out what is the problem. What am I missing? How to fix this weird error?

The error show at the model.fit(...

def create_nerual_network():
    model = tf.keras.models.Sequential()

    model.add(tf.keras.layers.Flatten())
    model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu)) # Simple Dense Layer
    model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu)) # Simple Dense Layer
    model.add(tf.keras.layers.Dense(2, activation=tf.nn.softmax))   # Output layer

    return model


train_images, train_labels = load_dataset() #this function works fine
model = create_nerual_network()

model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
model.fit(train_images, train_labels, epochs = 15, verbose=2)
train_loss, train_acc = model.evaluate(train_images, train_labels)

like image 736
Tony M Avatar asked Jun 24 '19 15:06

Tony M


1 Answers

It is interesting that you do not specify your input shape anywhere before the model compilation but maybe newer versions of Keras can figure this out from provided input.

In which case I am quite certain that the problem is with train_images, look at what dtype is this array, it's probably int8 which is usual format for images as they use 8 bit integers for each color channel.

It is common practice to at least normalize your data before training and always convert it to float. Try putting this before calling model.fit:

train_images = train_images / 256.

This will normalize your images into range [0, 1) and convert it to float array. It is possible that you have to convert to floats also your labels.

like image 105
Addy Avatar answered Nov 18 '22 17:11

Addy