Обучение TfLearn Confusion Matrix прекращено на std::bad_alloc

Возникли проблемы с тем, как получить матрицу путаницы при использовании TFLearn для создания сверточной нейронной сети. Код, который у меня есть до сих пор, выглядит следующим образом:

 from __future__ import division, print_function, absolute_import

    import tflearn
    from tflearn.layers.core import input_data, dropout, fully_connected
    from tflearn.layers.conv import conv_2d, max_pool_2d
    from tflearn.layers.normalization import local_response_normalization
    from tflearn.layers.estimator import regression

    from sklearn.metrics import confusion_matrix
    import h5py

    hdf5Test = h5py.File('/path', 'r')

    X = hdf5Test['X']
    Y = hdf5Test['Y']

    # Building convolutional network
    network = input_data(shape=[None, 240, 320, 3], name='input')
    network = conv_2d(network, 32, 3, activation='relu', regularizer="L2")
    network = max_pool_2d(network, 2)
    network = local_response_normalization(network)
    network = conv_2d(network, 64, 3, activation='relu', regularizer="L2")
    network = max_pool_2d(network, 2)
    network = local_response_normalization(network)
    network = fully_connected(network, 128, activation='tanh')
    network = dropout(network, 0.8)
    network = fully_connected(network, 256, activation='tanh')
    network = dropout(network, 0.8)
    network = fully_connected(network, 2, activation='softmax')
    network = regression(
      network,
      optimizer='sgd',
      learning_rate=0.01,
      loss='categorical_crossentropy',
      name='target'
    )

    # Training
    model = tflearn.DNN(network, tensorboard_verbose=0)
    model.load('/path.tflearn')

    predictions = model.predict(X)
    print(confusion_matrix(Y, predictions))

Каждый раз, когда я пытаюсь запустить этот код, мне выдается следующее сообщение об ошибке:

завершение вызывается после создания экземпляра 'std::bad_alloc' what(): std::bad_alloc Aborted (дамп ядра)

Любой совет был бы замечательным, новичок в TFLearn.


person hudsond7    schedule 25.07.2017    source источник
comment
Можете ли вы добавить некоторые или свои данные, или код для генерации синтетических данных той же формы? Гораздо легче ответить на вопрос, когда он включает MWE.   -  person piman314    schedule 01.08.2017
comment
Также вы можете включить полную трассировку стека, может быть проще диагностировать, откуда возникла проблема.   -  person piman314    schedule 01.08.2017
comment
@ncfirth Это полная трассировка стека, которую мне дали.   -  person hudsond7    schedule 01.08.2017


Ответы (1)


В конце концов выяснилось, что это было связано с размером данных, которые я пытался предсказать. Я исправил это, вставив его в цикл:

# Predict Classes
predictions = []
count = 0
length = len(X)
for line in X:
  print('Line ' + str(count) + ' of ' + str(length))
  tmp = model.predict_label([line])
  predictions.append(tmp[0])
  count += 1

С некоторым форматированием я смог использовать Sklearn для создания матрицы путаницы:

predictedClasses = np.argmin(predictions, axis=1)
actualClasses = np.argmax(Y, axis=1)
print(confusion_matrix(actualClasses, predictedClasses))

Этот подход сработал для меня и может сработать для вас... Я думаю, что TFLearn следует изучить упрощенный подход к созданию матрицы путаницы, чтобы у других не было такой же проблемы.

person hudsond7    schedule 02.08.2017