Reputation: 5095
I am training a Keras model with df
of shape (921, 10170)
and code below(training data X is divided into 2 segments because the different nature of the data):
# Part 1:
X = df.iloc[:,0:10165]
X = X.to_numpy()
X = X.reshape([X.shape[0], X.shape[1],1])
X_train_1 = X[:,0:10080,:]
X_train_2 = X[:,10080:10165,:].reshape(921,85)
Y = df.iloc[:,10168:10170]
Y = Y.to_numpy()
def my_model():
inputs_1 = keras.Input(shape=(10080, 1))
layer1 = Conv1D(64, 14)(inputs_1)
layer2 = layers.MaxPool1D(5)(layer1)
layer3 = Conv1D(64, 14)(layer2)
layer4 = layers.GlobalMaxPooling1D()(layer3)
inputs_2 = keras.Input(shape=(85,))
layer5 = layers.concatenate([layer4, inputs_2])
layer6 = Dense(128, activation='relu')(layer5)
layer7 = Dense(2, activation='softmax')(layer6)
model_2 = keras.models.Model(inputs = [inputs_1, inputs_2], output = [layer7])
adam = keras.optimizers.Adam(lr = 0.0001)
model_2.compile(loss='categorical_crossentropy', optimizer=adam, metrics=['acc'])
return model_2
# convert one_hot encoded labels to categorical labels for skf
Y_cat = np.argmax(Y, axis=1)
n_folds = 5
skf = StratifiedKFold(n_splits=n_folds, shuffle=True)
skf = skf.split(X_train_1, Y_cat)
cv_score = []
# Part 2
for i, (train, test) in enumerate(skf):
print("Running Fold", i+1, "/", n_folds)
my_model.fit([X_train_1[train], X_train_2[train]], Y[train], epochs=150, batch_size=10)
result = my_model.evaluate([X_train_1[test], X_train_2[test]], Y[test])
cv_score.append(result[1])
keras.backend.clear_session()
caught error
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-34-226dfd37f356> in <module>
68
69 print("Running Fold", i+1, "/", n_folds)
---> 70 my_model.fit([X_train_1[train], X_train_2[train]], Y[train], epochs=150, batch_size=10)
71 result = my_model.evaluate([X_train_1[test], X_train_2[test]], Y[test])
AttributeError: 'function' object has no attribute 'fit'
Tried solution from this answer but still didn't work. See error below:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-36-45c596dbb5bf> in <module>
68
69 print("Running Fold", i+1, "/", n_folds)
---> 70 my_model().fit([X_train_1[train], X_train_2[train]], Y[train], epochs=150, batch_size=10)
71 result = my_model.evaluate([X_train_1[test], X_train_2[test]], Y[test])
<ipython-input-36-45c596dbb5bf> in my_model()
45 layer7 = Dense(2, activation='softmax')(layer6)
46
---> 47 model_2 = keras.models.Model(inputs = [inputs_1, inputs_2], output = [layer7])
49 adam = keras.optimizers.Adam(lr = 0.0001)
~\AppData\Roaming\Python\Python38\site-packages\tensorflow\python\training\tracking\base.py in _method_wrapper(self, *args, **kwargs)
455 self._self_setattr_tracking = False # pylint: disable=protected-access
456 try:
--> 457 result = method(self, *args, **kwargs)
458 finally:
459 self._self_setattr_tracking = previous_value # pylint: disable=protected-access
~\AppData\Roaming\Python\Python38\site-packages\tensorflow\python\keras\engine\training.py in __init__(self, *args, **kwargs)
--> 261 generic_utils.validate_kwargs(kwargs, {'trainable', 'dtype', 'dynamic',
262 'name', 'autocast'})
263 super(Model, self).__init__(**kwargs)
~\AppData\Roaming\Python\Python38\site-packages\tensorflow\python\keras\utils\generic_utils.py in validate_kwargs(kwargs, allowed_kwargs, error_message)
776 for kwarg in kwargs:
777 if kwarg not in allowed_kwargs:
--> 778 raise TypeError(error_message, kwarg)
779
780
TypeError: ('Keyword argument not understood:', 'inputs')
The issue is that this code was working before. Had any functions been deprecated? What dose the error mean?
Edit 1 :
Also I tried to replace Part 2 with code below:
for i, (train, test) in enumerate(skf):
model_2 = my_model()
print("Running Fold", i+1, "/", n_folds)
model_2.fit([X_train_1[train], X_train_2[train]], Y[train], epochs=150, batch_size=10)
result = model_2.evaluate([X_train_1[test], X_train_2[test]], Y[test])
cv_score.append(result[1])
keras.backend.clear_session()
and caught the same error:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-43-6fcd0e23bb77> in <module>
---> 67 model_2 = my_model()
68
69 print("Running Fold", i+1, "/", n_folds)
<ipython-input-43-6fcd0e23bb77> in my_model()
45 layer7 = Dense(2, activation='softmax')(layer6)
46
---> 47 model_2 = keras.models.Model(inputs = [inputs_1, inputs_2], output = [layer7])
48
49 adam = keras.optimizers.Adam(lr = 0.0001)
~\AppData\Roaming\Python\Python38\site-packages\tensorflow\python\training\tracking\base.py in _method_wrapper(self, *args, **kwargs)
455 self._self_setattr_tracking = False # pylint: disable=protected-access
456 try:
--> 457 result = method(self, *args, **kwargs)
458 finally:
459 self._self_setattr_tracking = previous_value # pylint: disable=protected-access
~\AppData\Roaming\Python\Python38\site-packages\tensorflow\python\keras\engine\training.py in __init__(self, *args, **kwargs)
--> 261 generic_utils.validate_kwargs(kwargs, {'trainable', 'dtype', 'dynamic',
262 'name', 'autocast'})
263 super(Model, self).__init__(**kwargs)
~\AppData\Roaming\Python\Python38\site-packages\tensorflow\python\keras\utils\generic_utils.py in validate_kwargs(kwargs, allowed_kwargs, error_message)
776 for kwarg in kwargs:
777 if kwarg not in allowed_kwargs:
--> 778 raise TypeError(error_message, kwarg)
779
780
TypeError: ('Keyword argument not understood:', 'inputs')
Edit 2:
I tried to replace
inputs_2 = keras.Input(shape=(85,))
with
inputs_2 = keras.Input(shape=(85,1))
and it returned:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-49-dc0765c04da9> in <module>
64 for i, (train, test) in enumerate(skf):
65
---> 66 model_2 = my_model()
67
68 print("Running Fold", i+1, "/", n_folds)
<ipython-input-49-dc0765c04da9> in my_model()
42 # inputs_2 = keras.Input(shape=(85, 1))
43 inputs_2 = keras.Input(shape=(85,1))
---> 44 layer5 = layers.concatenate([layer4, inputs_2])
45 layer6 = Dense(128, activation='relu')(layer5)
46 layer7 = Dense(2, activation='softmax')(layer6)
~\AppData\Roaming\Python\Python38\site-packages\tensorflow\python\keras\layers\merge.py in concatenate(inputs, axis, **kwargs)
929 A tensor, the concatenation of the inputs alongside axis `axis`.
930 """
--> 931 return Concatenate(axis=axis, **kwargs)(inputs)
932
933
~\AppData\Roaming\Python\Python38\site-packages\tensorflow\python\keras\engine\base_layer.py in __call__(self, *args, **kwargs)
923 # >> model = tf.keras.Model(inputs, outputs)
924 if _in_functional_construction_mode(self, inputs, args, kwargs, input_list):
--> 925 return self._functional_construction_call(inputs, args, kwargs,
926 input_list)
927
~\AppData\Roaming\Python\Python38\site-packages\tensorflow\python\keras\engine\base_layer.py in _functional_construction_call(self, inputs, args, kwargs, input_list)
1096 # Build layer if applicable (if the `build` method has been
1097 # overridden).
-> 1098 self._maybe_build(inputs)
1099 cast_inputs = self._maybe_cast_inputs(inputs, input_list)
1100
~\AppData\Roaming\Python\Python38\site-packages\tensorflow\python\keras\engine\base_layer.py in _maybe_build(self, inputs)
2641 # operations.
2642 with tf_utils.maybe_init_scope(self):
-> 2643 self.build(input_shapes) # pylint:disable=not-callable
2644 # We must set also ensure that the layer is marked as built, and the build
2645 # shape is stored since user defined build functions may not be calling
~\AppData\Roaming\Python\Python38\site-packages\tensorflow\python\keras\utils\tf_utils.py in wrapper(instance, input_shape)
321 if input_shape is not None:
322 input_shape = convert_shapes(input_shape, to_tuples=True)
--> 323 output_shape = fn(instance, input_shape)
324 # Return shapes from `fn` as TensorShapes.
325 if output_shape is not None:
~\AppData\Roaming\Python\Python38\site-packages\tensorflow\python\keras\layers\merge.py in build(self, input_shape)
508 ranks = set(len(shape) for shape in shape_set)
509 if len(ranks) != 1:
--> 510 raise ValueError(err_msg)
511 # Get the only rank for the set.
512 (rank,) = ranks
ValueError: A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got inputs shapes: [(None, 64), (None, 85, 1)]
Upvotes: 0
Views: 4359
Reputation: 788
In your code, my_model
is a function, so you should change the code like:
model = my_model()
model.fit([X_train_1[train], X_train_2[train]], Y[train], epochs=150, batch_size=10)
result = model.evaluate([X_train_1[test], X_train_2[test]], Y[test])
...
Regarding your updated questions, it is not the identical error. Your model creation code is of some errors. You could try to correct the errors something like as follows:
model_2 = keras.models.Model(inputs = [inputs_1, inputs_2], output = [layer7])
to
model_2 = keras.models.Model(inputs = [inputs_1, inputs_2], outputs = [layer7])
Upvotes: 1