神经网络测试集loss不变_「马上学tensorflow 2.0」“Hello, World”初识神经网络

大家好,今天我们学习【马上学tensorflow 2.0】之 “Hello, World”初识神经网络。

我们 马上学三点

  1. 完整神经网络代码
  2. 详细训练步骤
  3. 训练效果

大家可以点击下面的“ 了解更多 ”,或搜索“ 马上学123 ”,在线观看PPT讲义。

e77e9058ba8099303abdbfd9a863a33a.png

Hello, World

开始“Hello, World”

这一节, 我们使用一个例子认识神经网络, 如果其中某些步骤看起来像魔法一样, 你可以不用管, 下一节会详细解释这个例子中的每个步骤。

我们这里要解决的问题是, 将手写数字的灰度图像(28 像素×28 像素), 划分到 10 个类别中(0~9)。

我们将使用 MNIST 数据集, 它是机器学习领域的一个经典数据集, 其历史几乎和这个领域一样长, 解决MNIST问题看作深度学习的“Hello World”,

MNIST数据集包含 60000 张训练图像和 10000 张测试图像, 如图是它的一些样本:

b7be781990eb679a77a8fa0fec21ae88.png

项目的完整代码

这是本节项目的完整代码, 我们接下来会介绍详细步骤。

import tensorflow as tfmnist = tf.keras.datasets.mnist(train_images , train_labels), (test_images, test_labels) = mnist.load_data()train_images, test_images = train_images / 255.0, test_images / 255.0model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(10, activation='softmax')])model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])model.fit(train_images, train_labels, epochs=5)model.evaluate(test_images, test_labels)

加载MNIST数据集

import tensorflow as tfmnist = tf.keras.datasets.mnist(train_images , train_labels), (test_images, test_labels) = mnist.load_data()train_images, test_images = train_images / 255.0, test_images / 255.0

train_images 和 train_labels 组成了训练集, 模型将从这些数据中进行学习。 然后在测试集(即 test_images 和 test_labels)上 对模型进行测试。

我们梳理一下工作流程: 首先,将训练数据(train_images 和 train_labels) 输入神经网络; 其次,网络学习将图像和标签关联在一起; 最后,网络对 test_images 生成预测, 而我们将验证这些预测与 test_labels 中的标签是否匹配。

在开始训练之前, 我们将对数据进行预处理, 将其变换为网络要求的形状, 并缩放到所有值都在 [0, 1] 区间。

train_images, test_images = train_images / 255.0, test_images / 255.0

构建网络

下面我们来构建网络,

model = tf.keras.models.Sequential([

tf.keras.layers.Flatten(input_shape=(28, 28)),

tf.keras.layers.Dense(128, activation='relu'),

tf.keras.layers.Dense(10, activation='softmax')

])

神经网络的核心组件是(layer), 它是一种数据处理模块,你可以将它看成数据过滤器。 进去一些数据,出来的数据变得更加有用

深度学习模型就像是数据处理的筛子, 包含一系列越来越精细的数据过滤器(即层)。

本例中的网络包含2个 Dense 层, 它们是密集连接(也叫全连接)的神经层。

最后一层是一个10路softmax 层, 它将返回一个由 10个概率值组成的数组。 每个概率值表示当前数字图像 属于10个数字类别中某一个的概率。

编译模型

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

要想训练网络, 我们还需要选择编译(compile)步骤的三个参数。

  • 损失函数(loss function): 网络如何衡量在训练数据上的性能, 即网络如何朝着正确的方向前进。
  • 优化器(optimizer): 基于训练数据和损失函数来更新网络的机制。
  • 在训练和测试过程中需要监控的指标(metric): 本例只关心精度,即正确分类的图像所占的比例。

后续会详细解释损失函数和优化器的确切用途。

开始训练网络

准备开始训练网络, 我们在训练数据上拟合(fit)模型。

model.fit(train_images, train_labels, epochs=5)

训练过程中显示了两个数字:

  • 一个是网络在训练数据上的损失(loss),
  • 另一个是网络在训练数据上的精度(acc)。

我们很快就在训练数据上达到了很高的精度。

测试集验证性能

现在我们来检查一下模型在测试集上的性能:

model.evaluate(test_images, test_labels)

测试集精度比训练集精度低不少, 训练精度和测试精度之间的这种差距是过拟合造成的。 过拟合是指机器学习模型 在新数据上的性能往往比在训练数据上要差,我们后续会重点讲。

第一个例子到这里就结束了, 你刚刚看到了如何构建和训练一个神经网络, 用不到 20 行的Python 代码对手写数字进行分类。

后续我们会详细介绍这个例子中的每一个步骤, 并讲解其背后的原理。

总结:

我们通过一个完整的MNIST项目, 讲解了训练模型的完整步骤, 导入数据,预处理数据, 创建模型,训练模型,测试模型。

这里讲了三点,关键词有哪几个?

提问,tensorflow和keras是什么关系?

欢迎回复评论!

马上学,很简单!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值