未来杯总结5--利用已有模型predict top3

    在网上找了好久怎样输出topn,发现predict可以直接输出所有类别的概率。只是当时程序中有bug,在predict中只有一个1其他的都是0。

    1.获取数据并转为numpy,这里增加一个yy[]是为了和之后的top3为相同维度方便合并,存储。

xx = []
yyy = []
zz = []
i = 0
#get the dataset
for filename in os.listdir(r"./data"):
    x1 = np.array(Image.open("./data/" + filename).convert('L'))
    x2 = misc.imresize(x1, [224, 224], interp = 'nearest')
    xx.append(x2)
    name = filename.split('.', 1)
    yy = []
    yy.append(name[0])
    yyy.append(yy)
    #if i > 10:
    #    break
    #i = i + 1
#list to numpy
x = np.array(xx)
y = np.array(yyy)

2.调整图片,这里reshape一定要有不然会出错,这里也卡了好久。还有就是在这个地方出bug,当时没有加上astype,得不出top3,又加上比赛时间快截止了,差点就崩溃了,所以要调整图片为0-1,

参考博客https://blog.csdn.net/DocStorm/article/details/58593682

x = x.reshape(x.shape[0], 224, 224,1)
x = x.astype('float32')/255

3.读取模型参考博客https://blog.csdn.net/lujiandong1/article/details/55806435

model = load_model('model.h5')

4.模型predict,并且将predict的最大的三个取出来存到list中,最后转为numpy,argmax可以将最大值的索引得出,得出之后将这个值设为-1,方便找到第二大的值。

predict = model.predict(x)
length = len(predict)
#print(length)
for i in range(length):
    a = []
    for j in range(3):
        pos = np.argmax(predict[i])
        a.append(pos + 1)
        predict[i][pos] = -1
    zz.append(a)
z = np.array(zz)

5.将数据集的名字和对应图片的top3存到一个numpy数组中,这里也卡了一段时间,因为对python了解不深,所以现在准备系统地学一下人工智能从python开始。axis,一行一行的对应。

out = np.append(y,z, axis = 1)
6.将数据保存为csv格式
data = pd.DataFrame(out)
data.to_csv('dat.csv')

猜你喜欢

转载自blog.csdn.net/YI__JIA/article/details/80171978