CNN(卷积神经网络)模型VS如何在R中使用keras CNN模型拟合和预测回归数据
神经网络已经存在很长时间了,那么人工智能和深度学习蓬勃发展的原因是什么最近几年? ? [1 秒] 答案部分在于摩尔定律以及硬件和计算能力的显着改进。现在我们可以用更少的钱做更多的事。顾名思义,神经网络的概念受到我们大脑中神经元网络的启发。神经元是非常长的细胞,每个细胞都有称为树突的突起,可以接收和传播来自周围神经元的电化学信号。结果,我们的脑细胞形成了灵活而强大的通信网络,这种类似装配线的分配过程支持复杂的认知能力,例如播放音乐和绘画。
视频:CNN(卷积神经网络)模型与R语言实现用于数据回归分析的CNN(卷积神经网络)模型的R语言实现拓端数据技术视频·103个播放
神经网络结构
神经网络通常包含一个输入层、一个或多个隐藏层和一个输出层。输入层由 p 个预测变量或输入单元/节点组成。不用说,标准化变量通常会更好。这些输入单元可以连接到第一隐藏层中的一个或多个隐藏单元。与前一层完全连接的隐藏层称为密集层。在图像中,两个隐藏层都被压缩。
输出层的计算预测
输出层计算预测,其中的单元数量由具体问题确定。通常,二元分类问题需要一个输出单元,而具有 k 个类别的多类问题将需要 k 个相应的输出单元。前者可以简单地使用sigmoid函数直接计算概率,而后者通常需要进行softmax变换,将所有k个输出单元中的所有值求和为1,因此可以将其视为概率。不需要分类预测。
权重
图中显示的每个箭头提供与权重相关的输入。每个权重本质上是许多系数估计之一,这些系数估计有助于计算相应箭头指向的节点处的回归
。这些是模型必须通过优化过程调整的未知参数,以最小化损失函数。在训练之前,所有权重都用随机值初始化。
优化和损失函数
在训练之前,我们需要做两件事:一是拟合标准,用于比较所有训练观测值的预测和已知标签;二是拟合标准,用于比较所有训练观测值的预测和已知标签;第二个是梯度下降法的优化计算,本质上是在提高拟合度的方向上同时调整所有权重估计。对于每种方法,我们都有一个损失函数或优化器。损失函数有很多种,所有这些都旨在量化预测误差,例如使用交叉熵
。流行的随机优化方法,例如 Adam。
卷积神经网络
卷积神经网络是一种特殊类型的神经网络,可以很好地用于图像处理,是根据上述原理设计的。名称中的“卷积”是由于滤波器处理图像中的方形像素块。因此,该模型可以在数学上捕获关键的视觉线索。例如,不同动物之间鸟嘴的差异很大。在下面的示例中,卷积神经网络可能会沿着包括卷积、池化和扁平化在内的一系列变换处理喙状结构,最终看到适当神经元的激活,理想情况下,鸟的预测概率是竞争类别中最高的。
图像可以表示为基于颜色强度的数值矩阵。单色图像使用 2D 卷积层进行处理,而彩色图像需要 3D 卷积层,我们使用前者。
内核(也称为滤波器)将方形像素块卷积为后续卷积层中的标量,从上到下扫描图像。
通过此过程,内核执行元素乘法,并将所有乘积求和为单个值,该值传递到下一个卷积层。
内核一次移动一个像素。这是内核执行滚动时使用的滑动窗口的步长,是逐渐调整的。较大的节距尺寸意味着更细、更小的转弯。
聚类是从卷积层中采样,在较低维度上呈现显着特征,防止过度拟合并减轻计算需求。聚类的两种主要类型是平均聚类和最大聚类。使用kernel和stride,池化相当于卷积,但取每帧的平均值或最大值。
扁平化 顾名思义,扁平化只是将最后一个卷积层转换为一维神经网络层。它为事实预测提供了基础。
R 语言实现
CNN(卷积神经网络)模型在用于训练图像等多维数据类型时非常有用。 CNN 模型也可以用于数据的回归分析。之前我们使用Python来回归CNN模型,在本视频中我们在R中实现了相同的方法。
我们使用一维卷积函数来使用CNN模型。要在R中使用Keras Neural Network API,我们需要Keras R接口,如果开发环境中没有,则需要先安装它。本教程涵盖:
- 数据准备
- 定义和拟合模型
- 预测和可视化结果
- 源代码
让我们首先加载本教程所需的库。
- 库(keras)
- 库(caret)
数据准备
在本教程中,我们使用 Boston Housing 数据集作为目标回归数据。首先,我们将加载数据集并将其分为训练集和测试集。
- set.seed(123)
- 波士顿 = MASS::波士顿
- 索引 = createDataPartition(波士顿$medv, p = .85, 列表 = F)
- 火车 = 波士顿[索引,]
- test = boston[-indexes,]
接下来,我们将训练数据和测试数据的x输入和y输出部分分开,并将其转换为矩阵类型。您可能知道,“medv”是 Boston Housing 数据集中 y 数据的输出,也是其中的最后一列。其余列是 x 输入数据。
检查尺寸。
- dim(xtrain)
- [1] 432 13
- dim(ytrain)
- [1] 432 1
接下来,我们将通过添加另一个维度来重新定义 x 输入数据。
- dim(xtrain)
- [1] 432 13 1
- dim(xtest)
- [1] 74 13 1
这里我们可以提取 keras 模型的输入维度。
- print(in_dim)
- [1] 13 1
定义和调整模型
我们定义 Keras 模型并添加一维卷积层。输入形状变为如上定义的 (13,1)。添加 Flatten 和 Dense 层,并将它们与“Adam”优化器结合起来。
- 模型 %>% 摘要()
- ___________________________________________________________________________
- 层(类型)输出形状参数 #
- ===================== = ====================================================== =
- conv1d_2 (Conv1D)(无、12、64) 192
- _____________________________________________________________________________________
- flatten_2(压平)(无、768) 0
- _________________________________________________________________
- d ense_3(密集)(无,32) 24608
- ___________________________________________________________________________________________
- 密集_4(密集)(无,1) 33
- ============================= == === =============================================
- 总计参数:24,833
- 可训练参数:24,833
- 不可训练参数:0
- ____________________________________________________________________________________
-
- 接下来,我们将使用训练数据拟合模型。
- 打印(结果)
- 损失
- 24.20518
预测和可视化结果
现在我们可以使用训练好的模型来预测测试数据。
predict(xtest)
我们将使用 RMSE 指标检查预测的准确性。
- cat("RMSE:", RMSE(ytest, ypred))
- RMSE: 4.935908
最后,我们将绘制结果来检查错误。
- x_axes = seq(1:length(ypred))
- lines(x_axes, ypred, col = "red", type = "l", lwd = 2)
- legend("warm
v在本教程中,我们简要学习了如何使用 R 中的 keras CNN 模型拟合和预测回归数据。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。