首页 > 编程语言 >实验四:神经网络算法实验

实验四:神经网络算法实验

时间:2022-11-16 20:00:12浏览次数:42  
标签:ypred sigmoid h2 self h1 算法 神经网络 实验 np

【实验目的】

理解神经网络原理,掌握神经网络前向推理和后向传播方法;

掌握神经网络模型的编程实现方法。

【实验内容】

1.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

现有三只蚊子的相应数据分别为(1.24,1.80)、(1.28,1.84)、(1.40,2.04),请判断这三只蚊子的类型。

【实验报告要求】

建立三层神经网络模型,编写神经网络训练的推理的代码,实现类型预测;
对照实验内容,撰写实验过程、算法及测试结果,程序不得使用sklearn库;
代码规范化:命名规则、注释;
查阅文献,讨论神经网络的应用场景。

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)
test1=np.array([1.24,1.80])
test2=np.array([1.28,1.84])
test3=np.array([1.40,2.04])
print("test1: %.3f" % network.feedforward(test1))
print("test2: %.3f" % network.feedforward(test2))
print("test3: %.3f" % network.feedforward(test3))
#如果概率大于0.5则类型为Apf,小于0.5则类型为Af
for i in [test1,test2,test3]:
    if network.feedforward(i)>0.5:
        print("test类型:Apf")
    else:
        print("test类型:Af")

结果:

 

 

 

 神经网络应用场景:

1.语音识别

2.计算机视觉

3.医学医疗

4.智能AI

标签:ypred,sigmoid,h2,self,h1,算法,神经网络,实验,np
From: https://www.cnblogs.com/fydd011122/p/16897327.html

相关文章

  • 实验3:英雄联盟数据下载
    importrequestsfromlxmlimporthtmlimportosurl='https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js'#UA伪装:让爬虫对应的请求载体标识伪......
  • 全卷积神经网络概述学习记录
    概述提出背景卷积操作具有局部连接、权值共享的特点,能很好地保留二维数据的空间信息,而池化操作能够很好地满足平移不变性,这在分类任务中非常重要。但是卷积神经网络有一个很......
  • 卷积神经网络
    博主在之前的学习中接触过卷积神经网络,但仍对其一知半解,今天便趁此学习总结一下。参考视频参考视频:​​从“卷积”、到“图像卷积操作”、再到“卷积神经网络”,“卷积”意义......
  • 基于协调过滤算法的SSM微折扣服饰商城的设计与实现
    项目介绍基于协同过滤算法实现商品推荐后端框架:SSM(Spring+SpringMVC+Mybatis)微折扣服饰商城开发环境:eclipseMySQL57Tomcat8jdk1.8Windows10前端框架:LayUI系统功能......
  • 卷积神经网络研究综述 学习记录
    概要深度学习善于从原始输入数据中挖掘越来越抽象的特征表示,而这些表示具有良好的泛化能力。深度学习是包含多级非线性变换的层级机器学习方法,深层神经网络是目前的主要形式......
  • 软件工程实验二
    一、题目要求我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:能够自动生成四则运算练习题可以定制题目数量用户可以选择运算符用户设......
  • 记录一次实验室linux系统的GPU服务器死机排查过程——某显卡满负荷导致内核进程超时导
    在自己没有管理多台高负荷的ubuntu显卡服务器之前,我是万万想不到linux服务器居然也是如此容易死机的。什么每个版本的TensorFlow调用显卡驱动时和内核不兼容,什么系统自动升......
  • 记录一次实验室linux系统的GPU服务器死机故障的排查——Linux系统的Power States
    实验室的ubuntu服务器不知怎么的突然又崩溃了,死机重启,然后查看日志,发现了下面的情况:    由于从其他的日志中知道是显卡的问题引起的死机,而这个显卡的地址正好是D9:00,这......
  • 实验二:解析4k图片下载
    importrequestsfromlxmlimporthtmlurl='https://pic.netbian.com/4kyingshi/'#UA伪装:让爬虫对应的请求载体标识伪装成一款浏览器,将对应的User-Agent封装到字......
  • Python实验报告——第10章 文件及目录操作
    Python实验报告——第10章文件及目录操作 实验报告【实验目的】 1.掌握Python自带的函数进行基本文件操作。2.掌握Python内置的os模块及其子模块os.path进行目......