【问题标题】:Plot all predictions of the model multi-label classification绘制模型多标签分类的所有预测
【发布时间】:2020-07-17 02:18:58
【问题描述】:

我想绘制我正在尝试训练的模型的输入和输出:

输入数据形状:

processed_data.shape
(100, 64, 256, 2)

它的样子:

processed_data
array([[[[ 1.93965047e+04,  8.49532852e-01],
         [ 1.93965047e+04,  8.49463479e-01],

输出数据形状:

output.shape
(100, 6)

输出基本上是每个标签的概率

output = model.predict(processed_data)

output
array([[0.53827614, 0.64929205, 0.48180097, 0.50065327, 0.43016508,
        0.50453395]

我想以某种方式为处理数据中的每个实例绘制类的预测概率(因为这是多标签分类问题),但我正在努力这样做。 那么我如何绘制处理后的数据,但不确定如何绘制每个输入实例的概率。我希望能够在每个输出上标记所有 6 个可能的类。我有点失落…… 有什么建议吗?

到目前为止,我只绘制输入: shape = output.shape[0]

for i in range(it):
    fig,axs = plt.subplots(5,2,figsize=(10,10))

    if isinstance(data,list): 
        inp = data[i]
        outp = output[i]
    else: 
        inp = data
        outp = output

    for j in range(5):
        r = randint(0,shape)
        axs[j,0].imshow(inp[r,...,0]); 
        axs[j,0].title.set_text('Input {}'.format(r))

【问题讨论】:

    标签: python matplotlib neural-network conv-neural-network multilabel-classification


    【解决方案1】:

    现在我更好地理解了这个问题,我编辑了我的回复。此代码将绘制图像和输出。

    import matplotlib.image as mpimg
    import numpy as np
    import matplotlib.pyplot as plt
    
    img_paths = ['../python/imgs/Image001.png',
                 '../python/imgs/Image002.png',
                 '../python/imgs/Image003.png',
                 '../python/imgs/Image004.png',
                 '../python/imgs/Image005.png']
    
    input  = np.array([mpimg.imread(path) for path in img_paths])
    output = np.random.rand(5, 6)
    
    print(input.shape, output.shape)
    
    fig, axs = plt.subplots(2, 5, figsize=(8, 4), sharey = 'row')
    
    for i, sample in enumerate(range(5)):
        o = output[sample]
    
        axs[0,i].set_title(f'Sample {sample + 1}')
        axs[0,i].imshow(input[i,:])
        axs[0,i].axis('off')
    
        axs[1,i].bar(range(6), o)
        axs[1,i].set_xticks(range(6))
        axs[1,i].set_xticklabels([f'{i+1}' for i in range(6)])
    
    plt.show()
    

    输出:

    (5, 1510, 2560, 4) (5, 6)
    

    重要的部分是plt.subplots 调用,您可以在其中创建您喜欢的绘图网格(如果您想实际绘制所有 100 张图像,您可能更喜欢垂直布局)。

    【讨论】:

    • 嘿,非常感谢您的帮助。对不起,如果我的问题不是很清楚。我实际上想将这些预测与输入同时绘制(所以我可以立即检查)它们是否良好。您可能对如何做到这一点有任何建议吗?或者也许只是在已经存在的输入图(我上面有)上绘制结果?非常感谢您的帮助! @l_l_l_l_l_l_l_l
    • @saraherceg 谢谢,我想我更好地理解了这个问题。看看我的编辑。
    • 非常感谢您的帮助和详细的示例!对此,我真的非常感激!帮了大忙!
    猜你喜欢
    • 2019-05-29
    • 2021-04-21
    • 1970-01-01
    • 2019-05-16
    • 2014-03-12
    • 2020-11-06
    • 2019-09-09
    • 1970-01-01
    • 2015-02-01
    相关资源
    最近更新 更多