DAY25神经网路(续三)

昨天介绍完浅层神经网路演算法,今天要来研究浅层神经网路程序:
首先要先设定学习率和隐藏神经元个数,在此我们使用经验函数:
https://ithelp.ithome.com.tw/upload/images/20211009/20141654zyjRMenvSh.jpg
所以程序如下:

#设定学习率
a=0.05

#设置调节常数
a_con=2


#隐藏层神经元个数
m=int(np.sqrt(len(x_train.columns)+len(y_train.to_frame().columns))+a_con)
print(m)

所以m就是4,顺道一提x_train是4栏位y_train 是1栏位
接下来要设定两个w的权重,程序如下

np.random.seed(500)
#初始化权重for输入到隐藏,维度(m,len(x_train.columns)
wi = np.random.uniform(-1,1,(m,len(x_train.columns)))


#初始化权重for隐藏到输出
wi2 = np.random.uniform(-1,1,m)

此外设置,误差最小值和误差放置列表和最大迭带次数:

#误差最小值
ep_limit = 10**-3
#误差放置列表
sum_errorList = []
#设定最大迭带次数
iter_rate_max=1000

好准备完毕後,接下来要决定启动函数,这边取tanh当作启动函数(因为它在任何点都完全可维):

所以
https://ithelp.ithome.com.tw/upload/images/20211009/20141654wUZDaXDGIL.jpg

https://ithelp.ithome.com.tw/upload/images/20211009/20141654OgAkdipDm8.jpg

所以确定好启动函数後:
程序如下:

for j in range(iter_rate_max):
    sum_error = 0
    for i in range(len(x_train)):
        # 正向传播
        #Xi
        xi = x_train.iloc[i]
        #wxi
        d = wi@xi
        #fk(d)-->tanh
        fk = (np.exp(d)-np.exp(-d))/(np.exp(d)+np.exp(-d))
        #W2fk(d)
        t = wi2@fk
        #predict-true
        err = t - y_train.iloc[i]
        #SSE
        sum_error += err**2
        
        # 若误差还是比最小误差大,就去更新wi(反向传播)
        if np.abs(err) > ep_limit:
        	#fk(d)*a*(t-y)
            delta_w=fk*a*err
            wi2 = wi2 - delta_w
            #fk'(d)*w*a*(t-y)
            fk_d =(4/(np.exp(2*d)+2+np.exp(-2*d)))*wi2*a*err
            wi = wi - [j*xi for j in fk_d]
    #计算MSE
    MSE_error=sum_error/len(x_train)        
    sum_errorList.append(MSE_error)
    print("iter:",j,"error:",MSE_error)
    # 当连续2次总误差小於误差限制而且後一次误差要比前一次小
    if len(sum_errorList) > 2 and (sum_errorList[-2]>sum_errorList[-1]) and sum_errorList[-2] - sum_errorList[-1] < ep_limit:
        break
print("最终误差MSE为:",MSE_error)
print("wi(输入到隐藏权重):\n",wi)
print("wi2(隐藏到输入权重):\n",wi2)

结果如下:

最终误差MSE为: 1.3951452403482179
wi(输入到隐藏权重):
 [[ 4.41274874 -0.32684688 -0.94719543 -3.98609522]
 [ 5.19430544  7.87041477  3.6636928  -9.48120797]
 [ 2.49395541  0.14613217 -0.76136188  6.40090343]
 [11.0882004   5.01234925  1.64783185  7.14010145]]
wi2(隐藏到输入权重):
 [12.68878617 -1.34260065 26.81972859  2.03718612]

有了权重後,把资料带回去test集,程序如下:

y_pred = []
for i in range(len(x_test)):
    # 正向传播
    xi = x_test.iloc[i]
    d = wi@xi
    fk = (np.exp(d)-np.exp(-d))/(np.exp(d)+np.exp(-d))
    t = wi2@fk
    y_pred.append(t)
print("test预测y:",y_pred)   
print("test实际y:",y_test)
print("test MSE",np.mean((y_test - y_pred)**2))

结果如下:

test预测y: [13.432542081356413, 25.926937743888953, 15.054134713533085, 14.524957997382055]
test实际y: [12.03, 29.0, 21.5, 13.75]
test MSE 13.390143777223878

好,今天浅层网路神经程序算是完成,明天就来研究CNN(卷积神经网路)

此时男孩走到了森林入口,突然他眼神恢复清明,他不知道为甚麽自己原本在木屋前面,怎麽突然走到森林的入口,突然他胸口又发出歌声,只是这次他惊讶发现是自己声音,同时他发现远处,原本他出来的房子里面好像有一个人站在正中央,这时他突然听到一阵低语:苍蝇,狐狸,娃娃,屋子,於是男孩决定往一开始屋子出发
           --|失去的会再次出现,遗失的会再度回来|--  MM.CS

<<:  Day25|【Git】git stash 暂存档案

>>:  [第二十四只羊] 迷雾森林舞会XVIII 游戏角色设定again_final_final

Day24:使i用 ForEach、ScrollView 构建 UI

前言 上篇文章讲了加数据进去, 今天来刻 UI。 实作 添加一些 image 进去 asset: 在...

Day7-在认识 useMemo 前,先认识 React.memo

今天介绍的是避免重新渲染的 HOC(Higher Order Component) React.me...

狗狗币的技术与理想的深入解析

或许你想问我 狗狗币有突出的技术吗? 它不是只是照抄程序码而诞生的加密货币吗? 事实并非如此, 我认...

因边界网关协议 ( BGP) 路由配置错误导致 DNS 故障而遭受服务中断,防止此事件的最佳对策-对配置更改实施两人控制

-一般问题解决过程 如果配置由其他工程师仔细检查,则对配置更改强制执行两人控制可能会避免该事件。这...

【从实作学习ASP.NET Core】Day15 | 後台 | 自定义使用者栏位

延续昨天的会员功能,预设会员资讯栏位只有 Email 和 Password,今天要加上一些栏位让会员...