【发布时间】:2021-10-14 10:18:43
【问题描述】:
如何在迭代过程中获取每个“w”的值? 我已经有了 1000 个“err”值,但我需要每个 1000 个权重值,例如 w1、w2、w3、、、、w6 如何从我已经拥有的 1000 err 中提取 w1~w6? 我认为我必须使用 res 函数和 err 函数,因为这些函数运行良好但我不知道。
res函数是
forwardProp = function(input, w){
# input to hidden layer
neth1 = w[1]*input[1]
neth2 = w[2]*input[2]
neth3 = w[3]*input[2]
outh1 = sigmoid(neth1)
outh2 = sigmoid(neth2)
outh3 = sigmoid(neth3)
# hidden layer to output layer
neto1 = w[4]*outh1+w[6]*outh3
neto2 = w[5]*outh2
outo1 = sigmoid(neto1)
outo2 = sigmoid(neto2)
res = c(outh1, outh2, outh3, outo1, outo2)
return(res)
}
错误函数是
error = function(res, out){
err = 0.5*(out[1] - res[4])^2 + 0.5*(out[2] - res[5])^2
return(err)
}
迭代部分在这里
for(i in 1:numIter){
### forward
res = forwardProp(input, w)
outh1 = res[1]; outh2 = res[2]; outh3=res[3];outo1 = res[4]; outo2 = res[5]
### compute error
err[i] = error(res, out)
### backward propagation
# compute dE_dw1
dneto1_douth1 = w4
douth1_dneth1 = outh1*(1-outh1)
dneth1_dw1 = input[1]
dE_douth1 = dE_douto1*douto1_dneto1*dneto1_douth1
dE_dw1 = dE_douth1*douth1_dneth1*dneth1_dw1
# compute dE_dw2
dneto1_douth2 = 0
dneto2_douth2 = w5
dE_douth2 = dE_douto1*douto1_dneto1*dneto1_douth2 + dE_douto2*douto2_dneto2*dneto2_douth2
douth2_dneth2 = outh2*(1-outh2)
dneth2_dw2= input[2]
dE_dw2=dE_douth2*douth2_dneth2*dneth2_dw2
# compute dE_dw3
dneth3_dw3= input[2]
douth3_dneth3=outh3*(1-outh3)
dneto2_douth3=0
dneto1_douth3=w6
dE_douth3=dE_douto1*douto1_dneto1*dneto1_douth3 + dE_douto2*douto2_dneto2*dneto2_douth3
dE_dw3=dE_douth3*douth3_dneth3*dneth3_dw3
# compute dE_dw4
dE_douto1 = -( out[1] - outo1 )
douto1_dneto1 = outo1*(1-outo1)
dneto1_dw4 = outh1
dE_dw4 = dE_douto1*douto1_dneto1*dneto1_dw4
# compute dE_dw5
dE_douto2 = -( out[2] - outo2 )
douto2_dneto2 = outo2*(1-outo2)
dneto2_dw5 = outh2
dE_dw5 = dE_douto2*douto2_dneto2*dneto2_dw5
# compute dE_dw6
dE_douto1 = -( out[1] - outo1 )
douto1_dneto1 = outo1*(1-outo1)
dneto1_dw6 = outh3
dE_dw6 = dE_douto1*douto1_dneto1*dneto1_dw6
### update all parameters via a gradient descent
w1 = w1 - gamma1*dE_dw1
w2 = w2 - gamma1*dE_dw2
w3 = w3 - gamma1*dE_dw3
w4 = w4 - gamma1*dE_dw4
w5 = w5 - gamma1*dE_dw5
w6 = w6 - gamma1*dE_dw6
w = c(w1, w2, w3, w4, w5, w6)
}
【问题讨论】:
标签: r