Keras的初学者指南

107 阅读5分钟

A Beginner's Guide to Keras: Digit Recognition in 30 Minutes

在过去的十年中,人工神经网络(ANN)的使用已经大大增加。人们已经将人工神经网络用于医疗诊断预测比特币价格,并创建了假的奥巴马视频在所有关于深度学习和人工神经网络的讨论中,你不是一直想为自己创造一个吗?在本教程中,我们将创建一个模型来识别手写数字。

在本教程中,我们将使用Keras库来训练这个模型。Keras是一个Python中的高级库,是对TensorFlowCNTKTheano的封装。默认情况下,Keras默认使用TensorFlow后端,我们将使用同样的方法来训练我们的模型。

人工神经网络

Artificial neural network来源

人工神经网络是一个数学模型,它通过一些隐藏层将一组输入转换为一组输出。一个人工神经网络与隐藏层一起工作,每个隐藏层都是一个与概率相关的暂态形式。在一个典型的神经网络中,一个层的每个节点将前一层的所有节点作为输入。一个模型可以有一个或多个隐藏层。

ANN接受一个输入层,通过隐藏层进行转换。一个ANN是通过给隐藏层的每个节点分配随机权重和偏置来初始化的。随着训练数据被送入模型,它使用每一步产生的误差来修改这些权重和偏置。因此,我们的模型在通过训练数据时 "学习 "了模式。

复杂的神经网络

在本教程中,我们要识别数字--这是图像分类的一个简单版本。一幅图像本质上是一个点或像素的集合。一个像素可以通过其组成颜色(RGB)来识别。因此,图像的输入数据本质上是一个像素的二维阵列,每个像素代表一种颜色。

如果我们要根据图像数据训练一个普通的神经网络,我们就必须提供一长串的输入,每一个输入都要连接到下一个隐藏层。这使得这个过程很难扩大规模。

Convolutional Neural Network Architecture卷积神经网络架构

卷积神经网络(CNN)中,各层被排列成一个三维阵列(X轴坐标、Y轴坐标和颜色)。因此,隐藏层的一个节点只会连接到相应的输入层附近的一个小区域,使得这个过程比传统的神经网络要高效得多。因此,在处理图像和视频时,CNN很受欢迎。

Convolutional Neural Network Layers卷积神经网络层

CNN中的各种层的类型如下。

  • 卷积层:这些层通过某些过滤器运行输入,识别图像中的特征
  • 汇集层:这些层结合了卷积特征,有助于减少特征。
  • 扁平化层:这些层将N维层转换为1维层
  • 分类层:最后一层,它告诉我们最终的结果。

现在让我们来探索一下数据。

探索MNIST数据集

正如你现在可能已经意识到的,我们需要标记的数据来训练任何模型。在本教程中,我们将使用MNIST的手写数字数据集。这个数据集是Keras软件包的一部分。它包含一个有60,000个例子的训练集和一个有10,000个例子的测试集。我们将在训练集上训练数据,并根据测试数据对结果进行验证。此外,我们将创建一个我们自己的图像,以测试模型是否能正确预测它。

首先,让我们从Keras导入MNIST数据集。.load_data() 方法同时返回训练和测试数据集。

from keras.datasets import mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()

让我们试着将数据集中的数字可视化。如果你使用的是Jupyter笔记本,使用下面这个神奇的函数来显示内联的Matplotlib图

%matplotlib inline

接下来,从matplotlib 中导入pyplot 模块,使用.imshow() 方法来显示图像。

import matplotlib.pyplot as plt

image_index = 35
print(y_train[image_index])
plt.imshow(x_train[image_index], cmap='Greys')
plt.show()

图像的标签被打印出来,然后显示图像。

label printed and image displayed

让我们验证一下训练和测试数据集的大小。

print(x_train.shape)
print(x_test.shape)

注意每个图像的尺寸是28 x 28。

(60000, 28, 28)
(10000, 28, 28)

接下来,我们可能还想探讨一下存储在y_train 的因变量。让我们打印所有的标签,直到我们上面可视化的数字。

print(y_train[:image_index + 1])
[5 0 4 1 9 2 1 3 1 4 3 5 3 6 1 7 2 8 6 9 4 0 9 1 1 2 4 3 2 7 3 8 6 9 0 5]

清理数据

现在我们已经看到了数据的结构,让我们在创建模型之前进一步处理它。

为了使用Keras API,我们需要将每张图片重塑为(M x N x 1) 的格式。我们将使用.reshape() 方法来执行这一操作。最后,通过将每个像素值除以255来规范图像数据(因为RGB值的范围可以从0到255)。

# save input image dimensions
img_rows, img_cols = 28, 28

x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)

x_train /= 255
x_test /= 255

接下来,我们需要将整数形式的因变量转换为二元类矩阵。这可以通过to_categorical() 函数来实现。

from keras.utils import to_categorical
num_classes = 10

y_train = to_categorical(y_train, num_classes)
y_test = to_categorical(y_test, num_classes)

现在我们已经准备好创建模型并进行训练了!

继续阅读A Beginner's Guide to Keras:30分钟内完成数字识别,请访问SitePoint