发布日期:Oct 25, 2016 1:15:14 PM
1. 打开R
2. 输入以下命令安装CPU版的Mxnet
install.packages("drat", repos="https://cran.rstudio.com")
drat:::addRepo("dmlc")
install.packages("mxnet")
3. 输入library(mxnet),验证Mxnet是否可以在R下运行。
4. 以上就安装好的CPU版R语言的Mxnet了。
如果要使用GPU,需要自己编译。
编译方法请参见-> Windows上安装和编译Mxnet教程(GPU版)
5. 在步骤2的途中,我们可以看见mxnet被安装在 D:/lhl88/Documents/R/win-library/3.3
我们把自己编译好的 libmxnet.dll 和 libmxnet.lib 替换 D:\lhl88\Documents\R\win-library\3.3\mxnet\libs\x64 中的文件
6. 然后再打开R,用下面代码测试GPU版R的Mxnet是否可以用。没有错误的话就说明可以用了。
list.of.packages <- c("R.utils")
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)
setwd(tempdir())
download.file("http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz", destfile="train-images-idx3-ubyte.gz")
download.file("http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz", destfile="train-labels-idx1-ubyte.gz")
download.file("http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz", destfile="t10k-images-idx3-ubyte.gz")
download.file("http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz", destfile="t10k-labels-idx1-ubyte.gz")
require(R.utils)
gunzip("train-images-idx3-ubyte.gz")
gunzip("train-labels-idx1-ubyte.gz")
gunzip("t10k-images-idx3-ubyte.gz")
gunzip("t10k-labels-idx1-ubyte.gz")
require(mxnet)
# Network configuration
batch.size <- 100
data <- mx.symbol.Variable("data")
fc1 <- mx.symbol.FullyConnected(data, name="fc1", num_hidden=128)
act1 <- mx.symbol.Activation(fc1, name="relu1", act_type="relu")
fc2 <- mx.symbol.FullyConnected(act1, name = "fc2", num_hidden = 64)
act2 <- mx.symbol.Activation(fc2, name="relu2", act_type="relu")
fc3 <- mx.symbol.FullyConnected(act2, name="fc3", num_hidden=10)
softmax <- mx.symbol.Softmax(fc3, name = "sm")
dtrain = mx.io.MNISTIter(
image="train-images-idx3-ubyte",
label="train-labels-idx1-ubyte",
data.shape=c(784),
batch.size=batch.size,
shuffle=TRUE,
flat=TRUE,
silent=0,
seed=10)
dtest = mx.io.MNISTIter(
image="t10k-images-idx3-ubyte",
label="t10k-labels-idx1-ubyte",
data.shape=c(784),
batch.size=batch.size,
shuffle=FALSE,
flat=TRUE,
silent=0)
mx.set.seed(0)
devices = mx.gpu(0)
# create the model
model <- mx.model.FeedForward.create(softmax, X=dtrain, eval.data=dtest,
ctx=devices, num.round=1,
learning.rate=0.1, momentum=0.9,
initializer=mx.init.uniform(0.07),
epoch.end.callback=mx.callback.save.checkpoint("chkpt"),
batch.end.callback=mx.callback.log.train.metric(100))
# do prediction
pred <- predict(model, dtest)
label <- mx.io.extract(dtest, "label")
dataX <- mx.io.extract(dtest, "data")
# Predict with R's array
pred2 <- predict(model, X=dataX)
accuracy <- function(label, pred) {
ypred = max.col(t(as.array(pred)))
return(sum((as.array(label) + 1) == ypred) / length(label))
}
print(paste0("Finish prediction... accuracy=", accuracy(label, pred)))
print(paste0("Finish prediction... accuracy2=", accuracy(label, pred2)))