深度学习中的 “Hello World“

Here’s an interesting fact—Each month, there are 186.000 Google searches for the keyword “deep learning.”

大家好✨,这里是bio。每月有超18万的人使用谷歌搜索深度学习这一关键词,是什么让人们对深度学习如此感兴趣?接下来请跟随我来揭开深度学习的神秘面纱。

文章目录

  • 一、深度学习介绍
  • 二、深度学习五步走
    • 2.1 数据准备
    • 2.2 定义模型
    • 2.3 编译模型
    • 2.4 训练模型
    • 2.5 评估模型
  • 三、 参考


一、深度学习介绍

深度学习是机器学习的一个领域,或者说子集(机器学习介绍),利用数学函数将输入映射到输出。数学函数能够从数据中提取非冗余信息或模式,这使得深度学习能够找到输入数据和输出数据之间的关系。也就是说深度学习能自动获取输入与结果之间的关系

有些人认为深度学习系统的所有基本理论由弗朗克提出(Frank Rosenblatt),他在他的书中写道:“神经动力学原理:感知器和脑机制理论”(1962年)。1967年,Alexey Ivakhnenko和Lapa发表了第一个用于有监督的、深度的、前馈的、多层感知器的通用的、工作的学习算法。从1962年到1967年,从理论到实践,深度学习基本框架实现,如下图所示。
深度学习中的 “Hello World“_第1张图片
在本篇博客中,不会涉及到复杂的数学公式,对于初学者而言,复杂的数学公式是导致放弃的主要原因。甚至你可以是一个编程小白,你只要跟着本篇博客一步一步的实现,了解每个代码块在干什么,而不是了解代码的功能,你都能实现入门深度学习。

二、深度学习五步走

接下来将以Fashion Mnist 数据集代替手写数字数据集,向大家展示深度学习中的 Hello World。fashion mnist 数据集包含10分类群,共70000张灰度图像,以低分辨率(28x28 像素)展现。如下图所示:
深度学习中的 “Hello World“_第2张图片

图片地址

2.1 数据准备

第一次导入数据时需要下载,稍稍等一会即可。该代码块的主要功能是引入需要的第三方库以及导入数据。

# import necessary package
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

# load data
fashion_mnist = tf.keras.datasets.fashion_mnist
(train_image, train_labels), (test_image, test_labels) = fashion_mnist.load_data()

导入的数据已经是经过处理后的图像数据,转变成了由数字组成的28*28维的矩阵,数字大小在0到255之间(如下图所示)。接下来的代码块主要是对训练集中任意一个样本进行可视化。可以看到训练集中的第九个样本是一只高跟鞋。

print(train_image[9])
# visualization one sample
image = train_image[9]
plt.figure()
plt.imshow(image)
plt.colorbar()
plt.grid(False)
plt.show()

深度学习中的 “Hello World“_第3张图片
深度学习中的 “Hello World“_第4张图片
接下看看数据格式,在下面的输出中可以看到训练集图像数据中包含6万个样本,每个样本由28*28维的矩阵构成。训练集标签数据包含6万个标签。

print(train_image.shape)
print(train_labels.shape)
# output
# (60000, 28, 28)
# (60000,)

标签从0到9分别对应在下列服饰名称。

class_names = ['T恤', '裤子', '套头衫', '裙子', '外套',
               '凉鞋', '衬衫', '运动鞋', '包', '短靴']

深度学习模型只能处理二进制数据,所以我们要对数据进行缩放。在该数据集中所有数据的大小结余0至255之间,可以对每个值除以255使其归一化。注意对数据进行缩放时,训练集与测试集的缩放方式必须相同

train_image = train_image / 255.0
test_image = test_image / 255.0

再用之前提到的训练集中的第九个数据进行可视化,我们发现所有数据都在0与1之间(注意色彩标签的范围)。

image = train_image[9]

plt.figure()
plt.imshow(image)
plt.colorbar()
plt.grid(False)
plt.show()

深度学习中的 “Hello World“_第5张图片

2.2 定义模型

数据处理好后,就开始准备模型啦!构建神经网络需要定义网络层数,而后进行编译。

神经网络的第一层tf.keras.layers.Flatten将图像格式从二维数组(28 x 28 像素)转换成一维数组(28 x 28 = 784 像素)。将该层视为图像中未堆叠的像素行并将其排列起来。没有学习的参数,只是格式化数据。

神经网络的第二层和第三层是密集连接或全连接神经层。第一个Dense 层有 128 个节点。第二个Dense层会返回一个长度为 10 的 logits 数组。显示每个类别的得分,最终返回得分最高的类别。

model = tf.keras.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)), # 第一层
    tf.keras.layers.Dense(128, activation='relu'), # 第二层
    tf.keras.layers.Dense(10) # 第三层
])

2.3 编译模型

定义好模型之后就要对模型进行编译。如果下面的术语你没有理解,是没有关系的,跟着我接着往下做,加油!

损失函数 模型在拟合期间,与真实值之间的差距
优化器 决定模型如何根据其看到的数据和自身的损失函数进行更新。
指标 用于监控训练和测试步骤。以下示例使用了准确率,即被正确分类的图像的比率。

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

2.4 训练模型

编译完模型后,将模型在训练集上进行训练。在结果中可以看到 loss 在不断变小,accuracy 在不断提高。最高的准确率在训练集上已经达到了0.91。

model.fit(train_image,train_labels,epochs=10,batch_size=128)
Epoch 1/10
469/469 [==============================] - 2s 4ms/step - loss: 0.3060 - accuracy: 0.8886
Epoch 2/10
469/469 [==============================] - 3s 6ms/step - loss: 0.2934 - accuracy: 0.8925
Epoch 3/10
469/469 [==============================] - 3s 6ms/step - loss: 0.2819 - accuracy: 0.8971
Epoch 4/10
469/469 [==============================] - 2s 4ms/step - loss: 0.2689 - accuracy: 0.9026
Epoch 5/10
469/469 [==============================] - 2s 4ms/step - loss: 0.2638 - accuracy: 0.9031
Epoch 6/10
469/469 [==============================] - 2s 3ms/step - loss: 0.2560 - accuracy: 0.9063
Epoch 7/10
469/469 [==============================] - 2s 3ms/step - loss: 0.2476 - accuracy: 0.9096
Epoch 8/10
469/469 [==============================] - 2s 4ms/step - loss: 0.2384 - accuracy: 0.9133
Epoch 9/10
469/469 [==============================] - 2s 5ms/step - loss: 0.2325 - accuracy: 0.9145
Epoch 10/10
469/469 [==============================] - 2s 5ms/step - loss: 0.2263 - accuracy: 0.9170

2.5 评估模型

模型在训练集上训练完后,便可以在测试集上对模型进行评估。切记不可将测试集用于模型的训练,这相当与把答案给模型看过后,再让模型来回答问题。通过下面的代码可以看到模型在测试集的准确率只有0.89,低于在训练集上的准确率,这说明模型过拟合啦!不了解过拟合也没关系,之后我会带你了解。这次深度学习中的"Hello World"就到这里啦,大家有什么问题可以私聊或者留言交流~

test_loss, test_acc = model.evaluate(test_image,  test_labels, verbose=2)

print('\nTest accuracy:', test_acc)
313/313 - 1s - loss: 0.3235 - accuracy: 0.8894

Test accuracy: 0.8894000053405762

三、 参考

1. Deep Learning introduce
2. Deep learning history introduce coming from wiki
3. Fashion mnist dataset
4. TensorFlow tutorial

你可能感兴趣的:(机器学习,深度学习,人工智能,机器学习)