Keras,models.add() missing 1 required positional argument: 'layer'

12,217

It seems perfect indeed....

But I noticed you're not creating "an instance" of a sequential model, your using the class name instead:

#yours: model = Sequential 
#correct:
model = Sequential()

Since the methods in a class are always declared containing self as the first argument, calling the methods without an instance will probably require the instance as the first argument (which is self).

The method's definition is def add(self,layer,...):

Share:
12,217
Ajay H
Author by

Ajay H

I like doing things.

Updated on July 28, 2022

Comments

  • Ajay H
    Ajay H almost 2 years

    I'm classifying digits of the MNIST dataset using a simple feed forward neural net with Keras. So I execute the code below.

    import os
    import tensorflow as tf
    
    import keras
    from keras.models import Sequential
    from keras.layers import Dense, Activation
    
    from tensorflow.examples.tutorials.mnist import input_data
    
    mnist = input_data.read_data_sets('/tmp/data', one_hot=True)
    
    # Path to Computation graphs
    LOGDIR = './graphs_3'
    
    # start session
    sess = tf.Session()
    
    #Hyperparameters
    LEARNING_RATE = 0.01
    BATCH_SIZE = 1000
    EPOCHS = 10
    
    # Layers
    HL_1 = 1000
    HL_2 = 500
    
    # Other Parameters
    INPUT_SIZE = 28*28
    N_CLASSES = 10
    
    model = Sequential
    model.add(Dense(HL_1, input_dim=(INPUT_SIZE,), activation="relu"))
    #model.add(Activation(activation="relu"))
    model.add(Dense(HL_2, activation="relu"))
    #model.add(Activation("relu"))
    model.add(Dropout(rate=0.9))
    model.add(Dense(N_CLASSES, activation="softmax"))
    
    model.compile(
        optimizer="Adam",
        loss="categorical_crossentropy",
        metrics=['accuracy'])
    
    
    
    # one_hot_labels = keras.utils.to_categorical(labels, num_classes=10)
    
    model.fit(
        x=mnist.train.images, 
        y=mnist.train.labels, 
        epochs=EPOCHS, 
        batch_size=BATCH_SIZE)
    
    
    score = model.evaluate(
        x=mnist.test.images,
        y=mnist.test.labels)
    
    print("score = ", score)
    

    However, I get the following error:

    model.add(Dense(1000, input_dim=(INPUT_SIZE,), activation="relu"))
       TypeError: add() missing 1 required positional argument: 'layer'
    

    The syntax is exactly as shown in the keras docs. I am using keras 2.0.9, so I don't think it's a version control problem. Did I do something wrong?