R软件包Deepnet:训练和测试MNIST数据集。

3

我正在尝试使用 deepnet 包的 dbn.dnn.train 函数训练 MNIST 数据集。该任务是一个分类任务。

我正在使用以下命令:

dbn.deepnet <- dbn.dnn.train(train.image.data,train.image.labels,hidden=c(5,5))

我面临的问题是:
1)标签应该是因子类型向量。但是,当我将标签输入为因子时,函数会出现错误,指出“y应该是矩阵或向量”。因此,我将标签用作数字。如何进行分类任务?
2)用于对dbn.dnn.train进行预测的函数是什么?我正在使用nn.predict,但文档提到输入应该是由函数nn.train训练的神经网络(dbn.dnn.train未被提及)。所有记录的输出为0.9986。
nn.predict(dbn.deepnet,train.image.data)

也许你应该尝试使用neuralnet包?请查看这个答案http://stackoverflow.com/questions/21827195/unexpected-output-while-using-neuralnet-in-r 希望能对你有所帮助。 - Dusan Grubjesic
谢谢!但我正在尝试实现深度学习,特别是深度置信网络,而这并没有由neuralnet包提供。 - the M
可以在这里找到使用deepnet训练MNIST的示例,加速信息在这里 - Patric
2个回答

2

您好,不知道您是否还在处理这个问题,或者是否已经找到了解决方案:

1/ 请尝试使用以下代码:train.image.labels <- data.matrix(train.image.labels)

2/ 我使用nn.predict,即使神经网络是通过dbn.dnn.train进行训练的。


1

正如你所知,神经网络的输入值最好在0到1之间。在“deepnet”包中,与nn.train函数不同,对于dbn.dnn.train,您需要自己对输入进行归一化处理。这是加载、训练和测试的完整代码。

#loading MNIST
setwd("path/to/MNIST/")
mnist <- load.mnist(".")
# the function to normalize the input values
normalize <- function(x) {
  return (x/255)
}
# standardization
train_x_n <-  apply(mnist$train$x, c(1,2),FUN = normalize)
test_x_n <- apply(mnist$test$x, c(1,2),FUN = normalize)
#training and prediction
dnn <- dbn.dnn.train(train_x_n, mnist$train$yy, hidden = c(100, 70, 80), numepochs = 3, cd = 3)
err.dnn <- nn.test(dnn, test_x_n, mnist$test$yy)
dnn_predict <- nn.predict(dnn, test_x_n)
# test the outputs
print(err.dnn)
print(dnn_predict[1,])
print(mnist$test$y[1])

输出:
> err.dnn
[1] 0.0829
> dnn_predict[1,]
[1] 7.549055e-04 1.111647e-03 1.946491e-03 7.417489e-03 3.221340e-04 7.306264e-04 4.088365e-05 9.944441e-01 8.953903e-05
[10] 9.085863e-03
> mnist$test$y[1]
[1] 7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接