导读:Keras是目前深度学习研究领域非常流行的框架。

作者:史丹青

来源:大数据DT(ID:hzdashuju)

01 Keras简介与安装

Keras是目前深度学习研究领域非常流行的框架,相比于TensorFlow,Keras是一种更高层次的深度学习API。

Keras使用Python编写而成,包含了大量模块化的接口,有很多常用模型仅需几行代码即可完成,大大提高了深度学习的科研效率。它是一个高级接口,后端可支持TensorFlow、Theano、CNTK等多种深度学习基础框架,默认为TensorFlow,其他需要单独设置。

目前,谷歌已经将Keras库移植到TensorFlow中,也让Keras成了TensorFlow中的高级API模块。

Keras具备了三个核心特点:

  • 允许研究人员快速搭建原型设计。

  • 支持深度学习中最流行的卷积神经网络与循环神经网络,以及它们两者的组合。

  • 可以在CPU与GPU上无缝运行。

Keras的口号是“为人类服务的深度学习”,在整体的设计上坚持对开发者友好,在API的设计上简单可读,将用户体验放在首位,希望研发人员可以以尽可能低的学习成本来投入深度学习的开发中。

Keras的API设计是模块化的,用户可以基于自己设想的模型对已有模块进行组装,其中如神经网络层、损失函数、优化器、激活函数等都可以作为模块组合成新的模型。与此同时,Keras的扩展性非常强大,用户可以轻松创建新模块用于科学研究。

目前最简单的引入Keras的方法就是直接使用最新版本的TensorFlow,可以通过以下引入方式在代码中使用Keras。

from tensorflow import keras

此外,Keras具有一个非常活跃的开发者社区,每天都会有大量的开源代码贡献者为Keras提供各种各样的功能。其中Keras-contrib是一个官方的Keras社区扩展版本,包含了很多社区开发者提供的新功能,为Keras的用户提供了更多选择。

Keras-contrib的新功能通过审核后都会整合到Keras核心项目中,如果现在就想在项目中使用,需要单独安装,同样,可以使用pip工具直接安装。

$ sudo pip install git+https://www.github.com/keras-team/keras-contrib.git

随着Karas加入TensorFlow,为了更好地进行代码上的整合,Keras-contrib项目被整合进了TensorFlow Addons。

TensorFlow Addons是一个针对TensorFlow核心库功能的补充,集成了社区最新的一系列方法。由于AI领域发展的速度快,一些最新的算法无法立刻移植到TensorFlow核心库中,所以会优先在TensorFlow Addons中进行发布。

可以使用pip的方式方便地安装TensorFlow Addons,从而使用一些高级的API接口。

$ pip install tensorflow-addons

02 Keras使用入门

Keras包含两种模型类型,第一种是序列模型,第二种是函数式模型。其中后者属于Keras的进阶型模型结构,适用于多入多出、有向无环图或具备共享层的模型,具体可参考Keras官方文档。本节中主要通过介绍序列模型来带读者学习Keras的使用方法。

所谓序列模型是指多个网络层线性堆叠的模型,结构如下列代码所示,该序列模型包含了一个784×32的全连接层、ReLU激活函数、32×10的全连接层以及softmax激活函数。

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activationmodel = Sequential([
Dense(32, input_shape=(784,)),
Activation('relu'),
Dense(10),
Activation('softmax'),
])

也可以使用add() 方法进行序列模型中网络层的添加。

model = Sequential()
model.add(Dense(32,input_dim=784))
model.add(Activation('relu'))

下面我们来看一个用Keras实现的神经网络二分类示例,网络结构非常简单,由两个全连接层构成。示例中包含了网络模型的搭建、模型的编译以及训练,读者可以在自己的设备上尝试运行此代码以熟悉Keras的使用。

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
data = np.random.random((1000,100))
labels = np.random.randint(2,size=(1000,1))
model = Sequential()
model.add(Dense(32,activation='relu', input_dim=100))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])
model.fit(data,labels,epochs=10,batch_size=32)
predictions = model.predict(data)

下面我们根据Keras官网的示例来尝试搭建一个类似VGG网络的卷积神经网络模型。首先引入需要使用的模块,其中包括Keras库中的全连接层、卷积层等。

import numpy as np
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Flatten
from tensorflow.keras.layers import Conv2D, MaxPooling2D
from tensorflow.keras.optimizers import SGD

为了实现模型,我们需要先准备一些训练和测试数据,这里使用随机方法进行数据的准备。

x_train = np.random.random((100, 100, 100, 3))
y_train = keras.utils.to_categorical(np.random.randint(10, size=(100, 1)),
num_classes=10)
x_test = np.random.random((20, 100, 100, 3))
y_test = keras.utils.to_categorical(np.random.randint(10, size=(20, 1)),
num_classes=10)

整体上可以按照VGG的结构来搭建整个网络,包括叠加卷积层、池化层、Dropout层、Max Pooling层、全连接网络层等。

model = Sequential()model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(100, 100, 3)))
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), 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(256, 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)
model.fit(x_train, y_train, batch_size=32, epochs=10)
score = model.evaluate(x_test, y_test, batch_size=32)

同样地,我们也可以使用Keras 的序列模型实现基于LSTM 的循环神经网络模型。

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Embedding,LSTMmodel = Sequential()
model.add(Embedding(20000,128))
model.add(LSTM(128,dropout=0.2,recurrent_dropout=0.2))
model.add(Dense(1,activation='sigmoid'))

下面则是对于该循环神经网络模型的编译与训练,同时最终评估了训练模型的效果。

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=
['accuracy'])
model.fit(x_train, y_train, batch_size=32, epochs=15, verbose=1, validation_data=
(x_test,y_test))
score = model.evaluate(x_test, y_test, batch_size=32)

最终我们可以将模型保存到本地的model文件夹路径下。

model.save('./model')

当在业务中需要使用对应模型时,只需要使用加载模型的方法从model 路径中进行模型的加载即可。

from tensorflow.keras.models import load_model
my_model = load_model('./model')

通过这几个示例我们会发现,使用Keras 来实现那些复杂的深度学习网络像是搭建积木一样,把一些非常复杂的工作简单化了。在下一节中,会通过一个简明的案例带领大家了解如何使用Keras解决实际的应用问题。

03 Keras实例:文本情感分析

本小节中我们通过学习Keras官方的一个实例来熟悉一下Keras的使用方法。

参考链接:

https://github.com/keras-team/keras/blob/master/examples/imdb_lstm.py

情感分析是自然语言处理领域的研究热点,也是一项非常实用的技术,可以利用这项技术来分析用户在互联网上的观点和态度,同时也可以分析企业或商品在互联网上的口碑。

在深度学习中,循环神经网络(RNN)是处理像文本这样的序列模型的最好方式,但传统的RNN存在的问题是,当序列变长后,RNN无法记住之前的重要信息,并且会存在梯度消失的问题。为了解决上述问题,研究者提出了一种长短期记忆网络(LSTM),这也是目前业内处理文本序列非常流行的一种模型(见图2-14)。

▲图2-14 LSTM网络结构示意图

Keras官方已经为大家准备好了LSTM模型的API,并且提供了IMDB电影评论数据集,其中包含了评论内容和打分。下面让我们来看如何使用Keras来解决情感分析的问题。首先引入所有需要的模块。

from __future__ import print_function
from tensorflow.keras.preprocessing import sequence
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Embedding, LSTM
from tensorflow.keras.datasets import imdb

准备好数据,选择最常用的20000个词作为特征数据,并将数据分为训练集和测试集。对于文本数据,这里需要进行长度统一,设置最大长度为80个词,如果超过则截断,不足则补零。

max_features = 20000
maxlen = 80
batch_size = 32(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)
x_train = sequence.pad_sequences(x_train, maxlen=maxlen)
x_test = sequence.pad_sequences(x_test, maxlen=maxlen)

数据处理完成后就可以搭建模型了。首先使用嵌入层作为模型的第一层,将输入的20000维的文字向量转换为128维的稠密向量。接着就是利用LSTM模型进行文本序列的深度学习训练。最终使用全连接层加上Sigmoid激活函数作为最终的判断输出。搭建完毕后还需要为模型设置编译的损失函数和优化器。

model = Sequential()
model.add(Embedding(max_features, 128))
model.add(LSTM(128, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(1, activation='sigmoid'))model.compile(loss='binary_crossentropy',optimizer='adam',
metrics=['accuracy'])

然后就可以训练和评估情感分析的模型了。在Keras帮助下,通过简单的几步就可以完成基于深度学习的文本情感分析的任务。

model.fit(x_train, y_train,
batch_size=batch_size,
epochs=15,
validation_data=(x_test, y_test))
score, acc = model.evaluate(x_test, y_test,
batch_size=batch_size)
print('Test score:', score)
print('Test accuracy:', acc)

在使用Keras框架训练完模型以后,可以通过Keras的save方法将模型保存下来。为了能够更好地让机器学习投入真实世界的应用中去,我们可以为模型封装一个外部的应用程序。在互联网时代,使用网络接入AI模型是对于用户来说成本最低的方式。

为此我们可以搭建一个基于Web的AI应用程序,将模型投入生产环境中为互联网用户提供即时的网页服务。

在Python中常用的Web编程框架是Flask,它是一个非常流行的Python服务端程序框架,相比于在Python领域非常流行的Django,它的特点在于更为精简,去除了一些封装好的服务,只保留了最基本的服务器程序,而其余的扩展可以通过用户自己添加第三方包实现。

关于作者:史丹青,语忆科技联合创始人兼技术负责人,毕业于同济大学电子信息工程系。拥有多年时间的AI领域创业与实战经验,具备深度学习、自然语言处理以及数据可视化等相关知识与技能。是AI技术的爱好者,并拥抱一切新兴科技,始终坚信技术分享和开源精神的力量。

本文摘编自《生成对抗网络入门指南》(第2版),经出版方授权发布。

延伸阅读《生成对抗网络入门指南》(第2版)

点击上图了解及购买

转载请联系微信:DoctorData

推荐语:揭秘AI如何生成逼真人脸图像,追踪GAN前沿技术更新。

划重点

Keras入门必读教程:手把手从安装到解决实际问题相关推荐

  1. TensorFlow和Keras入门必读教程

    导读:本文对TensorFlow的框架和基本示例进行简要介绍. 作者:本杰明·普朗什(Benjamin Planche)艾略特·安德烈斯(Eliot Andres) 来源:大数据DT(ID:hzdas ...

  2. 适合小白的Linux入门学习教程,从安装到实操(涵盖各种常用指令,超详细!)

    Linux入门学习 Linux简介 Linux是什么 Linux的特点 Linux和Windows的区别 Linux入门 我们为什么要学习Linux 环境搭建 安装CentOS 购买云服务器 走进Li ...

  3. Python 安装theano tensorflow keras 教程与pip安装失败解决方法

    这几天一直在折腾Python环境的事,好歹折腾出来,做个总结以备用.(注:由于本机没有独立显卡,因此tensorflow 只安装了CPU版) 安装 官方中文文档 Keras安装和配置指南(Window ...

  4. OriginPro 2021安装教程(手把手式安装)

    鼠标右击软件压缩包,选择"解压到OriginPro 2021". 打开解压后的文件夹下的"OriginPro2021SR0"文件夹,鼠标右击"Setu ...

  5. hadoop入门学习教程--DKHadoop完整安装步骤

    使用hadoop版本是DKH标准三节点发行版,DKHadoop版本的易用性比较好,环境部署要简单的多,参考此篇安装前请先下载DKHadoop版本,网盘链接:https://pan.baidu.com/ ...

  6. 我的美丽天使(My Fair Angel)入门经典教程(下载 安装 汉化 使用)

    迅雷5 上搜索,找那个1.7G的那个 安装: 方法一 用汉化补丁提供的安装功能 最后要按语音补丁 方法2: 1.首先把CD1光盘或者镜像载入. 2.进入光盘根目录,找到GAME这个文件夹,这里面是游戏 ...

  7. 超实用的Django入门基础教程,新手必备!

    Django入门基础教程 Django简介 安装Django 虚拟环境的建立和准备工作 一.通过pycharm创建 手动创建app 迁移数据库 二.手动创建 创建一个新的文件夹 创建虚拟环境 激活虚拟 ...

  8. python软件下载安装教程,python详细安装教程视频

    python安装教程 python安装教程具体如下:1.确定电脑的系统类型. 在安装python之前,你要先确定一下你的电脑的系统类型及详细配置,具体方法如下:点击桌面上的快捷图标"此电脑& ...

  9. 怎么装python的keras库_Keras 教程: Python 深度学习终极入门指南

    在这篇 Keras 教程中, 你将学到如何用 Python 建立一个卷积神经网络! 事实上, 我们将利用著名的 MNIST 数据集, 训练一个准确度超过 99% 的手写数字分类器. 开始之前, 请注意 ...

最新文章

  1. 计算机图形学结课论文,计算机图形学结课论文精要.doc
  2. 设置VS2008 快捷键 快速注释
  3. 什么是软件测试?和软件开发又有什么区别?
  4. R: 绘图 barplot
  5. python基于udp的网络聊天室再用tkinter显示_Python实现网络聊天室的示例代码(支持多人聊天与私聊)...
  6. python字符串去掉标点_在Python去掉标点符号字符串的最佳方式_string_酷徒编程知识库...
  7. html焦点自动轮播幻灯片js,js实现幻灯片轮播图
  8. word 文档规范,比如标题、正文的字号
  9. 如何用html写抖动效果,利用transition实现文字上下抖动的效果
  10. Mac提升效率软件集锦
  11. Codeforces Daily (Round 370-410)
  12. 出入库管理系统php,php销售供应链管理系统
  13. 高德地图 点击获取坐标
  14. webmail 客户端_开源Webmail客户端Isotope入门
  15. jmeter登录压力测试单用户和多用户登录
  16. Java实训项目一一拼图游戏(附源码)
  17. 如何利用Arduino和TFT LCD操控NeoPixel LED灯条
  18. javascript下载文件几种方式,接收后台返回流下载或直接下载文件
  19. io 流相关知识之available()方法的使用总结
  20. VS增强插件 Supercharger破解教程

热门文章

  1. Python笔记-对字符串进行URL编码及解码
  2. C++ opengl 复合运动
  3. c语言程序输出时有没有分号,问什么C程序里总是提示缺少分号;,而明明有分号?...
  4. java 注解入门 简书_Java基础-注解
  5. mac 启动mysql 报错,mac 解决 mysql 启动报错
  6. python 数据库查询系统_python查询数据库操作系统
  7. 操作系统之文件管理:7、文件的系统层次
  8. (计算机组成原理)第二章数据的表示和运算-第二节8:数据的存储和排列
  9. 推动Windows的限制:物理内存
  10. poj2393 其它贪心 挑战程序设计竞赛