编译模型
首先,我们初始化学习率和历元总数(完全通过样本)(第 81 和 82 行)。
然后,我们将使用随机梯度下降(SGD)和“ categorical_crossentropy ”作为损失函数来编译模型。
几乎所有经过训练来执行分类的神经网络都使用分类交叉熵。唯一的例外是只有两个类和两个可能的标签时。在这种情况下,使用二元交叉熵(“ binary_crossentropy ”)。
模型训练
现在我们的 Keras 模型已编译完毕,我们可以“拟合”(即训练)它:
在这里我们知道除了batch_size(批量大小)之外的所有内容。batch_size参数控制每批通过网络传输的数据的大小。强大的 GPU可以处理大数据包,但建议从大小 32 和 64 开始。
模型评估
我们已经训练了模型,现在我们需要使用测试样本对其进行评估。
模型评估非常重要,因为我们需要公正地(或尽可能接近公正地)了解我们的模型在从未训练过的数据上的表现如何。
要评估 Keras 模型,您可以结合使用 scikit-learn 中的.predict和classification_report方法:
通过运行此脚本,您将看到神经网络已经开始训练,现在我们可以根据测试数据评估模型:
由于网络很小(数据集也很小),这个过程平均需要大约两秒。
可以直接向客户传播个性化内容促销优惠和重要更从而提高参与和转化的可能性。此外,WhatsApp 促进了企业和消费者之间更具互动性的沟通渠道 Whatsapp 号码列表 的发展。与通常涉及单向沟通的传统营 销方法不同,WhatsApp 支持双向互动。客户可以提出问题、提供反馈。
你可以看到我们的神经网络的准确率是61%。
由于为图像随机选择正确标签的机会是 1/3,因此我们可以说网络实际上已经学习了可用于区分这三个类别的模式。
我们还保存了以下图表:
——学习损失
— 估值损失
— 训练准确率
— 估计精度
在他们的帮助下,我们可以确定模型是否训练过度或训练不足。
查看该图,您可以看到在步骤 ~45 之后开始出现轻微的过度拟合,此时训练损失和评估损失之间存在明显差距。
最后,我们可以将模型保存到磁盘,以便稍后使用它而无需再次训练:
使用经过训练的模型进行图像识别
现在我们的模型已经训练完毕 – 但如果我们需要再次对新图像进行分类怎么办?如何从磁盘加载模型?如何处理图像进行分类?首先,打开Predict.py脚本并在其中插入以下代码:
首先我们导入必要的包和模块。
load_model允许您从磁盘加载 Keras 模型。 OpenCV 将用于输 美国手机号码列表 出图像。 pickle模块加载标签二值化器。
接下来,我们再看一下命令行参数:
–image:输入图像的路径。
–model:我们训练和序列化模型的路径。
–label-bin:标签二值化器的路径。
–width:CNN 的图像宽度。请记住,您不能只在这里指出任何内容。您需要指定模型的预期宽度。
–height:输入图像的高度。它还必须与特定型号相匹配。
–flatten:是否压平图像(默认情况下我们不会这样做)。
让我们加载图像并根据命令行参数调整其大小:
如有必要,可以对图像进行平滑处理:
对于 CNN,我们指定批量大小,但不执行任何平滑(第 39-41 行)。 CNN 示例将在下一节中讨论。
现在让我们将模型和标签二值化器加载到内存中并尝试识别图像:
模型和二值化器在第 45 和 46 行加载。
使用model.predict方法(第 49 行)进行图像识别(预测对象是否属于其中一个类) 。
preds数组是什么样的?
二维数组包含 (1) 数据包中图像的索引(这里只有一个,因为传输了一张图像)和 (2) 与每个类标签中图像的可能成员资格相对应的百分比:
— 猫:54.6%
— 狗:45.4%
— 熊猫:~0%
也就是说,我们的神经网络“认为”它很 销售产品营销:99% 的人都缺少框架 可能看到一只猫,并且绝对没有看到熊猫。
在第 53 行中,我们找到最大值的索引(在本例中为零)。
在第 54 行,我们从标签二值化器中提取字符串标签“cats”。
容易,对吧?
现在让我们显示结果:
我们格式化第 57 行的文本输出(类标签和预测值以百分比表示)。
然后我们将文本放置在输出图像上(第 58 和 59 行)。
最后,我们在屏幕上显示图像并等待用户按下某个键(第 62 和 63 行)。
我们的图像识别脚本非常简单。
现在您可以打开终端并尝试在您自己的图像上运行经过训练的神经网络:
确保从脚本文件夹复制/粘贴整个命令(包括命令行参数)。
我们的简单神经网络将输入图像分类为猫的概率为 55.87%,尽管它的脸部分被一块面包遮住了。
笔记:
请注意,您的结果可能与本文中显示的结果不同。最有可能的是,这是因为即使在相同的初始数据上,学习过程每次也会发生不同的情况。例如,在我们的实验中,神经网络的准确率下降到了 60%,有猫的图像被分类为“狗”的概率为 45.34%。您可以分享您的结果以及关于这可能与什么相关的假设。