训练神经网络时出现错误信息“Error in nnet.default(x, y, w, ...) : too many (77031) weights”。

22

我正在尝试使用R语言中的nnet包来训练神经网络。以下是有关我的训练数据的信息。

str(traindata)

'data.frame':   10327 obs. of  196 variables:
$ stars                          : num  5 5 5 3.5 3.5 4.5 3.5 5 5 3.5 ...
$ open                           : num  1 1 1 1 1 1 1 1 1 1 ...
$ city                           : Factor w/ 61 levels "ahwatukee","anthem",..: 36 38
$ review_count                   : int  3 5 4 5 14 6 21 4 14 10 ...
$ name                           : Factor w/ 8204 levels " leftys barber shop",..:
$ longitude                      : num  -112 -112 -112 -112 -112 ...
$ latitude                       : num  33.6 33.6 33.5 33.4 33.7 ...
$ greek                          : int  0 0 0 0 0 0 0 0 0 0 ...
$ breakfast...brunch             : int  0 0 0 0 0 0 0 0 0 0 ...
$ soup                           : int  0 0 0 0 0 0 0 0 0 0 ...
我已经截断了这些信息。
当我运行以下内容时:
library(nnet)  
m4 <- nnet(stars~.,data=traindata,size=10, maxit=1000)

我遇到了以下错误:

Error in nnet.default(x, y, w, ...) : too many (84581) weights

当我尝试更改参数中的权重,例如:

m4 <- nnet(stars~.,data=traindata,size=10, maxit=1000,weights=1000)

然后我得到了以下错误:

Error in model.frame.default(formula = stars ~ ., data = traindata, weights = 1000) : 
variable lengths differ (found for '(weights)')

我犯了什么错误?如何避免或纠正这个错误?也许问题出在我对“权重”的理解上。

4个回答

19

要么将MaxNWts增加到可以容纳您的模型大小的某个值,或者减小size使您的模型更小。

您可能还想再考虑一下应该包含哪些变量在模型中。仅查看所提供的数据,name是一个因子,具有8000多个级别; 只使用10000个观测值无法获得任何有意义的结果。 city可能更有用,但在像神经网络这样复杂的东西中,61个级别可能是边缘的。


“levels”指的是“values”吗? - user1685185
1
@user1685185,一个包含十个“值”或“观测”的变量可能是:“B”; “B”; “A”; “A”; “C”; “B”; “C”; “A”; “B”; “C”。这个变量有十个值,但只有三个水平(“A”,“B”,“C”)。 - Qaswed

8
增加“MaxNWts”选项的值,使其大于84581。

我有同样的问题,增加MaxNWts并不能解决这个问题。 - Artemination

3

增加网络中允许的权重数量的选项是MaxNWts,而不是weights(用于指定每个样本的权重)。


2
将MaxNWts参数直接传递以增加其值
m4 <- nnet(stars~.,data=traindata,size=10, maxit=1000,MaxNWts=84581)

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