首页 > 解决方案 > ValueError:发现样本数量不一致的输入变量:[853, 854]

问题描述

我正在处理分类任务。我收到了这个错误:

ValueError:发现样本数量不一致的输入变量:[853, 854]。

854 是 的大小,y_pred853 是 的大小y_true。不知道为什么大小不一y_truey_pred。虽然其中的大小validation_data是要获取的输入y_pred并且y_true是 854。

我在这一行得到了错误:

tp,fp,tn,fn = perf_measure(y_true,y_pred)

我不知道如何解决这个错误,任何帮助将不胜感激。

我工作了 4 天来解决这个错误。

这是代码:

def generate_y_true(indexPat, paths, start=0, end=100):
    y_true = []
    from_=int(len(paths)/100*start)
    to_=int(len(paths)/100*end)
    for i in range(from_, int(to_)):
        f=paths[i]
        x = np.load(PathSpectogramFolder+f)
        x = np.expand_dims(np.expand_dims(x, axis=0), axis = 0)
        x = x.transpose(0, 2, 3, 1)
        if('P' in f):
            y_true.extend([1]*x.shape[0])
        else:
            y_true.extend([0]*x.shape[0])
    return y_true

def perf_measure(y_actual, y_hat):
    TP = 0
    FP = 0
    TN = 0
    FN = 0

    for i in range(len(y_hat)): 
        if y_actual[i]==y_hat[i]==1:
           TP += 1
        if y_hat[i]==1 and y_actual[i]!=y_hat[i]:
           FP += 1
        if y_actual[i]==y_hat[i]==0:
           TN += 1
        if y_hat[i]==0 and y_actual[i]!=y_hat[i]:
           FN += 1
    return(TP, FP, TN, FN)

y_true = generate_y_true(indexPat, validation_data)

tp,fp,tn,fn=perf_measure(y_true,y_pred) 

标签: pythonkerasdeep-learningconv-neural-networkprediction

解决方案


虽然我无法更全面地了解代码,但我怀疑错误来自这里:

 from_=int(len(paths)/100*start)
 to_=int(len(paths)/100*end)

使用这种除法,您可能会错过一个索引(853 而不是 854),而不是 854,而是得到 853。

同时在这个for循环中:

for i in range(from_, int(to_))

记住你没有达到上限区间int(to_),for循环循环直到int(to_)-1

我希望它可以帮助你解决你的问题。


推荐阅读