双层神经网络实现非线性回归——机器学习
创始人
2024-02-13 00:45:26

目录

一、算法思想

二、算法原理

三、算法分析

四、源程序代码

五、运行结果及分析


一、算法思想


        在两层神经网络之间,必须有激活函数连接,从而加入非线性因素,提高神经网络的能力。所以,我们先从激活函数学起,一类是挤压型的激活函数,常用于简单网络的学习;另一类是半线性的激活函数,常用于深度网络的学习。

        万能近似定理,是深度学习最根本的理论依据。

        万能近似定理声明了在给定网络具有足够多的隐藏单元的条件下,配备一个线性输出层和一个带有任何挤压性质的激活函数的隐藏层的前馈神经网络,能够以任何想要的误差量近似任何从一个有限维度的空间映射到到另一个有限维度空间的可测的函数。

二、算法原理


        激活函数决定是否传递信号。在这种情况下,只需要带有一个参数(阈值)的简单阶梯函数。

 

 

        一般而言,我们构造的模型都是线性的,但是在实际应用过程中,遇到的很多问题其实是非线性的,这个时候,就需要在模型中应用激活函数,从而提高模型的性能。

激活函数优点:可以将连续值映射到0到1之间,将问题转化为概率问题,值大于0.5时是正例。
激活函数缺点:可能导致梯度消失和梯度爆炸问题;因为其中含有幂运算,所以计算机处理时会很耗时。

三、算法分析


 首先明确两点:

(1)前向传播求损失,反向传播回传误差。

(2)每个神经元都可以根据误差修正权重。

神经网络前向算法:

前向算法的作用是计算输入层结点对隐藏层结点的影响,

也就是说,神经网络前向算法网络正向的走一遍:输入层->隐藏层->输出层

神经网络反向推导:

(1)计算总误差

(2)隐藏层的权重更新

(3)更新权重

四、源程序代码


import numpy as np
def sigmoid(x):return 1 / (1 + np.exp(-x))
def deriv_sigmoid(x):fx = sigmoid(x)return fx * (1 - fx)
def mse_loss(y_true, y_pred):return ((y_true - y_pred) ** 2).mean()
class OurNeuralNetwork:def __init__(self):self.w1 = np.random.normal()self.w2 = np.random.normal()self.w3 = np.random.normal()self.w4 = np.random.normal()self.w5 = np.random.normal()self.w6 = np.random.normal()self.b1 = np.random.normal()self.b2 = np.random.normal()self.b3 = np.random.normal()def feedforward(self, x):h1 = sigmoid(self.w1 * x[0] + self.w2 * x[1] + self.b1)h2 = sigmoid(self.w3 * x[0] + self.w4 * x[1] + self.b2)o1 = sigmoid(self.w5 * h1 + self.w6 * h2 + self.b3)return o1def train(self, data, all_y_trues):learn_rate = 0.1epochs = 1000  # 遍历整个数据集的次数for epoch in range(epochs):for x, y_true in zip(data, all_y_trues):# --- 做一个前馈(稍后我们将需要这些值)sum_h1 = self.w1 * x[0] + self.w2 * x[1] + self.b1h1 = sigmoid(sum_h1)sum_h2 = self.w3 * x[0] + self.w4 * x[1] + self.b2h2 = sigmoid(sum_h2)sum_o1 = self.w5 * h1 + self.w6 * h2 + self.b3o1 = sigmoid(sum_o1)y_pred = o1d_L_d_ypred = -2 * (y_true - y_pred)d_ypred_d_w5 = h1 * deriv_sigmoid(sum_o1)d_ypred_d_w6 = h2 * deriv_sigmoid(sum_o1)d_ypred_d_b3 = deriv_sigmoid(sum_o1)d_ypred_d_h1 = self.w5 * deriv_sigmoid(sum_o1)d_ypred_d_h2 = self.w6 * deriv_sigmoid(sum_o1)d_h1_d_w1 = x[0] * deriv_sigmoid(sum_h1)d_h1_d_w2 = x[1] * deriv_sigmoid(sum_h1)d_h1_d_b1 = deriv_sigmoid(sum_h1)# Neuron h2d_h2_d_w3 = x[0] * deriv_sigmoid(sum_h2)d_h2_d_w4 = x[1] * deriv_sigmoid(sum_h2)d_h2_d_b2 = deriv_sigmoid(sum_h2)self.w1 -= learn_rate * d_L_d_ypred * d_ypred_d_h1 * d_h1_d_w1self.w2 -= learn_rate * d_L_d_ypred * d_ypred_d_h1 * d_h1_d_w2self.b1 -= learn_rate * d_L_d_ypred * d_ypred_d_h1 * d_h1_d_b1self.w3 -= learn_rate * d_L_d_ypred * d_ypred_d_h2 * d_h2_d_w3self.w4 -= learn_rate * d_L_d_ypred * d_ypred_d_h2 * d_h2_d_w4self.b2 -= learn_rate * d_L_d_ypred * d_ypred_d_h2 * d_h2_d_b2self.w5 -= learn_rate * d_L_d_ypred * d_ypred_d_w5self.w6 -= learn_rate * d_L_d_ypred * d_ypred_d_w6self.b3 -= learn_rate * d_L_d_ypred * d_ypred_d_b3if epoch % 100 == 0:y_preds = np.apply_along_axis(self.feedforward, 1, data)loss = mse_loss(all_y_trues, y_preds)print("训练 %d 次模型错误率: %.3f" % (epoch, loss))
data = np.array([[-2, -1],  # Alice[25, 6],  # Bob[17, 4],  # Charlie[-15, -6],  # Diana
])
all_y_trues = np.array([1,  # Alice0,  # Bob0,  # Charlie1,  # Diana
])
network = OurNeuralNetwork()
network.train(data, all_y_trues)import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-10,10)
y_sigmoid=1/(1+np.exp(-x))
plt.plot(x,y_sigmoid,'r-')
plt.title('sigmoid')
plt.show()

五、运行结果及分析


 

上一篇:曾老梁对联一副

下一篇:python---字典

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...