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

Viewed 5320

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)

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.

Related