tensorflow用混淆矩阵进行评估

时间:2016-04-30 21:28:17

标签: python computer-vision scikit-learn tensorflow

tensorflow CNN tutorial中,它计算准确性,但我想从中利用混淆矩阵。

我立即想到了三种不同的方法:

  1. 我试着在tensorflow中直接计算预测结果而不是top_k_op,然后我可以利用sklearn。但我失败了,因为它使用了多个线程来计算(line 88);

  2. 我尝试加载训练过的变量并给cifar10.inference新占位符,但又失败了,因为它将batch_image定义为输入(line 225);

  3. 最后一种方法是定义一个新操作来替换line 128

    float floatizeMe(unsigned int myNumba ) {
        //// myNumba comes in as 32 bits or 8 byte  
    
        unsigned int  sign = (myNumba & 0x007fffff) >>31;
        unsigned int  exponent = ((myNumba & 0x7f800000) >> 23)- 0x7F;
        unsigned int  mantissa = (myNumba & 0x007fffff) ;
        float  value = 0;
        float mantissa2; 
    
        cout << endl<< "mantissa is : " << dec << mantissa << endl;
    
        unsigned    int m1 = mantissa & 0x00400000 >> 23;
        unsigned    int m2 = mantissa & 0x00200000 >> 22;
        unsigned    int m3 = mantissa & 0x00080000 >> 21;
        unsigned    int m4 = mantissa & 0x00040000 >> 20;
    
        mantissa2 = m1 * (2 ^ -1) + m2*(2 ^ -2) + m3*(2 ^ -3) + m4*(2 ^ -4);
    
        cout << "\nsign is: " << dec << sign << endl;
        cout << "exponent is : " << dec << exponent << endl;
        cout << "mantissa  2 is : " << dec << mantissa2 << endl;
    
        // if above this number it is negative 
        if ( sign  == 1)
            sign = -1; 
    
        // if above this number it is positive 
        else {
            sign = 1;
        }
    
        value = (-1^sign) * (1+mantissa2) * (2 ^ exponent);
        cout << dec << "Float value is: " << value << "\n\n\n";
    
        return value;
    }
    
    
    
    
      int main()
    {   
        ifstream myfile("input.txt");
        if (myfile.is_open())
        {
            unsigned int a, b,b1; // Hex 
            float c, d, e; // Dec
            int choice; 
    
            unsigned int ex1 = 0;
            unsigned int ex2 = 1;
            myfile >> std::hex;
            myfile >> a >> b ;
            floatizeMe(a);
    myfile.close();
    return 0;
    

    但我找不到合适的操作可以做到这一点。

  4. 这让我困扰了好几天。请帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:3)

只有在运行&#39;推理后才能使用sklearn的confusion_matrix。在所有数据集上。 这意味着,如果要修改eval_only函数,则应将所有分数累积到某个线程安全容器(列表)中。然后在所有线程停止后(第113行),您可以运行单一混淆矩阵计算。

此外,如果您想在图表中执行此操作,TensorFlow最近获得了您可以尝试使用的confusion_matrix op。也就是说,它只适用于批处理,因此您需要增加批处理以获得任何类型的解析或编写自定义聚合器。