开始搞
注意:这里还是需要 之前训练的模型,所以,上一篇 文章 所做的事情,咱还得做一遍
做好前面 的 重复工作之后,写今天的代码吧
现在 开始 写 13 课 的代码
我就直接 上 代码了
## tt1 : 准备好 数据呀
test_imgs, test_labels = next(test_batches)
## tt2 : 看一看咱们 准备好的数据 是啥样
plotImages(test_imgs)
print(test_labels)
## tt3 : 就开始 预测吧
predictions = model.predict(x=test_batches, steps=len(test_batches), verbose=0)
## tt4 : 看看 本源 的 predictions
print(predictions)
## tt5: 看看 round 之后的 predictions
np.round(predictions)
## tt6 : 肉眼看准确率可不行,咱们用 混淆矩阵
cm = confusion_matrix(y_true=test_batches.classes, y_pred=np.argmax(predictions, axis=-1))
## tt7: 这里 的 test_batches.classes 长什么样呢?
test_batches.classes
## tt8: 本来我们的输出是一个二元组(这叫做one-hot encode),表示某个类别的可能性,现在我们希望 给出 最终答案,所以:
np.argmax(predictions, axis=-1)
print(predections) # 结果证明 np.argmax 不会修改原数组 predictions
## tt9: 从 sklearn 里面 直接拿来的 画图的 函数
def plot_confusion_matrix(cm, classes,
normalize=False,
title='Confusion matrix',
cmap=plt.cm.Blues):
"""
This function prints and plots the confusion matrix.
Normalization can be applied by setting `normalize=True`.
"""
plt.imshow(cm, interpolation='nearest', cmap=cmap)
plt.title(title)
plt.colorbar()
tick_marks = np.arange(len(classes))
plt.xticks(tick_marks, classes, rotation=45)
plt.yticks(tick_marks, classes)
if normalize:
cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
print("Normalized confusion matrix")
else:
print('Confusion matrix, without normalization')
print(cm)
thresh = cm.max() / 2.
for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
plt.text(j, i, cm[i, j],
horizontalalignment="center",
color="white" if cm[i, j] > thresh else "black")
plt.tight_layout()
plt.ylabel('True label')
plt.xlabel('Predicted label')
## tt10: 咱得知道类别
test_batches.class_indices
## tt11: 还等啥,最后一波拿高地,二营长,你他娘的 matplot 呢? 给劳资画!
cm_plot_labels = ['cat','dog']
plot_confusion_matrix(cm=cm, classes=cm_plot_labels, title='Confusion Matrix')
下面 是每个 ttx 的 运行截图,方便以后自己看
tt2 一批测试数据 10个人,长得真帅
tt3 没有输出
因为 verbose = 0
tt4 看看 本源 的 predictions
备注: 这里输出 正好 100 行
tt5: 看看 round 之后的 predictions
tt7: 这里 的 test_batches.classes 长什么样呢?
tt8: 给出类别
运行错误了一次
重新跑 上面 的 红色 按钮 部分,得到 np.argmax() 的返回:
tt10, 知道 class
tt11: 最后画 混淆矩阵 图片
可见 ,我们的模型,效果不好,我们会在下一节课 ,使用 pre-train 的模型
也就是i人家 弄好的模型,进行 fune-tuning, 也就 微型地调整一下人家,可能 ,这就是 学长们 说的 「炼丹」 吧。
再刻意练习一下: 保存模型
colab 的 平穷用户如我,一会不动,其中的 环境 就被 google 给清理了,然后才有 本文开头的这出:
做前一些课程里面的 重复 工作: 下载数据,训练模型
为了偷懒,我学着 保存模型,用以 未来的 复现和 装逼
如下搞:
做任何代码运行 之前 的 目录:
跑这个代码:
import os.path
if os.path.isfile('models/c10cnn_model.h5') is False:
model.save('models/c10cnn_model.h5')
之前确认一下 自己 在哪,在哪个 工作目录:
确保 在 /content
搞好后:
你就留下了 遗产 ,赶紧保存到本地;