我在使用插入符号包指定学习率时遇到问题" mlpWeightDecay"来自RSNNS包。 调整参数" mlpWeightDecay"是大小和衰变。
一个例子,将大小常数保持为4并将衰减调整为c(0,0.0001,0.001,0.002):
data(iris)
TrainData <- iris[,1:4]
TrainClasses <- iris[,5]
fit1 <- train(TrainData, TrainClasses,
method = "mlpWeightDecay",
preProcess = c("center", "scale"),
tuneGrid=expand.grid(.size = 4, .decay = c(0,0.0001, 0.001, 0.002)),
trControl = trainControl(method = "cv")
)
但我也想操纵模型的学习率,而不是仅仅采用0.2的默认学习率。
我知道我可以通过&#34; ...&#34;使用来自RSNNS的mlpWeightDecay方法的更多参数。参数。 &#34; learnFuncParams&#34;将是我需要插入的RSNNS参数。它需要4个参数(学习率,重量衰减,dmin,dmax)。
继续这个例子看起来像这样:
fit1 <- train(TrainData, TrainClasses,
method = "mlpWeightDecay",
preProcess = c("center", "scale"),
tuneGrid=expand.grid(.size = 4, .decay = c(0,0.0001, 0.001, 0.002)),
trControl = trainControl(method = "cv"),
learnFuncParams=c(0.4,0,0,0)
)
但是插入符号列车功能的文档告诉我&#34; ...&#34;参数:
传递给分类或回归例程的参数(例如randomForest)。如果在此处传递调整参数的值,则会发生错误。
问题在于4&#34; learningFuncParams&#34;参数(权重衰减)是一个调整参数。
因此我收到错误和警告:
train.default中的错误(TrainData,TrainClasses,method =&#34; mlpWeightDecay&#34;,: 无法确定最终调整参数 另外:有50个或更多警告(使用警告()查看前50个
警告讯息:
1:方法$ fit(x = if(!is.data.frame(x))as.data.frame(x)else x,...: 在“学习功能”中超越重量衰减值&#39;您传入的参数。其他值保留
2:在eval(expr,envir,enclos)中: 模型拟合对于Fold01失败:size = 4,decay = 0e + 00 mlp.default中的错误(x =结构(列表(Sepal.Length = c(-0.891390168709482 ,: 正式论证&#34; learnFuncParams&#34;由多个实际参数匹配
如何在不与调整参数冲突的情况下设置学习速率&#34;衰减&#34;如果两者都设置在相同的参数&#34; learningFuncParams&#34;?
谢谢!
答案 0 :(得分:1)
看起来你可以在&#34; ...&#34;中指定你自己的learnFuncParams。插入符号检查您是否提供了自己的一组参数,并且只会覆盖learnFuncParams [3](这是衰减)。它将采用您提供的learnFuncParams [1,2,4]。
找出插入符号的非常方便的方法是键入getModelInfo(&#34; mlpWeightDecay&#34;),然后向上滚动到$ mlpWeightDecay $ fit部分。它显示了插入符号将如何调用真正的训练功能:
$mlpWeightDecay$fit
if (any(names(theDots) == "learnFuncParams")) {
prms <- theDots$learnFuncParams
prms[3] <- param$decay
warning("Over-riding weight decay value in the 'learnFuncParams' argument you passed in. Other values are retained")
}
它会检查您是否提供了自己的learnFuncParams。如果你这样做,它会使用它,但插入自己的衰变。您可以忽略该警告。
我认为您所得到的错误(&#34;最终调整参数无法确定&#34;)有另一个原因。你尝试过较低的学习率吗?