Python 2.x 中如何使用keras模块进行深度学习

1. 简介

深度学习是目前人工智能领域中最火热的技术之一,深度学习对应的Python库非常多,keras即为其中一种。Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行,这样我们就可以使用 Keras 轻松地开发深度学习模型,而不需要深入掌握所使用的后端库。

2. 环境搭建

2.1 安装 keras 库

首先,需要使用 pip 安装 Keras。在终端输入以下代码:

pip install keras

如果你的 python 2.x 版本与 python 3.x 版本都安装了Keras模块,那么需要加上版本号,例如:

pip install keras==2.2.4

安装完成后,在python中导入keras。在 python 代码中输入以下代码:

import keras

2.2 安装相关依赖库

Keras 的后端有多种选择,我们这里采用最常见的 TensorFlow。最好将 TensorFlow 升级到最新版本。同时,还需要安装以下库:

NumPy—Python中用于科学计算的一个库。

Pandas—Python中一个常用的数据分析库,可以用于数据预处理。

Matplotlib—Python中一个著名的用于绘制图表的库。

在终端输入以下代码进行上述库的安装:

pip install tensorflow

pip install numpy

pip install pandas

pip install matplotlib

3. 用 Keras 训练模型

在深度学习中,我们首先需要准备好输入数据和输出数据的结构。因此,我们首先会进行数据预处理。在 Keras 中,提供了一些常见数据集的 API,例如 CIFAR-10、MNIST、Fashion-MNIST 等。这里我们以 CIFAR-10 数据集为例,介绍如何使用 Keras 训练模型。

3.1 数据预处理

首先导入 Keras 中的 cifar10 数据集:

from keras.datasets import cifar10

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

对于数据预处理部分,需要将图像的像素值映射到 0~1 范围内,因此将像素值除以 255 即可。

x_train = x_train.astype('float32') / 255

x_test = x_test.astype('float32') / 255

接下来,我们将标签转换为 one-hot 向量。例如,对于 CIFAR-10 数据集,标签值为 0~9,我们将其转换为包含 10 个元素的向量,其中索引为标签值的元素赋值为 1,其他元素赋值为 0。可以使用 Keras 中的 `to_categorical()` 函数来进行转换:

from keras.utils import np_utils

y_train = np_utils.to_categorical(y_train, 10)

y_test = np_utils.to_categorical(y_test, 10)

3.2 构建模型

使用 Keras 时,可以通过序列模型来构建多层神经网络。一个简单的序列模型包含一个输入层和一个输出层,中间可包含多个隐藏层。可以通过 Keras 中的 Dense 函数来添加这些层。

以下是一个简单的卷积神经网络实现:

from keras.models import Sequential

from keras.layers import Dense, Conv2D, MaxPooling2D, Dropout, Flatten

model = Sequential()

model.add(Conv2D(32, (3, 3), padding='same', input_shape=x_train.shape[1:], activation='relu'))

model.add(Conv2D(32, (3, 3), activation='relu'))

model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Dropout(0.25))

model.add(Conv2D(64, (3, 3), padding='same', activation='relu'))

model.add(Conv2D(64, (3, 3), activation='relu'))

model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Dropout(0.25))

model.add(Flatten())

model.add(Dense(512, activation='relu'))

model.add(Dropout(0.5))

model.add(Dense(10, activation='softmax'))

# compile the model

model.compile(loss='categorical_crossentropy',

optimizer='adam',

metrics=['accuracy'])

该模型包含两个卷积层、两个池化层和两个 dropout 层。在模型中的每个层后都添加了批量归一化,最后使用 Dense 函数添加一层 softmax 层作为输出层。

3.3 训练模型

在训练模型前,可以使用 summary() 方法查看模型的结构和参数数量。这里的模型参数数量包括所有层中权重矩阵和偏置的数量。

model.summary()

接下来,我们需要使用模型的 fit 函数来训练模型。 fit 函数接受训练数据、标签、批大小、训练轮数等参数。 Keras 可以将训练和测试的过程封装在一函数中,即 fit() 函数。

# Train the model

batch_size = 64

epochs = 10

model.fit(x_train, y_train,

batch_size=batch_size,

epochs=epochs,

validation_data=(x_test, y_test),

shuffle=True)

在这里,我们训练了 10 次,每次以大小为 64 的批次进行训练。

4. 结果评估

在训练完成后,我们可以使用模型的 evaluate() 或 predict() 方法来评估模型。评估模型时,我们需要将测试数据传递给模型及其对应的标签值。由于模型输出的是概率值,因此我们需要将概率转换为标签。

# Evaluate the model

scores = model.evaluate(x_test, y_test, verbose=1)

print('Test loss:', scores[0])

print('Test accuracy:', scores[1])

该代码段将输出测试损失和测试精度。以下是运行结果:

10000/10000 [==============================] - 3s 335us/step

Test loss: 0.8387068187713623

Test accuracy: 0.7177999858856201

5. 总结

本文使用 Keras 及 TensorFlow 后端建立卷积神经网络来对 CIFAR-10 数据集进行分类。 在训练模型时,我们进行了数据预处理过程,将像素值映射到了 0~1 范围内,将标签转换为 one-hot 向量。接下来,我们使用 tensorflow 后端建立了简单的卷积神经网络模型,并进行了训练。在训练后,我们使用 evaluate() 方法对模型进行了评估。

后端开发标签