当我们将CNN(卷积神经网络)模型用于训练多维类型的数据(例如图像)时,它们非常有用。
我们还可以实现CNN模型进行回归数据分析。我们之前使用Python进行CNN模型回归 ,在本文中,我们在R中实现相同的方法。
视频
CNN(卷积神经网络)模型以及R语言实现
我们使用一维卷积函数来应用CNN模型。我们需要Keras R接口才能在R中使用Keras神经网络API。如果开发环境中不可用,则需要先安装。本教程涵盖:
1.参数共享机制(parameters sharing)
因为,对于不同的区域,我们都共享同一个filter,因此就共享这同一组参数。这也是有道理的,通过前面的讲解我们知道,filter是用来检测特征的,那一个特征一般情况下很可能在不止一个地方出现,比如“竖直边界”,就可能在一幅图中多出出现,那么我们共享同一个filter不仅是合理的,而且是应该这么做的。
由此可见,参数共享机制,让我们的网络的参数数量大大地减少。这样,我们可以用较少的参数,训练出更加好的模型,典型的事半功倍,而且可以有效地 避免过拟合。同样,由于filter的参数共享,即使图片进行了一定的平移操作,我们照样可以识别出特征,这叫做 “平移不变性”。因此,模型就更加稳健了。
2.连接的稀疏性(sparsity of connections)
由卷积的操作可知,输出图像中的任何一个单元,只跟输入图像的一部分有关系。而传统神经网络中,由于都是全连接,所以输出的任何一个单元,都要受输入的所有的单元的影响。这样无形中会对图像的识别效果大打折扣。比较,每一个区域都有自己的专属特征,我们不希望它受到其他区域的影响。
- 准备数据
- 定义和拟合模型
- 预测和可视化结果
- 源代码
我们从加载本教程所需的库开始。
library(keras)
library(caret)
准备
数据在本教程中,我们将波士顿住房数据集用作目标回归数据。首先,我们将加载数据集并将其分为训练和测试集。
set.seed(123)
boston = MASS::Boston
indexes = createDataPartition(boston$medv, p = .85, list = F)
train = boston[indexes,]
test = boston[-indexes,]
接下来,我们将训练数据和测试数据的x输入和y输出部分分开,并将它们转换为矩阵类型。
您可能知道,“ medv”是波士顿住房数据集中的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”优化器对其进行编译。
model %>% summary()
________________________________________________________________________
Layer (type) Output Shape Param #
========================================================================
conv1d_2 (Conv1D) (None, 12, 64) 192
________________________________________________________________________
flatten_2 (Flatten) (None, 768) 0
________________________________________________________________________
dense_3 (Dense) (None, 32) 24608
________________________________________________________________________
dense_4 (Dense) (None, 1) 33
========================================================================
Total params: 24,833
Trainable params: 24,833
Non-trainable params: 0
________________________________________________________________________
接下来,我们将使用训练数据对模型进行拟合。
print(scores)
loss
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("topl
在本教程中,我们简要学习了如何使用R中的keras CNN模型拟合和预测回归数据。
可下载资源
关于作者
Kaizong Ye是拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。
本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。
非常感谢您阅读本文,如需帮助请联系我们!