4

在使用TFLearn創建卷積神經網絡時,如何解決混淆矩陣存在問題。我到目前爲止的代碼如下:TfLearn混淆矩陣訓練在std :: bad_alloc上終止

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的實例後「 什麼()的std :: bad_alloc的 中止(核心轉儲)

任何意見將是巨大的,新TFLearn。

+0

您可以添加一些或您的數據或代碼來生成相同形狀的合成數據嗎?當它包含MWE時,回答問題要容易得多。 – ncfirth

+0

也可以包含完整的堆棧跟蹤,可能更容易診斷問題來自何處。 – ncfirth

+0

我正在使用的數據集是http://www.pitt.edu/~emotion/um-spread.htm。每個圖像在3個通道上爲240 * 320。從數據集中隨機抽取9679張圖像進行測試。 – hudsond7

回答

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應該研究一種簡化的方法來生成混淆矩陣,這樣其他人就不會有同樣的問題。