在R中使用neuralnet包时如何实现自己的错误函数?

在R中使用neuralnet包时如何实现自己的错误函数?,r,function,neural-network,implementation,R,Function,Neural Network,Implementation,我试图在R中的neuralnet包中实现一个定制的错误函数 通常使用代表平方误差和交叉熵之和的‘sse’和‘ce’来计算误差。有人能告诉我如何实现自己的误差函数的细节吗。虽然软件包说我们可以使用定制的错误函数,但用户手册中对此没有帮助 我也有同样的问题。这就是我收到的解决方案/帮助。 您可以使用R函数的通常定义(函数(x,y){…})。因此,误差函数必须为函数(x,y)类型,其中x为拟合值,y为真值 请参考以下示例 library(neuralnet) AND <- c(rep(0,7)

我试图在R中的neuralnet包中实现一个定制的错误函数


通常使用代表平方误差和交叉熵之和的‘sse’和‘ce’来计算误差。有人能告诉我如何实现自己的误差函数的细节吗。虽然软件包说我们可以使用定制的错误函数,但用户手册中对此没有帮助

我也有同样的问题。这就是我收到的解决方案/帮助。 您可以使用R函数的通常定义(函数(x,y){…})。因此,误差函数必须为函数(x,y)类型,其中x为拟合值,y为真值

请参考以下示例

library(neuralnet)

AND <- c(rep(0,7),1)
OR <- c(0,rep(1,7))
binary.data <- data.frame(expand.grid(c(0,1), c(0,1), c(0,1)), AND, OR)
set.seed(3)
print(net <- neuralnet(AND+OR~Var1+Var2+Var3,  binary.data, hidden=0, rep=10, err.fct="sse", linear.output=FALSE))

#Call: neuralnet(formula = AND + OR ~ Var1 + Var2 + Var3, data = binary.data,     hidden = 0, rep = 10, err.fct = "sse", linear.output = FALSE)
#
#10 repetitions were calculated.
#
#Error Reached Threshold Steps
#7  0.04043122185    0.008248439644   116
#5  0.04426319054    0.009619409680   124
#8  0.04698485282    0.007947430014   117
#2  0.04931335384    0.008792873261    88
#1  0.04965332555    0.009631079320    89
#4  0.05396400022    0.009092193542    96
#6  0.05488395412    0.009990028287   124
#3  0.06383087672    0.009964206587    94
#10 0.51657348285    0.008602371325    51
#9  0.52514202592    0.007890927099    40


set.seed(3)
custom <- function(x,y){1/2*(y-x)^2}
print(net <- neuralnet(AND+OR~Var1+Var2+Var3,  binary.data, hidden=0, rep=10, linear.output=FALSE, err.fct=custom))

#Call: neuralnet(formula = AND + OR ~ Var1 + Var2 + Var3, data = binary.data,     hidden = 0, rep = 10, err.fct = custom, linear.output = FALSE)
#
#10 repetitions were calculated.
#
#Error Reached Threshold Steps
#7  0.04043122185    0.008248439644   116
#5  0.04426319054    0.009619409680   124
#8  0.04698485282    0.007947430014   117
#2  0.04931335384    0.008792873261    88
#1  0.04965332555    0.009631079320    89
#4  0.05396400022    0.009092193542    96
#6  0.05488395412    0.009990028287   124
#3  0.06383087672    0.009964206587    94
#10 0.51657348285    0.008602371325    51
#9  0.52514202592    0.007890927099    40
库(neuralnet)

这很有道理。然而,当把交叉熵写为和(…)时,R抱怨不能区分。如何解决这个问题?@FilippoMazza:从源代码看,似乎不需要sum()函数,因为它是自动包装在err.fct周围的。交叉熵将是err.fct当我尝试运行第二个:
neuralnet
命令时,我得到以下错误:
计算错误。渐变(权重=权重,长度。权重=长度。权重,dims[product 16]与对象的长度[32]不匹配。
。这是我的
会话信息