рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ R рдореЗрдВ рдЧрдгрдирд╛рдУрдВ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг

рдкрд░рд┐рдЪрдп


рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
рдЖрд░ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдФрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЬреАрдПрдирдпреВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рднреАрддрд░ рдПрдХ рдореБрдХреНрдд рдУрдкрди-рд╕реЛрд░реНрд╕ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдЗрд╕ рднрд╛рд╖рд╛ рдиреЗ рдХрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдФрд░ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкрд╛рдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ, рдХрдИ рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреА рдЧрддрд┐ рдЦрд░рд╛рдм рд╣реИред рдЖрд░ рдкрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИрдмреНрд░реЗрд╣рд╛рдм рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рдЙрдард╛рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ - рд╕рдорд╛рдирд╛рдВрддрд░ ред


рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди


рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдиреНрдпреВрд░рд▓рдиреЗрдЯ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдлреЗрдиреЛрдЯрд╛рдЗрдкрд┐рдХ рд▓рдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдиреБрд╡рдВрд╢рд┐рдХ рдорд╛рд░реНрдХрд░реЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╕рдордп рдЧрдгрдирд╛ рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рд╛рдордЧреНрд░реА рдФрд░ рддрд░реАрдХреЗ


рд╣рдордиреЗ рдЖрд░ 2.15.2 , рдиреНрдпреВрд░рд▓рдиреЗрдЯ - 1.32, рд╕рдорд╛рдирд╛рдВрддрд░ - 2.15.2, рд░реЗрдВрдмрдорд╛рд░реНрдХ - 1.0.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд╡рд┐рдВрдбреЛрдЬ 7 рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓рд╛ рдХрдВрдкреНрдпреВрдЯрд░, рдПрдХ Intell Core i5-2550K CPU @ 3.40GHz (4 рдХреЛрд░) рдФрд░ 8GB RAM рд╣реИред рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдбреЗрдЯрд╛ рдбреЗрдЯрд╛ (рдЕрдиреБрдорд╛рди, рдкреИрдХреЗрдЬ = "рдбреЗрдЯрд╛рд╕реЗрдЯ")ред

рдкрд░рд┐рдгрд╛рдо рдФрд░ рдЪрд░реНрдЪрд╛


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЪрд▓реЛ рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЧрдгрдирд╛ рдХреЗ рджреМрд░рд╛рди рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдорд╛рдореВрд▓реА рд╕рдВрд╢реЛрдзрди рдХреЗ рд╕рд╛рде рдиреНрдпреВрд░рд▓рдиреЗрдЯ рдкреИрдХреЗрдЬ рдХреЗ рд╡рд┐рд╡рд░рдг рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдереНрд░реЗрд╢реЛрд▓реНрдб = 0.0001 - рд╕реНрдЯреЙрдкрд┐рдВрдЧ рдорд╛рдирджрдВрдб рдореЗрдВ рд╕реЗ рдПрдХ, рдФрд░ рдЧрдгрдирд╛ рдХрд╛ рджреЛрд╣рд░рд╛рд╡ = 20 - 20 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐, рддрд╛рдХрд┐ рдЧрдгрдирд╛ рдЕрдзрд┐рдХ "рдЬрдЯрд┐рд▓" рд╣реЛред

nn<-function() { print(" ") neuralnet(case~parity+induced+spontaneous, infert, err.fct="ce", linear.output=FALSE, likelihood=TRUE,rep=20, threshold=0.0001) } nn() 


рдЖрдк рд╡рд┐рдВрдбреЛрдЬ рдЯрд╛рд╕реНрдХ рдореИрдиреЗрдЬрд░ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реАрдкреАрдпреВ рд▓реЛрдб 25% рд╣реИред
рдЕрдм рдЗрд╕ рдХреЛрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЛ рдорд╛рдкреЗрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд░рд┐рдВрдЪрдорд╛рд░реНрдХ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдорд╛рдк рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 within(benchmark(test.name=test.function(), #      replications=c(3), #     (+1   "") columns=c('test', 'replications', 'elapsed'), #       order=c('elapsed', 'test')), #    { average = elapsed/replications }) #         

рдкрд░рд┐рдгрд╛рдо рд╣реИ:
  test replications elapsed average 1 _ 3 47.83 15.94333333 


рдЕрдм, рдЗрд╕ рд╕рдордп рдХреА рддреБрд▓рдирд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ = 20 рд╡рд┐рдХрд▓реНрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ 20 рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреАрд▓рдоред
 nn.s<-function() { print(" ") nets<-sapply(1:20, function(X) neuralnet(case~parity+induced+spontaneous, infert, err.fct="ce", linear.output=FALSE, likelihood=TRUE,rep=1, threshold=0.0001)) } 

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ:
  test replications elapsed average 1 _ 3 46.05 15.35 2 _ 3 47.52 15.84 

рд░рдирдЯрд╛рдЗрдо рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдиреНрдпреВрд░рд▓рдиреЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рд░рд┐рдЯреНрд░реАрд╕ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдХреЛрдИ рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рд╣реИред рд╢реЗрд╖ рдЧреБрдард▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рд╕рдорд╛рдирд╛рдВрддрд░ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ред рдпрд╣ R c рд╕рдВрд╕реНрдХрд░рдг 2.14.0 рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдХрдИ рд╕реНрд╡рддрдВрддреНрд░ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдиреНрдпреВрд░рд▓рдиреЗрдЯ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛ ред
 nn.p<-function() { print(" ") cl <- makeCluster(getOption("cl.cores", 4)) #       clusterExport(cl,"infert") #     clusterEvalQ(cl,library(neuralnet)) #   neuralnet   parSapply(cl, 1:20, function(X) #   sapply neuralnet(case~parity+induced+spontaneous, infert, err.fct="ce", linear.output=FALSE, likelihood=TRUE,rep=1, threshold=0.0001) ) stopCluster(cl) } 

рд▓реАрдб рд╕рдордп рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ:
  test replications elapsed average 3 _ 3 17.38 5.793333333 2 _ 3 45.88 15.293333333 1 _ 3 46.61 15.536666667 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рдорд╛рдирд╛рдВрддрд░ рд╕рдВрд╕реНрдХрд░рдг 2.5 рдЧреБрдирд╛ рд╕реЗ рдЕрдзрд┐рдХ рддреЗрдЬ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб 100% рд╣реИред

рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдк рдиреНрдпреВрд░рд▓рдиреЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд░реИрдкрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
 pneuralnet <- function(formula, data, rep=1, ..., cl) { clusterExport(cl,"data") clusterEvalQ(cl,library(neuralnet)) nets <- parLapply(cl, 1:rep, function(X) neuralnet(formula, data, rep=1, ...) ) #       reached.threshold nets <- nets[order(sapply(1:rep,function(i){nets[[i]]$result.matrix["reached.threshold", ]}))] return(nets) } cl <- makeCluster(getOption("cl.cores", 4)) nets <- pneuralnet(case~parity+induced+spontaneous, infert, err.fct="ce", linear.output=FALSE, likelihood=TRUE,rep=4, threshold=0.0001, cl=cl) stopCluster(cl) 


рдкреВрд░рд╛ рдХреЛрдб
 library(parallel) library(neuralnet) library(rbenchmark) data(infert, package="datasets") nn<-function() { print(" ") neuralnet(case~parity+induced+spontaneous, infert, err.fct="ce", linear.output=FALSE, likelihood=TRUE,rep=20, threshold=0.0001) } nn.s<-function() { print(" ") nets<-sapply(1:20, function(X) neuralnet(case~parity+induced+spontaneous, infert, err.fct="ce", linear.output=FALSE, likelihood=TRUE,rep=1, threshold=0.0001)) } nn.p<-function() { print(" ") cl <- makeCluster(getOption("cl.cores", 4)) clusterExport(cl,"infert") clusterEvalQ(cl,library(neuralnet)) parSapply(cl, 1:20, function(X) neuralnet(case~parity+induced+spontaneous, infert, err.fct="ce", linear.output=FALSE, likelihood=TRUE,rep=1, threshold=0.0001) ) stopCluster(cl) } pneuralnet <- function(formula, data, rep=1, ..., cl) { clusterExport(cl,"data") clusterEvalQ(cl,library(neuralnet)) nets <- parLapply(cl, 1:rep, function(X) neuralnet(formula, data, rep=1, ...) ) #       reached.threshold nets <- nets[order(sapply(1:rep,function(i){nets[[i]]$result.matrix["reached.threshold", ]}))] return(nets) } within(benchmark(_=nn(), _=nn.s(), _=nn.p(), replications=c(3), columns=c('', 'replications', 'elapsed'), order=c('elapsed', 'test')), { average = elapsed/replications }) cl <- makeCluster(getOption("cl.cores", 4)) nets <- pneuralnet(case~parity+induced+spontaneous, infert, err.fct="ce", linear.output=FALSE, likelihood=TRUE,rep=4, threshold=0.0001, cl=cl) stopCluster(cl) 

Source: https://habr.com/ru/post/In168399/


All Articles