在 R 中使用 Keras 构建深度学习图像分类器-600学习网
600学习网终身会员188,所有资源无秘无压缩-购买会员
介绍
深度学习和人工智能的一个重要应用是图像分类。图像分类是根据图像中包含的特定特征或特征对图像进行标记的过程。该算法识别这些特征,并使用它们来区分图像并为其分配标签。
卷积神经网络(CNN)是深度学习图像分类模型的主要组成部分,通常用于图像识别.图像分类.目标检测等类似任务。
Python广泛应用于图像分类。TensorFlow和Keras是在Python中构建图像分类器的两个流行包。但是,这两个库也可以在R环境中使用。本文介绍了一种使用R中的Keras逐步建立深度学习图像分类器模型的方法。
MNIST时尚图像分类器
我们将构建一个图像分类器来对服装图像进行分类,例如裙子.衬衫和夹克。
我们将使用Fashion MNIST数据集,其中包含70000个灰度图像。每个图像都是28 x 28灰度图像,分为10个不同类别。每个图像都附有标签。总共有十个标签:
·T恤/上衣
·裤子
·套头衫
·裙子
·外套
·凉鞋
·衬衫
·运动鞋
·包装
·踝靴
让我们首先导入所有必需的库。
库(keras)
图书馆(tidyverse)
然后使用以下命令直接从Keras导入Fashion MNIST数据集。此外,60000幅图像将用于训练模型,10000幅图像将用来评估模型对图像分类的学习效果。
时尚_ mnist<-数据集_时尚_ mnst()
c(火车图片,火车标签)%<-%时尚
c(测试_图片,测试_标签)%<-%时尚_mnist$test
我们现在有四个数组:train_images和train_label,它们包含训练集。这些是模型用于培训的数据。根据测试集(包括test_images和test_label数组)验证模型。
每个图片是一个28 x 28的数组,像素值范围从0到255。标签是一个从0到9的整数数组。这些与衣服的类别有关。之后,为每个图像分配一个标签。由于类名不包含在数据集中,我们将使用以下命令将它们保存在向量中,并在以后绘制图像时使用它们。
类名称=c(‘T恤/上衣’
“裤子”
“套头衫”
“连衣裙”
“外套”
“Sandal”
“衬衫”
“运动鞋”
“袋子”
“踝靴”)
在训练模型之前,让我们看看数据集的格式。使用以下命令,我们将打印训练图像和训练标签的大小,即60000张图像,每个28×28像素。
dim(列车_图像)
dim(列车标签)
类似地,使用以下命令打印测试图像和测试标签的大小,即10000个图像,每个图像的大小为28 x 28像素。
dim(测试图像)
dim(测试标签)
然后,我们将使用以下命令查看数据集中的示例图像。
选项(repr.plot.width=7,repr.plot.height=7)
样本_图像<-as.data.frame(序列_图像[7,,])
列名(样本_图片)<-seq _ len(ncol(样本_图像))
样品_图像$y<-seq _ len(nrow(样品_图像))
样本_图像<-采集(样本_图像,”x”,”值”,-y)
样本_图像$x<-作为整数(样本_图像$x)
ggplot(样本_图像,aes(x=x,y=y,填充=值))+
geom_tile()+scale_fill_梯度(低=”白涩”,高=”黑涩”,na.值=na)+
scale_y_reverse()+theme_minimal()+主题(panel.grid=element_blank())+
主题(aspect.ratio=1)+xlab(“”)+ylab(“””)
在训练模型之前,必须对数据进行预处理。为了减少像素值,我们必须对数据进行归一化。目前,所有图像像素的值都在0和255之间。我们希望值在0和1之间。因此,我们将所有像素值除以255.0,将其分为训练集和测试集。
列车_图像<-列车_图像/255
test_图像<-test__图像/255
为了确保数据格式正确,让我们看看训练集中的前30幅图像。我们还将在每个图像下面显示类名。
选项(repr.plot.width=10,repr.plot.height=10)
par(mfcol=c(10,10))
par(mar=c(0,0,1.5,0),xaxs=’i’,yaxs=’i’)
对于(i在1:30中){
img<train_图像〔i,,〕
img<-t(适用(img,2,修订版))
图像(1:28,1:28,img,col=灰涩((0:255)/255),xaxt=’n’,yaxt=’n’
main=粘贴(类名称〔列标签〔i〕+1〕)}
现在是建立我们模型的时候了。
构建模型
要构建神经网络,我们需要配置模型的以下层:
1.卷积或卷积2D层:卷积层从图像或图像的一部分提取特征。这里我们指定三个参数:
·过滤器-这是将在卷积中使用的过滤器数量。例如32或64。
·内核大小-卷积窗口的长度。例如(3,3)或(4,4)。
·激活功能-例如,ReLU.Leaky ReLU,Tanh和Sigmaid。
2.Pooling或MaxPooling2D层:此层用于减小图像的大小。
3.平面层:该层将n维数组减少为一维。
4.致密层:该层是完全连接的,这意味着当前层中的所有神经元都连接到下一层。对于我们的模型,第一个致密层有128个神经元,第二个致密层则有10个神经元。
5.丢弃层:为了防止模型过度拟合,该层忽略一组神经元(随机)。
model<-keras_model_sequential()
型号%>%
层_ conv _ 2d(滤波器=32,核_大小=c(3,3)
激活=”relu”,输入_形状=c(28,28,1))%>%
层_最大_池_ 2d(池_大小=c(2,2))%>%
层展平()%>%
层_致密(单位=128,活化=’relu’)%>%
层_脱落(率=0.5)%>%
层_致密(单位=10,活化=”softmax”)
在模型准备好进行训练之前,需要进行一些附加设置。这些将在模型编译步骤中添加:
1.损失函数-此函数评估我们的算法如何有效地表示数据集。根据我们的数据集,我们可以选择”类别交叉熵”
“二进制交叉条目”和”稀疏分类交叉条目”。
2.优化器-有了它,我们可以调整神经网络的权重和学习速率。我们可以从许多优化器中选择,如Adam.AdaDelta.SGD等。
3.指标–这些指标用于评估我们模型的性能。例如,精度.均方误差等。
模型%>%编译(
损失=”稀疏_类别_交叉熵”
优化器=”adam”
度量=c(“精度”)
)
可以使用”摘要”功能查看模型层中的所有参数和形状,如下所示。
摘要(模型)
要开始训练,我们将调用fit方法,该方法将使用训练和测试数据以及以下输入来拟合我们的模型:
历史%fit(x_列车,列车_标签,纪元=20,详细=2)
1.大纪元–整个数据集通过神经网络向前和向后发送的次数。详细–查看我们的输出选择。例如,verbose=0不打印任何内容
2.verbose=1打印进度条和每历元打印一行,verbose=2打印每历元一行。
在使用20 Epoch运行模型后,我们获得了97.36%的训练准确率。
分数%评估(x_列,列_标签)
cat(“火车损失:”,得分$loss,”n”)
cat(“列车精度:”,得分$acc,”n”)
我们可以使用以下命令绘制精度损失图和Epoch:
情节(历史)
现在我们将在测试数据集上看到模型的性能:
分数%评估(x_测试,测试_标签)
cat(“测试损失:”,得分$loss,”n”)
cat(“测试精度:”,得分$acc,”n”)
我们在测试数据集上获得了91.6%的准确度。我们可以使用训练的模型来预测一些测试图像。
预测%预测(x_检验)
我们从模型中得到预测,即测试集中每个图像的标签。让我们看看第一个预测:
预测[1,]
预测是十位数。这些表达了模型的”信心”。
另外,我们还可以使用以下命令直接打印类预测:
class_pred%预测_class(x_test)
等级_ pred[1:20]
现在我们将用他们的预测绘制一些图像。正确的预测是蓝涩的,错误的预测是红涩的。
选项(repr.plot.width=7,repr.plot.height=7)
par(mfcol=c(5,5))
par(mar=c(0,0,1.5,0),xaxs=’i’,yaxs=’i’)
对于(i在1:25中){
img<-test_图像〔i,,〕
img<-t(适用(img,2,修订版))
predicted标记<-which.max(predictives〔i,〕)-1
真_标签<-测试_标签〔i〕
如果(预测的_标签==真的_标签){颜涩<-’蓝涩’}
其他的
{颜涩<-’红涩’}
图像(1:28,1:28,img,col=灰涩((0:255)/255),xaxt=’n’,yaxt=’n’
main=paste0(类名称〔预测的标签+1〕
“(“,class_name〔true_label+1〕,”)”),col.main=color)}
这是在R!
结论
在本文中,我们学习了如何在R中使用Keras构建深度学习图像分类器。该模型具有较高的试验数据精度。然而,重要的是要记住,准确度可能因训练集而异。因此,该模型不适用于与训练图像不同的图像。
本文的主要内容如下:
Tensorflow和Keras都有官方的R支持。就像Python一样,在R中建立和训练模型很容易。本文中的方法可以应用于另一个图像数据集进行分类,或者训练后的模型可以保存并部署为应用程序。
600学习网 » 在 R 中使用 Keras 构建深度学习图像分类器-600学习网