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 方法来训练网络。 确保为 x、steps_per_epoch、epochs、validation_data 和 validation_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.