Как правильно объединить последовательную модель Keras со стратегией мультикласса / мультиметки OneVsRestClassifier с помощью scikit-learn - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь объединить последовательную модель keras со стратегией scikit-learn OneVsRestClassifier для мультикласса / мультикласса для решения проблемы нескольких классов (целевые классы = 4), но я продолжаю получая следующую ошибку:

BrokenProcessPool: не удалось удалить сериализацию результата. Пожалуйста, убедитесь, что объекты, возвращаемые функцией, всегда доступны для выбора.

Мой код следующий:

import keras
import random
import pickle
import numpy as np
import pandas as pd
import multiprocessing as mp
from keras.layers import Dense
from keras.models import Sequential
from keras.utils import to_categorical
from sklearn.preprocessing import LabelEncoder
from sklearn.multiclass import OneVsRestClassifier
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import cross_val_score, train_test_split


def dnn_model(n_comps):
    model = Sequential()
    model.add(Dense(n_comps, input_dim=n_comps, activation='relu'))
    model.add(Dense(2, activation='softmax'))
    # optimizer
    opt =  keras.optimizers.Adam(lr=1e-5)
    # compile model
    model.compile(loss="categorical_crossentropy", 
                  optimizer=opt, 
                  metrics=['accuracy'])
    return model


if __name__ == '__main__':
    # init vars
    data_fname = 'data/ressources/data.csv'

    # get data
    data, column_names = get_and_format_dataset(data_fname)

    # balance data set
    balanced_data, X, y, column_names = balance_dataset(data)

    # encode the classification labels
    le = LabelEncoder()
    yy = to_categorical(le.fit_transform(y))

    # split data
    x_train, x_test, y_train, y_test = train_test_split(X, yy,
                                                        test_size=0.3,
                                                        random_state=random.seed(42),
                                                        shuffle=True)
    # init model and strategy
    model = KerasClassifier(build_fn=dnn_model, n_comps=X.shape[1])
    clf = OneVsRestClassifier(model, n_jobs=mp.cpu_count())

    # print model architecture summary
    print(clf)

    # fit the model
    clf.fit(x_train, y_train)

    # score using cross-validation
    cval_scores = cross_val_score(clf, x_train, y_train, cv=5)
    test_score = clf.score(X=x_test, y=y_test)

    # print scores
    print("----------------------------------------------------------")
    print("OneVsRest + DNN")
    print("----------------------------------------------------------")
    print("Cross-validation scores : ", np.round(cval_scores, 3))
    print("Testing score           : ", np.round(test_score, 3))
    print("----------------------------------------------------------")

На основе полной трассировки возникает ошибка при попытке подгонки OneVsRestClassifier:

Epoch 1/1

32/16203 [......................... .....] - ETA: 38 с - потери: 8,7858 - точность: 0,7812Эпоха 1/1

32/16203 [.................. ............] - ETA: 36 с - потери: 11,3218 - точность: 0,7188 1856/16203 [==> .................. .........] - ETA: 0 с - потери: 11,7965 - точность: 0,7532 2080/16203 [==> ..................... ......] - ETA: 0s - потеря: 8.6219 - точность: 0.7543 Epoch 1/1

32/16203 [................. .............] - ETA: 41 с - потери: 7,5660 - точность: 0,5625 3520/16203 [=====> .............. ..........] - ETA: 0 с - потери: 11,9874 - точность: 0,7457 3808/16203 [======> ................ .......] - ETA: 0 с - потери: 8,6521 - точность: 0,7474 1728/16203 [==> ....................... ....] - ETA: 1с - проигрыш: 7.4113 - точность: 0,5747 Эпоха 1/1

32/16203 [..............................] - ETA: 43 с - потеря: 2,0093 - точность: 0,6875 4896/16203 [========> .....................] - ETA: 0 с - потеря: 11,5238 - точность: 0,7502 5792/16203 [=========> ....................] - ETA: 0 с - потеря: 8.2948 - точность: 0,7472 3616/16203 [=====> ........................] - ETA: 0 с - потери: 7,1314 - точность : 0,5819 1632/16203 [==> ...........................] - ETA: 1 с - потери: 1,8139 - точность: 0,7537 6976 / 16203 [===========> ..................] - ETA: 0 с - потеря: 11,2217 - точность: 0,7491 7552/16203 [ ============> .................] - ETA: 0s - потеря: 7.9051 - точность: 0.7491 5600/16203 [=== ======> ....................] - ETA: 0s - потеря: 7.0072 - точность: 0.5779 3392/16203 [=====> ........................] - ETA: 0 с - потеря: 1,5428 - точность: 0,7473 8832/16203 [========== ======> ..............] - ETA: 0s - потеря: 10.9540 - точность: 0.7488 8288/16203 [============ ==> ...............] - ETA: 0s - потеря: 7.7416 - accur acy: 0,7510 7104/16203 [============> .................] - ETA: 0s - потери: 6,8722 - точность: 0,5739 5120/16203 [========> .....................] - ETA: 0 с - потеря: 1,3703 - точность: 0,7418 10816/16203 [===================> ..........] - ETA: 0s - потеря: 10.5214 - точность: 0.7528 9376/16203 [== ==============> .............] - ETA: 0s - потеря: 7.5754 - точность: 0.7507 8960/16203 [===== ==========> ..............] - ETA: 0s - потеря: 6.7195 - точность: 0.5692 7072/16203 [======== ====> .................] - ETA: 0s - потеря: 1.2487 - точность: 0.7340 12768/16203 [=========== ===========> .......] - ETA: 0s - потеря: 10.2941 - точность: 0.7508 10112/16203 [============== ===> ............] - ETA: 0 с - потеря: 7,4674 - точность: 0,7501 10784/16203 [================= => ...........] - ETA: 0 с - потеря: 6,5264 - точность: 0,5682 8992/16203 [===============> .... ..........] - ETA: 0s - потеря: 1.1557 - точность: 0.7323 14784/16203 [======================= ===> ...] - ETA: 0 с - потери: 9,9792 - точность: 0,7508 12736/16203 [ ======================> .......] - ETA: 0s - потеря: 6.3390 - точность: 0.5672 11072/16203 [=== ================> ..........] - ETA: 0s - потеря: 7.2784 - точность: 0.7499 9952/16203 [====== ===========> ............] - ETA: 0s - потеря: 1.1214 - точность: 0.7330 16203/16203 [========= =====================] - 1 с 32us / step - потеря: 9.7941 - точность: 0.7502

14496/16203 [===== ====================> ....] - ETA: 0s - потеря: 6.1361 - точность: 0.5697 12704/16203 [======== ==============> .......] - ETA: 0s - потеря: 7.0173 - точность: 0.7489 11776/16203 [====================> .........] - ETA: 0s - потеря: 1.0704 - точность: 0.7321 16203/16203 [== ============================] - 1с 33us / шаг - потеря: 5.9897 - точность: 0.5689

14912 / 16203 [==========================> ...] - ETA: 0s - потеря: 6.6258 - точность: 0.7475_RemoteTraceback: '' ' Трассировка (последний вызов был последним): файл "/home/ayoub/anaconda3/lib/python3.7/site-packages/joblib/externals/loky/process_executor.py", строка 624, в _queue_management_worker result_item = result_reader.recv () Файл "/home/ayoub/anaconda3/lib/python3.7/multiprocessing/connection.py", строка 251, в recv return _ForkingPickler.loads (buf.getbuffer ()) File "/ home / ayoub / anaconda3 /lib/python3.7/site-packages/keras/engine/network.py ", строка 1334, в setstate модель = файл сохранения.unpickle_model (состояние)" / home / ayoub / anaconda3 / lib / python3 .7 / site-packages / keras / engine / save.py ", строка 604, в unpickle_model return _deserialize_model (h5dict) Файл" /home/ayoub/anaconda3/lib/python3.7/site- пакеты / keras / двигатель / save.py ", строка 274, в _deserialize_model model = model_from_config (model_config, custom_objects = custom_objects) Файл" /home/ayoub/anaconda3/lib/python3.7/site-packages/keras/engine/saving.py ", строка 627, в файле model_from_config вернуть десериализацию (config, custom_objects = custom_objects) файл "/home/ayoub/anaconda3/lib/python3.7/site-packages/keras/layers/init.py", строка 168, в десериализации printable_module_name = 'layer') Файл "/home/ayoub/anaconda3/lib/python3.7/site-packages/keras/utils/generic_utils.py", строка 147, в списке deserialize_keras_object (custom_objects). items ()))) Файл "/home/ayoub/anaconda3/lib/python3.7/site-packages/keras/engine/sequential.py", строка 302, в файле from_config model.add (layer) "/ home / ayoub / anaconda3 / lib / python3 .7 / site-packages / keras / engine / sequential.py ", строка 162, добавить имя = layer.name + '_input') файл" / home / ayoub / anaconda3 /lib/python3.7/site-packages/keras/engine/input_layer.py ", строка 178, в поле Input input_tensor = тензор) Файл" / home / ayoub / anaconda3 / lib / * 10 74 * .7 / site-packages / keras / legacy / interfaces.py ", строка 91, в оболочке возвращает удовольствие c (* args, ** kwargs) Файл" / home / ayoub / anaconda3 / lib / python3 .7 / site-packages / keras / engine / input_layer.py ", строка 87, в init name = self.name) Файл" /home/ayoub/anaconda3/lib/python3.7/ site-packages / keras / backend / tenorflow_backend.py ", строка 73, в symbolic_fn_wrapper, если _SYMBOLIC_SCOPE.value: AttributeError: '_thread._local' объект не имеет атрибута 'value' '' '

Вышеуказанное исключение было Непосредственная причина следующего исключения:

Трассировка (последний последний вызов):

Файл "/home/ayoub/Desktop/projects/Emotions_recognition_project/examples.py", строка 96, в train_hybrid_model (data_fname = 'data / ressources / data.csv')

Файл "/home/ayoub/Desktop/projects/Emotions_recognition_project/packages/emorec/cross_learning/custom_model.py", строка 139, в Train_hybrid_ .fit (x_train, y_train)

Файл "/home/ayoub/anaconda3/lib/python3.7/site-packages/sklearn/m ulticlass.py ", строка 239, подходит для i, столбец в перечислении (столбцы))

Файл" /home/ayoub/anaconda3/lib/python3.7/site-packages/joblib/parallel .py ", строка 1017, в вызов self.retrieve ()

File" /home/ayoub/anaconda3/lib/python3.7/site-packages/joblib/parallel .py ", строка 909, для получения self._output.extend (job.get (timeout = self.timeout))

Файл" /home/ayoub/anaconda3/lib/python3.7/site -packages / joblib / _parallel_backends.py ", строка 562, в wrap_future_result возвращать future.result (timeout = timeout)

Файл" /home/ayoub/anaconda3/lib/python3.7/concurrent/futures /_base.py ", строка 435, в результате возвращает self .__ get_result ()

File" / home / ayoub / anaconda3 / lib / python3. 7 / concurrent / futures / _base.py ", строка 384, в __get_result поднять self._exception

BrokenProcessPool: не удалось удалить сериализацию результата. Убедитесь, что объекты, возвращаемые функцией, всегда доступны для выбора.

Любые предложения о том, как это исправить, очень ценятся. Заранее спасибо:)

...