【问题标题】:Regression using MXNet in R with image recognition在 R 中使用带有图像识别的 MXNet 进行回归
【发布时间】:2018-01-01 09:11:37
【问题描述】:

所以我尝试使用图像识别来输出回归样式编号,使用 R 中的 mxnet 包使用 CNN。

我以此为基础分析:https://rstudio-pubs-static.s3.amazonaws.com/236125_e0423e328e4b437888423d3821626d92.html

这是使用 CNN 在 R 中使用 mxnet 进行的图像识别分析,因此我按照这些步骤通过执行相同的步骤、调整大小、灰度化来准备我的数据进行预处理。

我的“图像”数据集如下所示,我有 784 列像素,最后一列是带有“标签”的数字列,我试图预测它是:1132、1491、845、等等。

从那里,我创建了一个训练和测试:

    library(pbapply)
library(caret)
## test/training partitions
training_index <- createDataPartition(image$STOPPING_TIME, p = .9, times = 1)
training_index <- unlist(training_index)
train_set <- image[training_index,]
dim(train_set)
test_set <- image[-training_index,]
dim(test_set)


## Fix train and test datasets
train_data <- data.matrix(train_set)
train_x <- t(train_data[, -785])
train_y <- train_data[,785]
train_array <- train_x
dim(train_array) <- c(28, 28, 1, ncol(train_x))

test_data <- data.matrix(test_set)
test_x <- t(test_set[,-785])
test_y <- test_set[,785]
test_array <- test_x
dim(test_array) <- c(28, 28, 1, ncol(test_x))

现在我开始使用 mxnet,这是导致问题的原因,不确定我做错了什么:

library(mxnet)
## Model
mx_data <- mx.symbol.Variable('data')
## 1st convolutional layer 5x5 kernel and 20 filters.
conv_1 <- mx.symbol.Convolution(data = mx_data, kernel = c(5, 5), num_filter = 20)
tanh_1 <- mx.symbol.Activation(data = conv_1, act_type = "tanh")
pool_1 <- mx.symbol.Pooling(data = tanh_1, pool_type = "max", kernel = c(2, 2), stride = c(2,2 ))
## 2nd convolutional layer 5x5 kernel and 50 filters.
conv_2 <- mx.symbol.Convolution(data = pool_1, kernel = c(5,5), num_filter = 50)
tanh_2 <- mx.symbol.Activation(data = conv_2, act_type = "tanh")
pool_2 <- mx.symbol.Pooling(data = tanh_2, pool_type = "max", kernel = c(2, 2), stride = c(2, 2))
## 1st fully connected layer
flat <- mx.symbol.Flatten(data = pool_2)
fcl_1 <- mx.symbol.FullyConnected(data = flat, num_hidden = 500)
tanh_3 <- mx.symbol.Activation(data = fcl_1, act_type = "tanh")
## 2nd fully connected layer
fcl_2 <- mx.symbol.FullyConnected(data = tanh_3, num_hidden = 2)
## Output
label <- mx.symbol.Variable("label")
NN_model <- mx.symbol.MakeLoss(mx.symbol.square(mx.symbol.Reshape(fcl_2, shape = 0) - label))


## Set seed for reproducibility
mx.set.seed(100)


## Train on 1200 samples
model <- mx.model.FeedForward.create(NN_model, X = train_array, y = train_y,
                                     num.round = 30,
                                     array.batch.size = 100,
                                    initializer=mx.init.uniform(0.002), 
                                     learning.rate = 0.05,
                                     momentum = 0.9,
                                     wd = 0.00001,
                                     eval.metric = mx.metric.rmse)
                                     epoch.end.callback = mx.callback.log.train.metric(100))

我得到错误:

[00:30:08] D:\Program Files (x86)\Jenkins\workspace\mxnet\mxnet\dmlc-core\include\dmlc/logging.h:308: [00:30:08] d:\program files (x86)\jenkins\workspace\mxnet\mxnet\src\operator\tensor\./matrix_op-inl.h:134: Check failed: oshape.Size() == dshape.Size() (100 vs. 200) Target shape size is different to source. Target: (100,)
Source: (100,2)
Error in symbol$infer.shape(list(...)) : 
  Error in operator reshape9: [00:30:08] d:\program files (x86)\jenkins\workspace\mxnet\mxnet\src\operator\tensor\./matrix_op-inl.h:134: Check failed: oshape.Size() == dshape.Size() (100 vs. 200) Target shape size is different to source. Target: (100,)
Source: (100,2)

如果我使用它,我可以让它工作

NN_model

并将 rmse 保留在那里,但在 30 次迭代后它不会提高我的模型的性能。

谢谢!

【问题讨论】:

  • 你能让你的问题重现吗?

标签: r conv-neural-network mxnet


【解决方案1】:

您的最后一个全连接层fcl_2 &lt;- mx.symbol.FullyConnected(data = tanh_3, num_hidden = 2) 创建了一个(batch_size, 2) 的输出形状,重新调整它的形状为(2 * batch_size)

那么你在做(mx.symbol.Reshape(fcl_2, shape = 0) - label),即你试图减去以下形状的张量:(200) - (100),这是行不通的。

相反,您可能想要做的是将最后一个全连接层更改为只有一个隐藏单元 fcl_2 &lt;- mx.symbol.FullyConnected(data = tanh_3, num_hidden = 1),正如您所说,您正在尝试学习一个预测单个标量输出的网络。

【讨论】:

  • 感谢确实让 NN 开始训练,但现在它只导致 NaN 的 [30] Train-rmse=NaN
  • 我建议您按照russellsstewart.com/notes/0.html 的调试神经网络的介绍,让您的问题可重现,以便更容易理解您的问题
  • stackoverflow.com/questions/45383926/… 做了一个可重复的例子来说明我在做什么
  • 有人可以帮忙吗,急需!
猜你喜欢
  • 2018-01-05
  • 2020-07-30
  • 1970-01-01
  • 2016-03-20
  • 2018-01-13
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多