Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Keras中神经网络模型的5阶段生命周期

Keras中神经网络模型的5阶段生命周期

作者头像
用户1161128
发布于 2018-02-05 07:16:08
发布于 2018-02-05 07:16:08
3.2K0
举报

使用Python的Keras库可以很容易创建和评测深度学习神经网络,但是您必须遵循严格的模型生命周期。

在这篇文章中,您将了解在Keras中创建,训练和评估深度学习神经网络的模型生命周期的每一步,以及如何使用训练好的模型进行预测。

阅读这篇文章后,你会知道:

  • 如何在Keras中定义,编译,拟合和评估深度学习神经网络。
  • 如何为回归和分类预测建模问题选取标准默认值。
  • 如何将它们结合在一起开发和运行您在Keras的第一个多层感知机网络。

让我们开始吧。

  • 2017年3月更新:新增Keras 2.0.2,TensorFlow 1.0.1和Theano 0.9.0的示例。

Keras的深度学习神经网络生命周期

照片由Martin Stitchener

拍摄,保留部分权利。

概观

以下是Keras神经网络模型生命周期中5个步骤的概述。

  1. 定义网络。
  2. 编译网络。
  3. 拟合网络。
  4. 评估网络。
  5. 作出预测。

Keras中神经网络模型的5阶生命周期

第1步 定义网络

第一步是定义你的神经网络。

神经网络在Keras中的本质是一系列堆叠起来的层。这些层的容器是Sequential类。

第一步是创建Sequential类的一个实例。然后,您可以创建图层,并按照应有的顺序连接它们。

例如,我们可以分两步进行:

代码语言:txt
AI代码解释
复制
model = Sequential()

model.add(Dense(2))

但是,我们也可以通过创建一个图层数组,并将其传递给Sequential的构造函数来一步完成此操作。

代码语言:txt
AI代码解释
复制
layers = [Dense(2)]

model = Sequential(layers)

网络中的第一层必须定义预期输入的数量。指定的方式可能因网络类型而异,但对于多层感知器模型,这由input_dim属性指定。

例如,对于一个小型的多层感知机模型,如果第一层接受两个输入数据,中间层有5个神经元,输出层有一个神经元,可以如下定义:

代码语言:txt
AI代码解释
复制
model = Sequential()

model.add(Dense(5, input_dim=2))

model.add(Dense(1))

可以将Sequential模型想象成一个管道,将原始数据输入到底部,然后在顶部输出预测结果。

这种观念在Keras中非常有用,因为传统上在一个图层中完成的各种事情,可以被拆分到多个图层中逐一完成,然后再添加、堆叠起来,这样可以清楚地显示出各个小图层在从输入数据到做出预测这一过程中的数据转换中的作用。例如,我们可以提取每个层中把各个神经元的输出信号的进行求和的激活函数,并将其作为一个新的层,称为Activation层,再添加到Sequential序列中。

代码语言:txt
AI代码解释
复制
model = Sequential()

model.add(Dense(5, input\_dim=2))

model.add(Activation('relu'))

model.add(Dense(1))

model.add(Activation('sigmoid'))

激活函数的选择对于输出层来说尤为重要,因为它决定了预测结果的格式。

例如,下面是一些常见预测问题的类型,以及您可以在输出层中使用的结构和标准激活函数:

  • 回归:线性激活函数,即"linear”,输出层神经元数量与输出结果的数量要一致。
  • 二分类(2类):Logistic激活函数,即“sigmoid”,输出层只有一个神经元。
  • 多分类(> 2类):假设使用独热(one-hot)编码输出模式,Softmax激活函数,即“softmax”,输出层神经元数量与要求进行分类的类别数量一致。

第2步 编译网络

一旦我们定义了我们的网络,我们下一步就是编译它。

编译的目的是提高效率。它将我们所定义的简单的图层序列模型转换成一系列可以高效执行的矩阵,这些矩阵的格式取决于你对于Keras的配置。转换后的矩阵可以在你的CPU或GPU上执行。

不妨将编译看作是网络的预计算步骤。

编译是定义模型之后必须进行的步骤。所谓定义模型包括对现有模型采取优化方案,以及从保存的文件中加载一组预先训练的权重。进行编译步骤的原因是它为网络模型准备了一个高效的网络表示,这也是在硬件上进行预测所必需的。

编译需要指定一些参数,为您的网络模型定制训练方案,尤其需要指定的参数是用于训练网络的优化算法和该优化算法所使用的损失函数。

下面是一个展现如何编译定义好的模型的例子,(对于回归问题模型)指定随机梯度下降(sgd)作为优化算法和均方误差(mse)作为损失函数。

代码语言:txt
AI代码解释
复制
# 该model是一个回归问题模型
model.compile(optimizer='sgd', loss='mse')

预测建模问题的类型决定了能够使用哪些损失函数。

例如,下面是不同预测模型类型所使用的一些标准损失函数:

  • 回归:均方误差,即“ mse ”。
  • 二元分类(2类):对数损失,也称为交叉熵或“ binary_crossentrop ”。
  • 多类分类(> 2类):多对数损失,即“ categorical_crossentropy ”。

您可以查看Keras支持的损失函数套件

最常见的优化算法是随机梯度下降,但是Keras还支持一些其他的先进优化算法

某些算法通常具有更好的性能,所以成为了最常用的优化算法,它们应该是:

  • 随机梯度下降,即“ sgd ”:需要调整学习速率和动量。
  • ADAM,即“ adam ”:需要调整学习速率。
  • RMSprop,即' rmsprop ':需要调整学习速率。

最后,除了损失函数之外,还可以指定额外的在拟合模型时测量的指标。一般来说,对于分类问题,最有用的额外指标是的准确性。如果要测量额外的指标,需要在数组中用它们的名字来指定。

例如:

代码语言:txt
AI代码解释
复制
# 在数组中指定需要测量的指标的名字
model.compile(optimizer='sgd', loss='mse', metrics=['accuracy'])

第3步 拟合网络

一旦网络编译完成,就可以进行拟合,其本质是使用训练数据集不断调整网络上各节点的权重。

拟合网络需要指定训练数据,包括与输入层神经元数匹配的矩阵X和与输出层神经元数匹配的向量y。

网络模型会使用反向传播算法进行训练,并根据编译模型时指定的优化算法和损失函数进行优化。

反向传播算法要求对训练数据集指定参数epoch,也就指定要过几遍整个数据集。

每个epoch可以分成几组,每组称为一个batch,每个batch都包含着一批样本数据x及其对应的标记y。这指定了一个epoch内你的网络模型每一次吃进去的数据的数量。这也是一个对效率的优化,确保一次不会有太多的数据被加载到内存中。

拟合网络的一个最简单的例子如下:

代码语言:txt
AI代码解释
复制
# 对整个数据集过100次,每次分10批喂给模型
history = model.fit(X, y, batch_size=10, epochs=100)

拟合完成后,就会返回一个历史对象,这个对象提供了训练过程中模型性能的各种信息的概览,包括损失函数的结果和编译模型时指定的任何其他指标。每个epoch的信息都会记录下来。

第4步 评估网络

网络训练完后,就可以进行评估。

网络可以在训练数据上进行评估,但是这并不能提供关于这个网络预测能力的信息,因为这个网络模型就是在训练数据上建立起来的。

我们可以在另一个在训练时没有用到的数据集上评估网络的性能。这让我们估计这个网络在未来对没有见过的数据进行预测时的性能。

在Keras中,用这个训练好的网络模型在测试数据集上进行测试时,可以看到包括损失函数的结果在内的所有在编译时指定的测量指标的结果,比如分类的准确度。Keras会返回一个包含这些评估指标的list。

例如,对于在编译时指定了使用准确度作为测量指标的模型,我们可以在新数据集上对其进行评估,如下所示:

代码语言:txt
AI代码解释
复制
# 返回一个list:[loss, accuracy]
loss, accuracy = model.evaluate(X, y)

步骤5 进行预测

最后,一旦我们对模型的性能满意,我们就可以用它来预测新的数据。

做法很简单,只需传入一组新的输入数据,调用模型的 predict() 函数。

例如:

代码语言:txt
AI代码解释
复制
predictions = model.predict(x)

预测结果的格式取决于网络的输出层的结构。

在回归问题的情况下,这些预测结果可能就是问题的答案,由线性激活函数产生。

对于二分类问题,预测结果可能是该输入样本属于第一类的概率,这个概率可以通过舍入转换为1或0。

对于多分类问题,结果可能是一个概率数组的形式(假设输出一个one-hot向量),可能需要使用argmax函数将概率数组转换为单个类别。

全过程示例

让我们把所有这些与一个小小的例子结合在一起。

这个例子将使用一个二分类问题:对皮马印第安人是否患糖尿病的诊断,您可以从UCI机器学习库下载

问题有8个输入变量和一个输出变量,输出值为整数0或1。

我们将构建一个多层感知神经网络,在可见层(输入层)有8个输入神经元,隐层(中间层)中有12个神经元,包含rectifier(relu)激活函数,输出层有1个神经元,带有S形(sigmoid)激活函数。

我们将使用ADAM优化算法和对数损失函数,对batch大小为10的网络进行100个epoch的训练。

拟合完成后,我们将在训练数据上评估模型,然后在训练数据上在进行测。这样做并不正规,只是为了简便而已,正常的情况应该是在单独的测试数据集上评估模型,并对新数据进行预测。

下面提供了完整的代码。

代码语言:txt
AI代码解释
复制
 # 在Keras中使用多层感知机的例子

from keras.models import Sequential

from keras.layers import Dense

import numpy

# 加载数据集,并对数据做预处理

dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",")

X = dataset[:,0:8]

Y = dataset[:,8]

# 1. 定义网络

model = Sequential()

model.add(Dense(12, input\_dim=8, activation='relu'))

model.add(Dense(1, activation='sigmoid'))

# 2. 编译网络

model.compile(loss='binary\_crossentropy', optimizer='adam', metrics=['accuracy'])

# 3. 拟合网络

history = model.fit(X, Y, epochs=100, batch\_size=10)

# 4. 评估网络

loss, accuracy = model.evaluate(X, Y)

print("\nLoss: %.2f, Accuracy: %.2f%%" % (loss, accuracy\*100))

# 5. 进行预测

probabilities = model.predict(X)

predictions = [float(round(x)) for x in probabilities]

accuracy = numpy.mean(predictions == Y)

print("Prediction Accuracy: %.2f%%" % (accuracy\*100))

运行这个例子将产生下面的输出:

代码语言:txt
AI代码解释
复制
 ...

768/768 [==============================] - 0s - loss: 0.5219 - acc: 0.7591

Epoch 99/100

768/768 [==============================] - 0s - loss: 0.5250 - acc: 0.7474

Epoch 100/100

768/768 [==============================] - 0s - loss: 0.5416 - acc: 0.7331

32/768 [>.............................] - ETA: 0s

Loss: 0.51, Accuracy: 74.87%

Prediction Accuracy: 74.87%

总结

在这篇文章中,你了解了使用Keras库的深度学习神经网络的5阶段生命周期。

具体来说,你了解到:

  • 如何在Keras中定义,编译,拟合,评估和预测神经网络。
  • 如何为分类和回归问题选择激活函数和配置输出层结构。
  • 如何在Keras开发和运行您的第一个多层感知机模型。

你有关于Keras的神经网络模型或关于这个职位的任何问题?在评论中提出您的问题,我会尽我所能来回答。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
谷歌Gemini1.5火速上线:MoE架构,100万上下文
Gemini 1.5 建立在谷歌基础模型开发和基础设施的研究与工程创新的基础上,包括通过新的专家混合 (MoE) 架构使 Gemini 1.5 的训练和服务更加高效。
机器之心
2024/02/26
2310
谷歌Gemini1.5火速上线:MoE架构,100万上下文
谷歌Gemini 1.5深夜爆炸上线,史诗级多模态硬刚GPT-5!最强MoE首破100万极限上下文纪录
就在刚刚,谷歌DeepMind首席科学家Jeff Dean,以及联创兼CEO的Demis Hassabis激动地宣布了最新一代多模态大模型——Gemini 1.5系列的诞生。
新智元
2024/02/26
3150
谷歌Gemini 1.5深夜爆炸上线,史诗级多模态硬刚GPT-5!最强MoE首破100万极限上下文纪录
关于谷歌多模态人工智能Gemini的一切
谷歌的Gemini是人工智能发展中的一个重要里程碑,标志着从单模态系统向更复杂的多模态模型的转变。
云云众生s
2024/03/28
6200
关于谷歌多模态人工智能Gemini的一切
谷歌Gemini 1.5技术报告:轻松证明奥数题,Flash版比GPT-4 Turbo快5倍
今年 2 月,谷歌上线了多模态大模型 Gemini1.5,通过工程和基础设施优化、MoE 架构等策略大幅提升了性能和速度。拥有更长的上下文,更强推理能力,可以更好地处理跨模态内容。
机器之心
2024/05/22
5360
谷歌Gemini 1.5技术报告:轻松证明奥数题,Flash版比GPT-4 Turbo快5倍
震撼!谷歌推出AI大模型Gemini Ultra,7胜GPT-4!这是AI的新里程碑还是终结者?
谷歌的多模态AI模型Gemini再升级,其中的Ultra版本在基准测试中大放异彩,力压GPT-4!
Dlimeng
2024/05/24
1040
震撼!谷歌推出AI大模型Gemini Ultra,7胜GPT-4!这是AI的新里程碑还是终结者?
谷歌推出新一代深度学习大模型Gemini
自 OpenAI 推出 ChatGPT 以来,国内外大模型迅速遍地开花,紧随其后的有百度文心一言、谷歌 Bard、阿里通义千问、讯飞星火、360智脑,还有后来腾讯的混元、昆仑万维的天工、华为的盘古、小米的小爱和 vivo的蓝心等。
德顺
2023/12/09
3650
谷歌推出新一代深度学习大模型Gemini
谷歌数学版Gemini破解奥赛难题,堪比人类数学家!
谷歌I/O发布会上,劈柴宣布了Gemini 1.5 Pro一系列升级,包括支持更长上下文200k,超过35种语言。
新智元
2024/05/22
940
谷歌数学版Gemini破解奥赛难题,堪比人类数学家!
Gemini:我们最大最强的AI模型
每一次技术变革都提供了推进科学发现、加速人类进步和改善生活的机会。我相信我们现在看到的 AI 转型将是我们有生之年中最深远的一次,其影响远远超过之前的移动转型或网络转型。AI 有可能为全球各地的人们创造各种机会,从日常生活到非凡发现。
云云众生s
2024/03/28
3010
Gemini:我们最大最强的AI模型
谷歌发布 Gemini:我们还是一家强大的公司
过去半年, 在OpenAI 持续迭代,不断赚足大众视线之际,谷歌迟迟没有发声。直至今日凌晨,谷歌直接丢出了一个重磅炸弹,带着耗时一年之久的多模态模型 Gemini 来了。
AI科技评论
2023/12/11
3310
谷歌发布 Gemini:我们还是一家强大的公司
新火种AI|谷歌深夜发布复仇神器Gemini,原生多模态碾压GPT-4?
北京时间12月7日凌晨,谷歌CEO“劈柴”突然发布重磅AI杀手锏——Gemini。就在前几天,还有消息说Gemini要推迟一个月才上线,结果现在这么突然地发布,着实让AI圈料不到。以谷歌以往的实力,不用想,这又是AI界的一个“不眠之夜”。
新火种
2023/12/07
2210
Gemini Pro 1.5对外开放使用,最高支持1000万上下文
2023年12月,Google发布了Gemini系列大模型,包含3个不同参数规模的版本。其中,Gemini Ultra号称在MMLU评测上超过了GPT-4,并且在月初也将Bard更名为Gemini,开放了Gemini Ultra的付费使用。
德顺
2024/03/29
7630
OpenAI深夜被狙,谷歌Gemini 2.0掀翻牌桌!最强智能体组团击毙o1
就在刚刚,谷歌CEO劈柴、DeepMind CEO哈萨比斯、DeepMind CTO Kavukcuoglu三位大佬联手官宣:新一代原生多模态模型Gemini 2.0 Flash正式发布!
新智元
2025/02/15
1050
OpenAI深夜被狙,谷歌Gemini 2.0掀翻牌桌!最强智能体组团击毙o1
Google 史上最强大模型 Gemini,全面「碾压」GPT-4 ?
在昨晚,谷歌CEO桑达尔·皮查伊官宣了一个令人振奋的消息:Google的全新AI大模型Gemini 1.0正式上线了!
吾非同
2023/12/11
3680
首个多模态视频竞技场Video-MME来了!Gemini全面超越GPT-4o,Jeff Dean连转三次
不过近日,谷歌的Gemini终于扬眉吐气了一把,在全新的、更复杂的多模态考试中大获全胜,全面超越了GPT-4o。
新智元
2024/06/28
1870
首个多模态视频竞技场Video-MME来了!Gemini全面超越GPT-4o,Jeff Dean连转三次
全面突围,谷歌昨晚更新了一大波大模型产品
当地时间本周二,谷歌在 Google’s Cloud Next 2024 上发布了一系列 AI 相关的模型更新和产品,包括 Gemini 1.5 Pro 首次提供了本地音频(语音)理解功能、代码生成新模型 CodeGemma、首款自研 Arm 处理器 Axion 等等。
机器之心
2024/04/12
1060
全面突围,谷歌昨晚更新了一大波大模型产品
冲击DeepSeek R1,谷歌发布新一代Gemini全型号刷榜,编程、物理模拟能力炸裂
本周三,该公司全面发布 Gemini 2.0 Flash、 Gemini 2.0 Flash-Lite 以及新一代旗舰大模型 Gemini 2.0 Pro 实验版本,并且还在 Gemini App 中推出了其推理模型 Gemini 2.0 Flash Thinking。
机器之心
2025/02/06
4550
冲击DeepSeek R1,谷歌发布新一代Gemini全型号刷榜,编程、物理模拟能力炸裂
谷歌最强大模型Gemini 2.0被抬上来了,网友:好科幻
作为应对,周三,谷歌推出新一代至强 AI 大模型 Gemini 2.0 Flash 。
机器之心
2025/02/14
1130
谷歌最强大模型Gemini 2.0被抬上来了,网友:好科幻
谷歌发布多模态大模型Gemini,性能超GPT-4!TPU v5p芯片性能提升2.8倍!
12月7日凌晨,谷歌CEO桑达尔・皮查伊和Deepmind CEO戴密斯·哈萨比斯在谷歌官网联名发文,宣布最新多模态大模型Gemini 1.0(双子星)版本正式上线,其性能有望超过OpenAI GPT-4 模型。与此同时,谷歌还推出了该公司“最强大”的可扩展且灵活的人工智能加速器Cloud TPU v5p 。
芯智讯
2023/12/12
6530
谷歌发布多模态大模型Gemini,性能超GPT-4!TPU v5p芯片性能提升2.8倍!
我“AI”发文——谷歌Bard与Gemini模型技术解析
谷歌在人工智能领域不断突破,Bard和Gemini是其推出的两款先进AI模型,分别侧重自然语言处理和多模态学习。本文将详细解析这两项技术,并结合具体案例进行说明。
LucianaiB
2025/03/30
1310
AI: 当前流行的大模型智能水平排名
在当前的人工智能和自然语言处理领域中,多个大模型正在不断推动技术的前沿发展。这些大模型的智能水平可以通过一系列的标准化基准测试来评估,如MMLU、GPQA、MATH、MGSM、DROP和HumanEval。
运维开发王义杰
2024/08/05
1.6K0
AI: 当前流行的大模型智能水平排名
推荐阅读
相关推荐
谷歌Gemini1.5火速上线:MoE架构,100万上下文
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档