AttributeError: 'function' object has no attribute 'compile'
Question:
I’ve been facing this attribute error, any ideas how I can solve it?
def model(input_shape):
model = keras.Sequential()
model.add(keras.layers.LSTM(64, input_shape=(1,9), return_sequences=True))
model.add(keras.layers.LSTM(64))
model.add(keras.layers.Dense(64, activation='relu'))
model.add(keras.layers.Dropout(0.3))
model.add(keras.layers.Dense(10, activation='softmax'))
return model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
AttributeError Traceback (most recent call last)
Input In [67], in <cell line: 1>()
----> 1 model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
2 model.summary()
AttributeError: 'function' object has no attribute 'compile'
Answers:
The function and variable have the same name, causing the issue. You can either rename the variable or the function.
def model(input_shape):
model = keras.Sequential()
model.add(keras.layers.LSTM(64, input_shape=(1,9), return_sequences=True))
model.add(keras.layers.LSTM(64))
model.add(keras.layers.Dense(64, activation='relu'))
model.add(keras.layers.Dropout(0.3))
model.add(keras.layers.Dense(10, activation='softmax'))
return model
my_model = model() # your initializer
my_model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
my_model.summary()
You’ve used the word model
as a name for a function. That is permissible (because model
is not a reserved word in Python), but it means that when you use model.compile()
, the interpreter assumes you want to call an attribute of what you called "model", and there is no such attribute there.
Solution: Give the function another name so that the word "model" only refers to the model object, which has a compile
method you can call. Or, conversely, use "model" for the function if you want to, but then give the model another name, and call compile()
on that.
I’ve been facing this attribute error, any ideas how I can solve it?
def model(input_shape):
model = keras.Sequential()
model.add(keras.layers.LSTM(64, input_shape=(1,9), return_sequences=True))
model.add(keras.layers.LSTM(64))
model.add(keras.layers.Dense(64, activation='relu'))
model.add(keras.layers.Dropout(0.3))
model.add(keras.layers.Dense(10, activation='softmax'))
return model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
AttributeError Traceback (most recent call last)
Input In [67], in <cell line: 1>()
----> 1 model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
2 model.summary()
AttributeError: 'function' object has no attribute 'compile'
The function and variable have the same name, causing the issue. You can either rename the variable or the function.
def model(input_shape):
model = keras.Sequential()
model.add(keras.layers.LSTM(64, input_shape=(1,9), return_sequences=True))
model.add(keras.layers.LSTM(64))
model.add(keras.layers.Dense(64, activation='relu'))
model.add(keras.layers.Dropout(0.3))
model.add(keras.layers.Dense(10, activation='softmax'))
return model
my_model = model() # your initializer
my_model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
my_model.summary()
You’ve used the word model
as a name for a function. That is permissible (because model
is not a reserved word in Python), but it means that when you use model.compile()
, the interpreter assumes you want to call an attribute of what you called "model", and there is no such attribute there.
Solution: Give the function another name so that the word "model" only refers to the model object, which has a compile
method you can call. Or, conversely, use "model" for the function if you want to, but then give the model another name, and call compile()
on that.