在网上找了好久怎样输出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')