Files
freeCodeCamp/curriculum/challenges/chinese/11-machine-learning-with-python/machine-learning-with-python-projects/cat-and-dog-image-classifier.md
2022-10-21 23:34:50 +05:30

5.6 KiB

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
5e46f8dcac417301a38fb92e 猫狗图像分类器 10 462377 cat-and-dog-image-classifier

--description--

你将使用 Google Colaboratory 来完成这个项目

进入该链接后,在你自己的账户或本地创建一个笔记本的副本。 一旦你完成项目并通过测试(包括在该链接),请在下面提交你的项目链接。 如果你提交的是 Google Colaboratory 的链接,请确保打开链接共享时选择 “anyone with the link”。

我们仍在开发机器学习课程的交互式课程部分。 现在,你可以通过这个认证中的视频挑战。 你可能还需要寻找额外的学习资源,类似于你在真实世界项目中的工作。

--instructions--

在这个挑战中,你将完成代码,对狗和猫的图像进行分类。 你将使用 Tensorflow 2.0 和 Keras 创建一个卷积神经网络,该网络至少 63% 的时间可以正确分类猫和狗的图像。 (如果你能达到 70% 的准确率,可以加分!)

有些代码是给你的,但有些代码你必须填写才能完成这个挑战。 阅读每个文本单元中的指令,你就会知道你在每个代码单元中要做什么。

第一个代码单元导入所需的库。 第二个代码单元下载数据并设置关键变量。 第三个单元格是你要写自己代码的第一个地方。

下载的数据集文件的结构看起来是这样的(你会注意到,测试目录没有子目录,图像也没有标示)。

cats_and_dogs
|__ train:
    |______ cats: [cat.0.jpg, cat.1.jpg ...]
    |______ dogs: [dog.0.jpg, dog.1.jpg ...]
|__ validation:
    |______ cats: [cat.2000.jpg, cat.2001.jpg ...]
    |______ dogs: [dog.2000.jpg, dog.2001.jpg ...]
|__ test: [1.jpg, 2.jpg ...]

如果你愿意,你可以调整历时和批次大小,但这不是必须的。

下面的指令对应于特定的单元格编号,在单元格的顶部用注释表示(如 # 3)。

Cell 3

现在轮到你了! 正确设置此单元格中的每个变量。 (它们不应再等于 None。)

为三个图像数据集(训练、验证、测试)中的每一个创建图像生成器。 使用 ImageDataGenerator 读取/解码图像并将它们转换为浮点张量。 使用 rescale 参数(目前没有其他参数)将张量从 0 到 255 之间的值重新缩放到 0 到 1 之间的值。

对于 *_data_gen 变量,使用 flow_from_directory 方法。 传入批处理大小、目录、目标大小((IMG_HEIGHT, IMG_WIDTH))、类模式以及其他所需的内容。 test_data_gen 将是最棘手的一个。 对于 test_data_gen,确保将 shuffle=False 传递给 flow_from_directory 方法。 这将确保最终预测保持在我们的测试预期的顺序。 对于 test_data_gen,观察目录结构也很有帮助。

运行代码后,输出应如下所示:

Found 2000 images belonging to 2 classes.
Found 1000 images belonging to 2 classes.
Found 50 images belonging to 1 class.

Cell 4

plotImages 函数将多次用于绘制图像。 它需要一个图像数组和一个概率列表,尽管概率列表是可选的。 此代码已提供给你。 如果你正确地创建了 train_data_gen 变量,那么运行这个单元将绘制五个随机训练图像。

Cell 5

使用 ImageDataGenerator 重新创建 train_image_generator

由于训练样本数量很少,因此存在过度拟合的风险。 解决此问题的一种方法,是通过使用随机变换,从现有训练示例创建更多训练数据。

添加 4-6 个随机变换作为 ImageDataGenerator 的参数。 确保重新缩放与以前相同。

Cell 6

你无需为此单元做任何事情。 train_data_gen 与以前一样创建,但使用新的 train_image_generator。 然后,使用不同的变化对单个图像进行五次不同的绘制。

Cell 7

在此单元格中,为输出类别概率的神经网络创建一个模型。 它应该使用 Keras Sequential 模型。 它可能会涉及一堆 Conv2D 和 MaxPooling2D 层,然后是一个由 ReLU 激活函数激活的全连接层。

编译模型并传递参数以设置优化器和损失。 同时传入 metrics=['accuracy'] 以查看每个训练周期的训练和验证精度。

Cell 8

使用 model 上的 fit 方法来训练网络。 确保为 xsteps_per_epochepochsvalidation_datavalidation_steps 传入参数。

Cell 9

运行这个单元来观察模型的准确性和损失。

Cell 10

现在是时候使用你的模型,来预测一个全新的图像,是猫还是狗了。

在此单元格中,获取每个测试图像(来自 test_data_gen)是狗或猫的概率。 probabilities 应该是一个整数列表。

调用 plotImages 函数并传入测试图像和每个测试图像对应的概率。

在你运行该单元后,你应该看到所有 50 张测试图像,并有一个标签显示该图像是猫还是狗的“确定”百分比。 准确度将对应于上图中显示的准确度(在运行上一个单元格之后)。 更多的训练图像可能会导致更高的准确性。

Cell 11

运行这个最后的单元格,看看你是否通过了挑战,或者你是否需要继续努力。

--hints--

它应该通过所有的 Python 测试。


--solutions--

  # Python challenges don't need solutions,
  # because they would need to be tested against a full working project.
  # Please check our contributing guidelines to learn more.