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应该研究一种简化的方法来生成混淆矩阵,这样其他人就不会有同样的问题。