我使用neuralnet包在R (R Studio)中为具有两个隐藏层的神经网络构建了一个模型。它已经连续3天,但模型没有训练。我所看到的只是通常闪烁的光标,这是正在处理的数据的标志。没有错误或警告消息,也没有任何崩溃。我只需要知道这是否正常,以及在训练模型和创建对象之前我应该期待多长时间。
这是一个相对简单的模型,使用1260行11列连续数据作为特征,预测第12列("标签")作为具有6类(多类分类任务)的因子。在将数据分割为训练和测试数据集之前,已经对数据进行了适当的缩放,并且类的因子列已经用r中的revalue()重新编码为数值。
model = neuralnet(
labels~A+B+C+D+E+F+G+H+I+J+K,
data=train_data,
hidden=c(4,2),
linear.output = FALSE,
stepmax = 1e+06,
)
我读了很多在线帖子,包括一些类似性质的堆栈溢出问题,但没有一个给我我需要的答案。这是由GPU还是模型的复杂性造成的?我该如何解决这个问题?以下是我的机器的规格:
Ubuntu 20.04.1 LTS 64位,RAM 48gib,处理器AMD®Ryzen 5 2600六核处理器× 12。
如果需要,我可以提供更多关于代码和我的机器的信息。如果有人能帮忙的话,我会很感激的。
编辑:有人从讨论中建议我添加更多关于我的代码的细节,所以这里是预处理部分:#revalue the labels:
data <-
data %>%
mutate(labels = revalue(labels, c("label1" = 1, "label2" = 2,
"label3" = 3, "label4" = 4, "label5" = 5, "label6" = 6)))
#scaling numeric columns
varnames<- c("labels")
index<- names(data) %in% varnames
data1<- scale(data[, !index])
data = merge(data["labels"] ,data1)
# split training and testing datasets
train_idx <- sample(nrow(data), 0.7 * nrow(data))
train_data <- data[train_idx,]
test_data <- data[-train_idx,]
data <- data %>% mutate_if(is.character, as.factor)
#here the above model is run
这是一个很小的网络,一个很小的数据集;不会花那么长时间的。最重要的是,你的规格足够好。我的建议是先从文档中运行一个示例,看看是否可以使其正常运行。文档中的一个示例:
library(neuralnet)
# Binary classification
nn <- neuralnet(Species == "setosa" ~ Petal.Length + Petal.Width, iris, linear.output = FALSE)
## Not run: print(nn)
## Not run: plot(nn)
然后回到你的代码。一个小时已经太多了,所以如果再次发生这种情况,请尝试对数据集进行子采样。如果它一直发生,也许你需要在你的linux机器上做一些配置。
编辑后的问题更新:您使用的merge
命令将合并两个数据框架的共同列或行名,所以我的猜测是,你在这里添加了很多行。如果我对虹膜数据集做同样的操作,行数将从150增加到22500。您可以在缩放后转换为数据帧,并使用简单的括号符号代替merge:
> data1<- as.data.frame(scale(data[, !index]))
> data1['labels']=data['labels']