深度学习第17讲:keras入门和快速上手指南

简介:

深度学习到这个进度,笔者觉得有必要开始对一些优秀的深度学习框架进行介绍了。在前面几讲中,我们着重对 Tensorflow 进行了介绍,并用其实现了一些数据例子。Tensorflow 虽然很强大,但语法和使用便利性上对于新手来说并不是那么的友好,所以到这里笔者需要给大家介绍 keras 了。

65ea51aa3cb638955b9f6e0227e3e9b303905c04

keras 是一款使用纯 python 编写的神经网络 API,使用 keras 能够快速实现你的深度学习方案,所以 keras 有着为快速试验而生的美称。kerasTensorflowTheanoCNTK 为后端,意思就是 keras 的底层计算都是以以上这些框架为基础的,这使得 keras 能够专注于快速搭建起神经网络模型。

keras 搭建神经网络的基本流程

利用 keras 搭建神经网络模型非常快速和高效,其模型实现的核心流程可以用四个步骤来概括。具体如下:

第一步就是设计你的网络结构(add):
调用 keras 神经网络的各个模块来组件你的模型架构,通过 add 方法来叠加。这一步是最需要仔细考虑的地方,关乎你的神经网络的复杂性和高效与否。简单示例如下:


from keras.layers import Dense, Activation
model.add(Dense(units=64, input_dim=100))
model.add(Activation("relu"))
model.add(Dense(units=10))
model.add(Activation("softmax"))

上面的示例中,我们从 keraslayers 模块中导入了 Dense 全连接层、Activation 激活层,构造了一个包含两个全连接层和一个 relusoftmax 激活的网络模型。

第二步是将设计好模型进行编译(compile):

model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])

第三步就是对训练数据进行拟合训练(fit):

model.fit(x_train, y_train, epoche=5, batch_size=32)

最后就是对训练好的模型进行评估(evaluate):

loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)

这样你就用 keras 将你的神经网络模型快速实现了。之后你可以考虑对模型进行调整和优化,但将想法和方案实现落地这个过程是非常快速的。至于 keras 的具体细节和其他的一些功能,大家可以参考keras 的官方文档:https://keras.io/

324c1ae8889461270d91565c11b1f7fc1506bebe

当然也有中文版的:http://keras-cn.readthedocs.io/en/latest/

dd7acdfc2efa2dbc406e9144dcb8f9ab9d572b51
keras 模拟数据例子

下面我们用 numpy 生成的随机数的例子来使用 keras 去搭建神经网络,我们模拟一个 softmax 多分类的例子:


import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.optimizers import SGD

# Generate dummy data
import numpy as np
x_train = np.random.random((1000, 20))
y_train = keras.utils.to_categorical(np.random.randint(10, size=(1000, 1)), num_classes=10)
x_test = np.random.random((100, 20))
y_test = keras.utils.to_categorical(np.random.randint(10, size=(100, 1)), num_classes=10)
model = Sequential()
# Dense(64) is a fully-connected layer with 64 hidden units.
# in the first layer, you must specify the expected input data shape:# here, 20-dimensional vectors.
model.add(Dense(64, activation='relu', input_dim=20))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
optimizer=sgd,
metrics=['accuracy'])
model.fit(x_train, y_train,
epochs=20,
batch_size=128)
score = model.evaluate(x_test, y_test, batch_size=128)

模型训练:

775783742dd13b7feeb407f9c945deb3d31be7c1

模型总结,这也是 keras 的一个比较好的功能之一,可以让你对了解模型的基本概要:

1962fd7e8a1e846c9d8a6f6220d5f5e01a1241eb

由模型总结我们看到神经网络每一层的输入输出大小以及需要训练的参数个数,非常明了。

利用 keras 实现 LeNet-5 模型

在之前的推送中我们使用了 Tensorflowmnist 数据例子来实现了 Yann Lecun 大佬的 LeNet-5 模型,本节我们将继续使用 keras 来搭建 LeNet-5 模型。依然是按照前面所讲到的 keras 搭建神经网络模型四步骤,LeNet-5 模型搭建如下:


import keras
from keras.layers import Conv2D, Dense, Dropout, Activation, MaxPooling2D, Flatten
from keras.models import Sequential
import numpy as np
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

# define lenet5 model
def lenet5(X_train, y_train):
model = Sequential()
# first step: create sequential model and add layers
model.add(Conv2D(6, (5, 5), strides=1, padding='valid',
input_shape=(32, 32, 1), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(16, (5, 5), strides=1, activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(1203, (5, 5), strides=1, activation='relu'))
model.add(Flatten())
model.add(Dense(84))
model.add(Activation('relu'))
model.add(Dropout(0.25))
model.add(Dense(10))
model.add(Activation('softmax'))
# second step:compile the model
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
# third step: fit the model
model.fit(X_train, y_train, batch_size=128, epochs=10)
return model
# fourth step: evaluate the model
def eval_score(model, X_test, y_test):
score = model.evaluate(X_test, y_test, batch_size=128)
return score
if __name__ == '__main__':
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
sess = tf.InteractiveSession()
X_train = mnist.train.images
X_train = tf.reshape(X_train, [-1, 28, 28, 1])
X_train = tf.pad(X_train, [[0,0],[2,2],[2,2], [0,0]]).eval()
y_train = mnist.train.labels
X_test = mnist.test.images
X_test = tf.reshape(X_test, [-1, 28, 28, 1])
X_test = tf.pad(X_test, [[0,0],[2,2],[2,2], [0,0]]).eval()
y_test = mnist.test.labels
model = lenet5(X_train, y_train)
print(model.summary())
score = eval_score(model, X_test, y_test)
print(score)

在上述代码中,我们利用 keras 四步法快速搭建起了 LeNet5 模型,并使用 mnist 手写数字数据集进行了训练。这里需要说明的一点是,笔者这里的 mnist 数据是通过 Tensorflow 下载导入的,其实 keras 本身也有 mnist 的数据导入模块。这么做主要是笔者想要通过 Tensorflow 对训练集的维度做 padding 时方便,mnist 数据集输入大小的 shape 为 28x28x1,但在 Lecun 的论文原文中,输入图像是 32x32x1,所以在搭建原始的 LeNet5 结构时需要对输入在一开始就做一个 padding。

模型训练过程如下:

a3531b91243785d700c627c6842c023b701d821b

模型概要如下:

234cf1bfb3c76a8a6662df02e3058818d2f89851

最后我们使用 LeNet5 在测试集上取得了 99.01% 的准确率:

d6bdc62603ec36b07dcfad6db351893ced3b7ab2

原文发布时间为:2018-10-8
本文作者:louwill
本文来自云栖社区合作伙伴“ Python爱好者社区”,了解相关信息可以关注“ Python爱好者社区”。
相关文章
|
3天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
1月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
深度学习之格式转换笔记(三):keras(.hdf5)模型转TensorFlow(.pb) 转TensorRT(.uff)格式
将Keras训练好的.hdf5模型转换为TensorFlow的.pb模型,然后再转换为TensorRT支持的.uff格式,并提供了转换代码和测试步骤。
82 3
深度学习之格式转换笔记(三):keras(.hdf5)模型转TensorFlow(.pb) 转TensorRT(.uff)格式
|
2月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:理解神经网络与反向传播算法
【9月更文挑战第20天】本文将深入浅出地介绍深度学习中的基石—神经网络,以及背后的魔法—反向传播算法。我们将通过直观的例子和简单的数学公式,带你领略这一技术的魅力。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你打开深度学习的大门,让你对神经网络的工作原理有一个清晰的认识。
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
深度学习入门案例:运用神经网络实现价格分类
深度学习入门案例:运用神经网络实现价格分类
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
软件工程师,入门下深度学习吧
软件工程师,入门下深度学习吧
56 9
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)入门与实践
【8月更文挑战第62天】本文以浅显易懂的方式介绍了深度学习领域中的核心技术之一——卷积神经网络(CNN)。文章通过生动的比喻和直观的图示,逐步揭示了CNN的工作原理和应用场景。同时,结合具体的代码示例,引导读者从零开始构建一个简单的CNN模型,实现对图像数据的分类任务。无论你是深度学习的初学者还是希望巩固理解的开发者,这篇文章都将为你打开一扇通往深度学习世界的大门。
|
2月前
|
机器学习/深度学习 人工智能 TensorFlow
深度学习入门:从理论到实践
【9月更文挑战第22天】本文将带你走进深度学习的世界,从基础的理论概念出发,逐步深入到实践应用。我们将探讨神经网络的工作原理,以及如何通过编程实现一个简单的深度学习模型。无论你是初学者还是有一定基础的学习者,都能在这篇文章中找到有价值的信息。让我们一起揭开深度学习的神秘面纱,探索这个充满无限可能的领域吧!
|
2月前
|
机器学习/深度学习 人工智能 算法
深度学习中的卷积神经网络(CNN)入门与实践
【9月更文挑战第19天】在这篇文章中,我们将探索深度学习的一个重要分支——卷积神经网络(CNN)。从基础概念出发,逐步深入到CNN的工作原理和实际应用。文章旨在为初学者提供一个清晰的学习路径,并分享一些实用的编程技巧,帮助读者快速上手实践CNN项目。
|
1月前
|
机器学习/深度学习 移动开发 TensorFlow
深度学习之格式转换笔记(四):Keras(.h5)模型转化为TensorFlow(.pb)模型
本文介绍了如何使用Python脚本将Keras模型转换为TensorFlow的.pb格式模型,包括加载模型、重命名输出节点和量化等步骤,以便在TensorFlow中进行部署和推理。
76 0
|
2月前
|
机器学习/深度学习 人工智能 TensorFlow
深度学习入门:理解卷积神经网络(CNN)
【9月更文挑战第14天】本文旨在为初学者提供一个关于卷积神经网络(CNN)的直观理解,通过简单的语言和比喻来揭示这一深度学习模型如何识别图像。我们将一起探索CNN的基本组成,包括卷积层、激活函数、池化层和全连接层,并了解它们如何协同工作以实现图像分类任务。文章末尾将给出一个简单的代码示例,帮助读者更好地理解CNN的工作原理。
53 7

热门文章

最新文章