How do I solve a "TypeError: __array__() takes 1 positional argument but 2 were given" Keras error?

I am trying to build a multi-input CNN using Keras/Tensorflow. I have 5000 'smile' training inputs which are 1D arrays (shape = (100,)). These inputs have a maximum length of 100. I have 5000 'protein' training inputs which are also 1D arrays (shape = (1500,), which have a maximum length of 1500.

I have the following data types and shapes:

#type(test_protein)#numpy.ndarray of class 'numpy.ndarray' #int32
#type(val_protein)#numpy.ndarray of class 'numpy.ndarray' #int32
#type(train_protein)#numpy.ndarray of class 'numpy.ndarray' #int32

#type(train_smile)#numpy.ndarray of class 'numpy.ndarray' #int32
#type(val_smile)#numpy.ndarray of class 'numpy.ndarray' #int32
#type(test_smile) #)#numpy.ndarray of class 'numpy.ndarray' #int32

#type(val_labels)#numpy.ndarray of class 'numpy.float64'
#type(test_labels)#numpy.ndarray of class 'numpy.float64'
#type(train_labels)#numpy.ndarray of class 'numpy.float64'

I have built the following Keras CNN model:

maximum_SMILES_length=100
maximum_amino_acid_sequence_length=1500
NUM_FILTERS = 32
FILTER_LENGTH1 = 4
FILTER_LENGTH2 = 8
XDinput = Input(shape=(maximum_SMILES_length,1)) 
XTinput = Input(shape=(maximum_amino_acid_sequence_length,1)) 

encode_smiles= Conv1D(filters=NUM_FILTERS, kernel_size=FILTER_LENGTH1,  activation='relu', padding='valid',  strides=1)(XDinput)
encode_smiles = Conv1D(filters=NUM_FILTERS*2, kernel_size=FILTER_LENGTH1,  activation='relu', padding='valid',  strides=1)(encode_smiles)
encode_smiles = Conv1D(filters=NUM_FILTERS*3, kernel_size=FILTER_LENGTH1,  activation='relu', padding='valid',  strides=1)(encode_smiles)
encode_smiles = GlobalMaxPooling1D()(encode_smiles) #pool_size=pool_length[i]


encode_protein = Conv1D(filters=NUM_FILTERS, kernel_size=FILTER_LENGTH2,  activation='relu', padding='valid',  strides=1)(XTinput)
encode_protein = Conv1D(filters=NUM_FILTERS*2, kernel_size=FILTER_LENGTH2,  activation='relu', padding='valid',  strides=1)(encode_protein)
encode_protein = Conv1D(filters=NUM_FILTERS*3, kernel_size=FILTER_LENGTH2,  activation='relu', padding='valid',  strides=1)(encode_protein)
encode_protein = GlobalMaxPooling1D()(encode_protein)



encode_interaction = keras.layers.concatenate([encode_smiles, encode_protein])
    
FC1 = Dense(1024, activation='relu')(encode_interaction)
FC2 = Dropout(0.1)(FC1)
FC2 = Dense(1024, activation='relu')(FC2)
FC2 = Dropout(0.1)(FC2)
FC2 = Dense(512, activation='relu')(FC2)


predictions = Dense(1, kernel_initializer='normal')(FC2) 

interactionModelA = Model(inputs=[XDinput, XTinput], outputs=[predictions])

!pip install lifelines
from lifelines.utils import concordance_index

interactionModelA.compile(optimizer='adam', loss='mean_squared_error', metrics=[concordance_index]) 

epochs=100

history = interactionModelA.fit(x=[train_smile, train_protein],y=train_labels,
                                validation_data=([val_smile, val_protein],val_labels),
                                epochs=epochs,

I get the following error message:

TypeError: in user code:

    /usr/local/lib/python3.7/dist-packages/keras/engine/training.py:830 train_function  *
        return step_function(self, iterator)
    /usr/local/lib/python3.7/dist-packages/keras/engine/training.py:813 run_step  *
        outputs = model.train_step(data)
    /usr/local/lib/python3.7/dist-packages/keras/engine/training.py:775 train_step  *
        self.compiled_metrics.update_state(y, y_pred, sample_weight)
    /usr/local/lib/python3.7/dist-packages/keras/engine/compile_utils.py:457 update_state  *
        metric_obj.update_state(y_t, y_p, sample_weight=mask)
    /usr/local/lib/python3.7/dist-packages/keras/metrics.py:169 decorated  *
        update_op = update_state_fn(*args, **kwargs)
    /usr/local/lib/python3.7/dist-packages/keras/metrics.py:155 update_state_fn  *
        return ag_update_state(*args, **kwargs)
    /usr/local/lib/python3.7/dist-packages/keras/metrics.py:641 update_state  *
        matches = ag_fn(y_true, y_pred, **self._fn_kwargs)
    /usr/local/lib/python3.7/dist-packages/lifelines/utils/concordance.py:91 concordance_index  *
        event_times, predicted_scores, event_observed = _preprocess_scoring_data(event_times, predicted_scores, event_observed)
    /usr/local/lib/python3.7/dist-packages/lifelines/utils/concordance.py:274 _preprocess_scoring_data  *
        event_times = np.asarray(event_times, dtype=float)
    /usr/local/lib/python3.7/dist-packages/numpy/core/_asarray.py:83 asarray  **
        return array(a, dtype, copy=False, order=order)

    TypeError: __array__() takes 1 positional argument but 2 were given

I am not sure what is causing the error. Have I incorrectly defined Input(shape=.... Or is it to do with the structure of my data?

Topic cnn keras tensorflow bioinformatics neural-network

Category Data Science

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.