我正试图利用神经网络的强大功能,使用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)
答案 0 :(得分:0)
是的,遗憾的是RSNNS在预测时可能会非常慢。新版本0.4-8(尚未在CRAN上,但你可以从github得到它)应该加快一点速度,但一般的问题是每行数据需要单独传递到SNNS内核,解决这个问题意味着重新实现内核中的一些东西。不是不可能,但有些工作要做。