当前位置: 首页 > 科技观察

独家-手把手教你在R中使用Keras和TensorFlow搭建深度学习模型

时间:2023-03-18 17:08:35 科技观察

简介:R和Python如何取舍一直是大家热议的话题。机器学习世界也被不同的语言偏好所划分。但随着深度学习的普及,天平逐渐向Python倾斜,因为到目前为止Python拥有大量R所没有的深度学习资源库和框架。我个人从R切换到Python,因为我想更深入地研究机器学习领域,这(以前)几乎不可能仅使用R来完成。但仅此而已!随着Keras在R中的实施,语言选择之争又回到了中心舞台。Python几乎已经慢慢成为深度学习建模的默认语言,但是随着以TensorFlow(CPU和GPU兼容)作为后端的R中Keras框架的发布,即使在深度学习领域,R和Python也抢占了先机阶段战争再次打响。下面我们将看到如何在R中安装基于TensorFlow的Keras框架,然后在RStudio中基于经典的MNIST数据集构建我们的第一个神经网络模型。内容列表:KerasframeworkwithTensorFlowbackend安装在R中使用Keras可以构建不同类型的模型在R中使用MLP对MNIST手写数字进行分类MNIST结果与Python中等效代码结果的比较安装TensorFlow作为后台结束Keras框架。在RStudio中安装Keras的步骤非常简单。只需按照以下步骤,您就可以在R中构建您的第一个神经网络模型。现在是时候将keras加载到R中并安装TensorFlow了。library(keras)默认情况下,RStudio会加载CPU版本的TensorFlow。如果CPU版本的TensorFlow没有加载成功,使用如下命令下载。install_tensorflow()要为个人用户或桌面系统安装支持GPU的TensorFlow,请使用以下命令。install_tensorflow(gpu=TRUE)用于多用户安装,请参考此指南:https://tensorflow.rstudio.com/installation_gpu.html。现在在我们的RStudio中,keras和TensorFlow都安装好了。让我们开始在R中构建我们的第一个神经网络来处理MNIST数据集。2.在R中使用keras可以构建的不同类型的模型以下是在R中使用Keras可以构建的模型列表多层感知器ConvolutedNeuralNetworksRecurrentNeuralNetworksNeuralNetworks)Skip-Grammodelusingpre-trained模型(如VGG16、RESNET等)微调预训练模型让我们尝试通过构建一个只有一个隐藏层的简单MLP模型来对手写数字进行分类。三、在R中使用MLP将MNIST手写数字进行归类#loadingkeraslibrarylibrary(keras)#loadingthekerasinbuiltmnistdatasetdata<-dataset_mnist()#separatingtrainandtestfiletrain_x<-data$train$xtrain_y<-data$train$ytest_x<-data$test$xtest_y<-data$test$yrm(data)#convertinga2Darrayintoa1DarrayforfeedingintotheMLPandnormalisingthematrixtrain_x<-array(train_x,dim=c(dim(train_x)[1],prod(dim(train_x)[-1])))/255test_x<-array(test_x,dim=c(dim(test_x)[1],prod(dim(test_x)[-1])))/255#convertingthetargetvariabletooncehotencodedvectorsusingkerasinbuiltfunctiontrain_y<-to_categorical(train_y,10)test_y<-to_categorical(test_y,10)#definingakerassequentialmodel<-keras_model_sequential()#definingthemodelwith1inputlayer[784neurons],1hiddenlayer[784neurons]withdropoutrate0.4and1outputlayer[10neurons]#i.enumberofdigitsfrom0to9model%>%layer_dense(units=784,input_shape=784)%>%layer_dropout(rate=0.4)%>%layer_activation(activation='relu')%>%layer_dense(单位s=10)%>%layer_activation(activation='softmax')#compilingthedefinedmodelwithmetric=accuracyandoptimiserasadam.model%>%compile(loss='categorical_crossentropy',optimizer='adam',metrics=c('accuracy'))#fittingthemodelonthetrainingdatasetmodel%>%fit(train_x,train_y,epochs=100,batch_size=128)#Evaluatingmodelonthecrossvalidationdatasetloss_and_metrics<-model%>%evaluate(test_x,test_y,batch_size=128)以上代码得到99.14%的训练准确率和96.89%的验证准确率运行这段代码在我的i5处理器上完成一次训练需要13.5秒,而在TITANxGPU上,验证准确率可以达到98.44%,训练平均需要2秒。4.使用keras搭建MLP模型——RVs。Python为了更好的对比,我也用Python来解决上面的MINIST分类问题。结果应该没有任何区别,因为R将创建一个进程(conda实例)并在其中运行keras。但您仍然可以尝试以下等效的Python代码。#importingtherequiredlibrariesfortheMLPmodelimportkerasfromkeras.modelsimportSequentialimportnumpyasnp#loadingtheMNISTdatasetfromkeras.datasetsimportmnist(x_train,y_train),(x_test,y_test)=mnist.load_data()#reshapingthex_train,y_train,x_testandy_testtoconformtoMLPinputandoutputdimensions.reshape.x(x-trainpdimensions.x_train_1)[x-trainp_train.x(x_train,y_train),(x_test,y_test)=mnist.加载数据()/255x_test=np.reshape(x_test,(x_test.shape[0],-1))/255importpandasaspdy_train=pd.get_dummies(y_train)y_test=pd.get_dummies(y_test)#performingone-hotencodingontargetvariablesfortrainandtesty_train=np.array(y_train)y_test=np.array(y_test)#definingmodelwithoneinputlayer[784neurons],1hiddenlayer[784neurons]withdropoutrate0.4and1outputlayer[10#neurons]model=Sequential()fromkeras.layersimportDensemodel.add(Dense(784,input_dim=784,activation='relu'))keras.layers.core.Dropout(rate=0.4)model.add(Dense(10,input_dim=784,activation='softmax'))#compilingmodelusingadamoptimiserandaccuracyasmetricmodel.compile(loss='categorical_crossentropy',optimizer="adam",metrics=['accuracy'])#fittingmodelandperformingvalidationmodel.fit(x_train,y_train,epochs=50,batch_size=128,validation_data=(x_test,y_test))以上模型是在同一个上实现的GPU98.42%validationaccuracy那么,和我们一开始猜测的一样,结果是一样的。5.结论如果这是你用R构建的第一个深度学习模型,我希望你喜欢这个过程。使用非常简单的代码,您可以对手写值进行分类,准确率为98%。这应该会给你足够的动力去探索机器学习领域。如果你用过Python中的keras深度学习框架,那么你会发现R中的keras框架的语法和结构与Python中的非常相似。事实上,R中的keras包创建了一个conda环境,并安装了在该环境中运行keras所需的一切。但更让我兴奋的是:看到数据科学家现在使用R来构建关于现实生活的深度学习模型。俗话说,竞争永不止步。