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

xiaoxiao2021-02-28  46

    在网上找了好久怎样输出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')
转载请注明原文地址: https://www.6miu.com/read-2621198.html

最新回复(0)