参与:侯韵楚、王宇欣、赵华龙、邵明、吴攀 本文内容由机器之心编译自谷歌开发者博客的 Codelabs 项目。据介绍,Google Developers Codelabs 提供了有引导的、教程式的和上手式的编程体验。大多数 Codelabs 项目都能帮助你了解开发一个小应用或为一个已有的应用加入新功能的过程。这些应用涉及到很多主题,包括 Android Wear、Google Compute Engine、Project Tango、和 iOS 上的 Google API。 本项目的原文可参阅:https://codelabs.developers.google.com/codelabs/cloud-tensorflow-mnist/#13 1、概述 在 codelab 项目中,你将学习如何构建并训练出能够识别手写数字的神经网络。在这过程中,当这个神经网络的准确度提升至 99%时,你还会发现深度学习专业人士用来有效训练模型的贸易工具。 这个 codelab 项目使用的是 MNIST 数据集,这个包含 60,000 个有标记数字的集合是几届博士努力近二十年的成果。你将会用不到 100 行的 Python/TensorFlow 代码来解决上述问题。 你将学到: ①神经网络的定义及如何训练神经网络 ②如何使用 TensorFlow 构建基本的 1 层神经网络 ③如何添加多层神经网络 ④训练提示和技巧:过拟合、dropout、学习速率衰减等... ⑤如何解决深度神经网络的问题 ⑥如何构建卷积网络 对此,你将需要: ①Python 2 或 3(建议使用 Python 3) ②TensorFlow ③Matplotlib(Python 的可视化库) 安装说明会在下一步中给出。 2. 准备:安装 TensorFlow,获取示例代码 在你的计算机上安装必要软件:Python、TensorFlow 和 Matplotlib。完整的安装说明如下:INSTALL.txt 克隆 GitHub 存储库: $ git clone https://github.com/martin-gorner/tensorflow-mnist-tutorial 这个库包含了多个文件,而你将只在mnist_1.0_softmax.py中操作。其它文件是用于加载数据和可视化结果的解决方案或支持代码。 当你启动初始python脚本时,应当能够看到训练过程的实时可视化: $ python3 mnist_1.0_softmax.py 疑难解答:如果无法运行实时可视化,或者如果你只想要使用文本输出,则可以通过注释掉一行并取消另一行的注释来禁用可视化。请参阅文件底部的说明。 为 TensorFlow 构建的可视化工具是 TensorBoard,其主要目标比我们在这里所需的更宏大。它能使你能够跟踪你在远程服务器上的分布式 TensorFlow 工作。而对于我们的这个实验,matplotlib 将作为替代,并且我们还有额外收获——实时动画。但是如果你使用 TensorFlow 进行严谨的工作,你一定要试试 TensorBoard。 3、理论:训练一个神经网络 我们首先来观察一个正在训练的神经网络。其代码会在下一节解释,所以现在不必查看。 我们的神经网络可以输入手写数字并对它们进行分类,即将它们识别为 0、1、2……9。它基于内部变量(「权重(weights)」和「偏差(bias)」,会在后面进行解释),需要有一个正确的值来分类才能正常工作。这个「正确的值」通过训练过程进行学习,这也将在后面详细解释。你现在需要知道的是,训练回路看起来像这样: Training digits => updates to weights and biases => better recognition (loop) 让我们逐个通过可视化的六个面板,了解训练神经网络需要什么。
你可以看到训练数字每次 100 个被送入训练回路;也可以看到当前训练状态下的神经网络是已将数字正确识别(白色背景)还是误分类(红色背景,左侧印有正确的标示,每个数字右侧印有计算错误的标示)。 此数据集中有 50,000 个训练数字。我们在每次迭代(iteration)中将 100 个数字送入训练循环中,因此系统将在 500 次迭代之后看到所有训练数字一次。我们称之为一个「epoch」。 (责任编辑:本港台直播) |