用于R

时间:2016-03-11 14:39:59

标签: r neural-network classification raster

我正试图利用神经网络的强大功能,使用RSNNS中的R包对大栅格进行图像分类。

至于模型的数据准备和培训,一切都运行得很好,准确性看起来很有希望。

随后,我正在尝试使用函数predict和训练模型对栅格值进行分类。拥有相当大量的数据(rasterstack,维度为10980x10980x16),我正逐块处理数据。这就是问题所在:

类值的预测极其缓慢。我正在研发一台功能非常强大的机器(Windows x64,32GB Ram,i7 3.4GHZ四核),但这个过程几乎耗费了很多年。我已经减少了我的积木的大小,但仍然需要的时间是不可接受的。目前,我将数据拆分为每块64行的块。这将导致总共172个块。如果我假设每个块的线性处理时间(在我的情况下是33分钟!!!),我将花费将近95个小时来处理整个图像。再说一遍,这可能不对。

我已经尝试过其他神经网络包,例如nnet在一分钟内对这些更大的块进行分类。

所以,如果你对我做错了什么有任何指示,我会非常感激。

这是一个类似于我的代码的工作示例:

library(RSNNS)

#example data for training and testing
dat <- matrix(runif(702720),ncol = 16)

#example data to classify
rasval <- matrix(runif(11243520),ncol = 16)

dat <- as.data.frame(dat)

#example class labels from 1 to 11
classes <- matrix(,ncol=1,nrow=nrow(dat))
classes <- apply(classes,1,function(x) floor(runif(1,0,11)))

dat$classes <- classes

#shuffle dataset
dat <- dat[sample(nrow(dat)),]


datValues <- dat[,1:16]
datTargets <- decodeClassLabels(dat[,17])

#split dataset
dat <- splitForTrainingAndTest(datValues, datTargets, ratio=0.15)

#normalize data
dat <- normTrainingAndTestSet(dat)

#extract normalization variables
ncolmeans <- attributes(dat$inputsTrain)$normParams$colMeans
ncolsds <- attributes(dat$inputsTrain)$normParams$colSds

#train model
model <- mlp(dat$inputsTrain, dat$targetsTrain, size=1, learnFunc="SCG", learnFuncParams=c(0, 0, 0, 0), 
             maxit=400, inputsTest=dat$inputsTest, targetsTest=dat$targetsTest)

#normalize raster data
rasval <- sweep(sweep(rasval,2,ncolmeans),2,ncolsds,'/')

#Predict classes ##Problem##
pred <- predict(model,rasval)

1 个答案:

答案 0 :(得分:0)

是的,遗憾的是RSNNS在预测时可能会非常慢。新版本0.4-8(尚未在CRAN上,但你可以从github得到它)应该加快一点速度,但一般的问题是每行数据需要单独传递到SNNS内核,解决这个问题意味着重新实现内核中的一些东西。不是不可能,但有些工作要做。