深度学习高级,Keras多输入和混合数据实现回归模型,2024Python高级面试题

本文介绍了如何使用Keras的函数式API构建一个处理混合数据的多输入模型,以进行房价预测。模型包括两个输入分支,分别处理数值/分类数据和图像数据,然后将结果合并进行回归预测。数据集包含数字、分类属性以及房屋图片,通过预处理和模型构建,最终实现房价的预测。
摘要由CSDN通过智能技术生成

所有这些值构成了不同的数据类型; 然而,我们的机器学习模型必须能够摄取这种“混合数据”并对其进行(准确)预测。

在使用多种数据模式时,您会在机器学习文献中看到术语“混合数据”。 开发能够处理混合数据的机器学习系统可能极具挑战性,因为每种数据类型可能需要单独的预处理步骤,包括缩放、归一化和特征工程。 处理混合数据仍然是一个非常开放的研究领域,并且通常严重依赖于特定的任务/最终目标。

我们将在今天的教程中处理混合数据,以帮助您了解与之相关的一些挑战。

Keras 如何接受多个输入?

==========================================================================

image-20211103131246814

图 2:与其 Sequential API 不同,Keras 的函数式 API 允许使用更复杂的模型。 在这篇博文中,我们使用函数式 API 来支持我们创建具有多个输入和混合数据的模型以进行房价预测的目标。

Keras 能够通过其功能 API 处理多个输入(甚至多个输出)。 与sequential API(您之前几乎肯定已经通过 Sequential 类使用过)相反,函数式 API 可用于定义更复杂的non-sequential 模型,包括:

  • 多输入型号

  • 多输出型号

  • 多输入多输出模型

  • 有向无环图

  • 具有共享层的模型

例如,我们可以将一个简单的序列神经网络定义为:

model = Sequential()

model.add(Dense(8, input_shape=(10,), activation=“relu”))

model.add(Dense(4, activation=“relu”))

model.add(Dense(1, activation=“linear”))

这个网络是一个简单的前馈神经网络,有 10 个输入,第一个隐藏层有 8 个节点,第二个隐藏层有 4 个节点,最后一个输出层用于回归。

我们可以使用函数式 API 定义示例神经网络:

inputs = Input(shape=(10,))

x = Dense(8, activation=“relu”)(inputs)

x = Dense(4, activation=“relu”)(x)

x = Dense(1, activation=“linear”)(x)

model = Model(inputs, x)

请注意我们如何不再依赖 Sequential 类。 要了解 Keras 函数 API 的强大功能,请考虑以下代码,其中我们创建了一个接受多个输入的模型:

define two sets of inputs

inputA = Input(shape=(32,))

inputB = Input(shape=(128,))

the first branch operates on the first input

x = Dense(8, activation=“relu”)(inputA)

x = Dense(4, activation=“relu”)(x)

x = Model(inputs=inputA, outputs=x)

the second branch opreates on the second input

y = Dense(64, activation=“relu”)(inputB)

y = Dense(32, activation=“relu”)(y)

y = Dense(4, activation=“relu”)(y)

y = Model(inputs=inputB, outputs=y)

combine the output of the two branches

combined = concatenate([x.output, y.output])

apply a FC layer and then a regression prediction on the

combined outputs

z = Dense(2, activation=“relu”)(combined)

z = Dense(1, activation=“linear”)(z)

our model will accept the inputs of the two branches and

then output a single value

model = Model(inputs=[x.input, y.input], outputs=z)

在这里,您可以看到我们为 Keras 神经网络定义了两个输入:

  • 输入A:32-dim

  • 输入B : 128-dim

使用 Keras 的函数式 API 定义了一个简单的 32-8-4 网络。

类似地,定义了一个 128-64-32-4 网络。

然后我们合并 x 和 y 的输出。 x 和 y 的输出都是 4-dim,所以一旦我们将它们连接起来,我们就有一个 8-dim 向量。 然后,我们应用另外两个完全连接的层。第一层有 2 个节点,然后是 ReLU 激活,而第二层只有一个具有线性激活的节点(即我们的回归预测)。 构建多输入模型的最后一步是定义一个模型对象,它:

  • 接受我们的两个输入

  • 将输出定义为最终的 FC 层集(即 z )。

如果您要使用 Keras 来可视化模型架构,它将如下所示:

在这里插入图片描述

图 3:该模型有两个输入分支,最终合并并产生一个输出。 Keras 函数式 API 支持这种类型的架构以及您可以

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值