实验四:神经网络算法实验
【实验目的】
-
理解神经网络原理,掌握神经网络前向推理和后向传播方法;
-
掌握神经网络模型的编程实现方法。
【实验内容】
- 1981年生物学家格若根(W.Grogan)和维什(W.Wirth)发现了两类蚊子(或飞蠓midges),他们测量了这两类蚊子每个个体的翼长和触角长,数据如下:
翼长 | 触角长 | 类别 |
---|---|---|
1.78 | 1.14 | Apf |
1.96 | 1.18 | Apf |
1.86 | 1.20 | Apf |
1.72 | 1.24 | Apf |
2.00 | 1.26 | Apf |
2.00 | 1.28 | Apf |
1.96 | 1.30 | Apf |
1.74 | 1.36 | Af |
1.64 | 1.38 | Af |
1.82 | 1.38 | Af |
1.90 | 1.38 | Af |
1.70 | 1.40 | Af |
1.82 | 1.48 | Af |
1.82 | 1.54 | Af |
2.08 | 1.56 | Af |
【实验报告要求】
- 建立三层神经网络模型,编写神经网络训练的推理的代码,实现类型预测;
- 对照实验内容,撰写实验过程、算法及测试结果,程序不得使用sklearn库;
- 代码规范化:命名规则、注释;
- 查阅文献,讨论神经网络的应用场景。
【实验过程与步骤】
1. 代码
import numpy as np def sigmoid(x): return 1/(1+np.exp(-x))#f(x)=1/(1+exp(-x)) def deriv_sigmoid(x): fx=sigmoid(x) return fx*(1-fx)#f'(x)=f(x)*(1-f(x)) 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 o1 def train(self,data,all_y_trues): learn_rate=0.1 epochs=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.b1 h1=sigmoid(sum_h1) sum_h2=self.w3*x[0]+self.w4*x[1]+self.b2 h2=sigmoid(sum_h2) sum_o1=self.w5*h1+self.w6*h2+self.b3 o1=sigmoid(sum_o1) y_pred=o1 d_L_d_ypred=-2*(y_true-y_pred) #Neuron o1 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) #Neuron h1 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 h2 d_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) #Neuron h1 self.w1-=learn_rate*d_L_d_ypred*d_ypred_d_h1*d_h1_d_w1 self.w2-=learn_rate*d_L_d_ypred*d_ypred_d_h1*d_h1_d_w2 self.b1-=learn_rate*d_L_d_ypred*d_ypred_d_h1*d_h1_d_b1 #Neuron h2 self.w3-=learn_rate*d_L_d_ypred*d_ypred_d_h2*d_h2_d_w3 self.w4-=learn_rate*d_L_d_ypred*d_ypred_d_h2*d_h2_d_w4 self.b2-=learn_rate*d_L_d_ypred*d_ypred_d_h2*d_h2_d_b2 #Neuron o1 self.w5-=learn_rate*d_L_d_ypred*d_ypred_d_w5 self.w6-=learn_rate*d_L_d_ypred*d_ypred_d_w6 self.b3-=learn_rate*d_L_d_ypred*d_ypred_d_b3 if epoch%10==0: y_preds=np.apply_along_axis(self.feedforward,1,data) loss=mse_loss(all_y_trues,y_preds) print("Epoch %d loss:%.3f" % (epoch,loss)) #翼长 触角长 data=np.array([ [1.78,1.14], [1.96,1.18], [1.86,1.20], [1.72,1.24], [2.00,1.26], [2.00,1.28], [1.96,1.30], [1.74,1.36], [1.64,1.38], [1.82,1.38], [1.90,1.38], [1.70,1.40], [1.82,1.48], [1.82,1.54], [2.08,1.56], ]) #类别:Apf 1, Af 0 all_y_trues=np.array([ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, ]) network = OurNeuralNetwork() network.train(data,all_y_trues) ceshi1 = np.array([1.24,1.80]) ceshi2 = np.array([1.28,1.84]) ceshi3 = np.array([1.40,2.04]) print("ceshi1:%.3f"% network.feedforward(ceshi1)) print("ceshi2:%.3f"% network.feedforward(ceshi2)) print("ceshi3:%.3f"% network.feedforward(ceshi3)) for i in [ceshi1,ceshi2,ceshi3]: if network.feedforward(i)>0.5: print("ceshi类型为:Apf") else: print("ceshi类型为:Af")
2. 拓展
(1) 神经网络的应用领域
① 流程建模与控制(Process Modeling and Control ):为物理设备创建一个神经网络模型,通过该模型来决定设备的最佳控制设置。
② 机器故障诊断(Machine Diagnostics ):当检测到机器出现故障时,系统可以自动关闭机器。
③ 证券管理(Portfolio Management):以一种高回报、低风险的方式分配证券资产进行投资。
④ 目标识别(Target Recognition):通过视频或者红外图像数据检测是否存在敌方目标,被广泛运用于军事领域。
⑤ 医学诊断(Medical Diagnosis):通过分析报告的症状和MRI、X-射线图像数据,协助医生诊断。
⑥ 目标市场(targeted marketing):根据统计学,找出对营销活动反响率最高的人群。
⑦ 经济预测(Financial Forecasting):通过历史安全数据预测未来经济活动的安全性。
(2)神经网络的具体应用案例
[1] 在信息领域中的应用
① 信息处理
现代信息处理要解决的问题是很复杂的,人工神经网络具有模仿或代替与人的思维有关的功能,可以实现自动诊断、问题求解,解决传统方法所不能或难以解决的问题。现有的智能信息系统有智能仪器、自动跟踪监测仪器系统、自动控制制导系统、自动故障诊断和报警系统等。
② 模式识别
模式识别是对表征事物或现象的各种形式的信息进行处理和分析,来对事物或现象进行描述、辨认、分类和解释的过程。经过多年的研究和发展,模式识别已成为当前比较先进的技术,被广泛应用到文字识别、语音识别、指纹识别、遥感图像识别、人脸识别、手写体字符的识别、工业故障检测、精确制导等方面。
[2] 在医学中的应用
① 生物信号的检测与分析
大部分医学检测设备都是以连续波形的方式输出数据的,这些波形是诊断的依据。 人工神经网络是由大量的简单处理单元连接而成的自适应动力学系统, 具有巨量并行性,分布式存贮,自适应学习的自组织等功能,可以用它来解决生物医学信号分析处理中常规法难以解决或无法解决的问题。
② 医学专家系统
以非线性并行处理为基础的神经网络为专家系统的研究指明了新的发展方向,解决了专家系统的以上问题,并提高了知识的推理、自组织、自学习能力,从而神经网络在医学专家系统中得到广泛的应用和发展。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步