昨天介绍完浅层神经网路演算法,今天要来研究浅层神经网路程序:
首先要先设定学习率和隐藏神经元个数,在此我们使用经验函数:
所以程序如下:
#设定学习率
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当作启动函数(因为它在任何点都完全可维):
所以
则
所以确定好启动函数後:
程序如下:
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
>>: [第二十四只羊] 迷雾森林舞会XVIII 游戏角色设定again_final_final
前言 上篇文章讲了加数据进去, 今天来刻 UI。 实作 添加一些 image 进去 asset: 在...
今天介绍的是避免重新渲染的 HOC(Higher Order Component) React.me...
或许你想问我 狗狗币有突出的技术吗? 它不是只是照抄程序码而诞生的加密货币吗? 事实并非如此, 我认...
-一般问题解决过程 如果配置由其他工程师仔细检查,则对配置更改强制执行两人控制可能会避免该事件。这...
延续昨天的会员功能,预设会员资讯栏位只有 Email 和 Password,今天要加上一些栏位让会员...