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

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

时间:2022-11-20 12:11:22浏览次数:32  
标签:ypred sigmoid h2 self h1 算法 神经网络 实验 sum

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")

 

 

标签:ypred,sigmoid,h2,self,h1,算法,神经网络,实验,sum
From: https://www.cnblogs.com/1759945451qq/p/16908189.html

相关文章

  • 遗传算法 模板
    利用python中的geatpy库实现单目标和多目标优化importnumpyasnpimportgeatpyaseaclassMyProblem(ea.Problem):#继承Problem父类def__init__(self):......
  • Python第八章实验报告
    一.实验对象:《零基础学Python》第八章的3道实例和4道实战二.实验环境:IDLEShell3.9.7三.实验要求:学习使用标准模块和第三方模块四.实验过程:实例01创建计算BMI指数的......
  • 每日算法之判断是不是平衡二叉树
    JZ79判断是不是平衡二叉树描述输入一棵节点数为n二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(Balan......
  • 虚拟dom和diff算法
    虚拟dom和diff算法1.虚拟dom是一个能代表DOM树的对象,通常含有标签名,标签上的属性、事件监听和子元素们和子元素们的属性2.虚拟dom优点,能减少不必要的DOM操作,能跨平台渲染......
  • [排序算法] 堆排序 (C++)
    堆排序解释什么是堆堆heap是一种近似完全二叉树的数据结构,其满足一下两个性质1.堆中某个结点的值总是不大于(或不小于)其父结点的值;2.堆总是一棵完全二叉树将根......
  • 2022.47 AI中的算法与模型
    最近工作中,发现不少人对AI中的算法和模型的概念分不清楚,导致思考沟通表达问题不准确,其实这两个概念还是有很大差别的。AI中的算法,是指在已知样本数据基础上,按照预先设定的......
  • [排序算法] 树形选择排序 (C++)
    树形选择排序解释树形选择排序又称为锦标赛排序,其实理解起来很简单。......
  • 代码随想录算法训练营Day04|24. 两两交换链表中的节点、19. 删除链表的倒数第 N 个结
    代码随想录算法训练营Day04|24.两两交换链表中的节点、19.删除链表的倒数第N个结点、02.07.链表相交、142.环形链表II24.两两交换链表中的节点题目链接:24.两两交......
  • 实验四:神经网络算法实验
    【实验目的】理解神经网络原理,掌握神经网络前向推理和后向传播方法;掌握神经网络模型的编程实现方法。【实验内容】1.1981年生物学家格若根(W.Grogan)和维什(W.Wirth)发现......
  • T292113 [传智杯 #5 练习赛] 平等的交易 ----- 贪心算法、upper_bound()/lower_bound(
    题目描述你有 nn 件道具可以买,其中第 ii 件的价格为 a_iai​。你有 ww 元钱。你仅能用钱购买其中的一件商道具。当然,你可以拿你手中的道具换取其他的道具,只是这......