python机器学习实现神经网络示例解析
作者:SquirreI7 时间:2022-10-24 03:45:09
单神经元引论
对于如花,大美,小明三个因素是如何影响小强这个因素的。
这里用到的是多元的线性回归,比较基础
from numpy import array,exp,dot,random
其中dot
是点乘
导入关系矩阵:
X= array ( [ [0,0,1],[1,1,1],[1,0,1],[0,1,1]])
y = array( [ [0,1,1,0]]).T ## T means "transposition"
为了满足0到1的可能性,我们采用激活函数
matlab作图
x=[-8:0.001:8]
y=1./(1+exp(-x))
plot(x,y)
grid on
text(-6,0.8,['$\frac{1}{1+e^{-x}}$'],'interpreter','latex','fontsize',25)
然后
for it in range(10000):
z=dot(X,weights)
output=1/(1+exp(-z))##'dot' play role of "dot product"
error=y-output
delta=error*output*(1-output)
weights+=dot(X.T,delta)
其中
delta=error*output*(1-output)
是求导的结果和误差相乘,表示梯度
具体数学流程
所以具体流程如下,X
具体化了一下
error
即为每个带权参数经过激活函数映射后到y结果的量化距离
最终代码:(PS:默认lr取1,可修改)
from numpy import array,exp,dot,random
"""
Created on vscode 10/22/2021
@author Squirre17
"""
X=array([[0,0,1],[1,1,1],[1,0,1],[0,1,1]])
y=array([[0,1,1,0]]).T ## T means "transposition"
random.seed(1)
epochs=10000
weights=2*random.random((3,1))-1## 3 row 1 line, range[-1,1)
for it in range(epochs):
output=1/(1+exp(-dot(X,weights)))##'dot' play role of "dot product"
error=y-output
slope=output*(1-output)
delta=error*slope
weights+=dot(X.T,delta)
print(weights)
print(1/(1+exp( -dot([[1,0,0]], weights))))
参考
多神经元
这个意思就是两个美女XOR
单神经元没法解决,只能解决单一线性关系
代码如下,可自行调整epoches
和lr
from numpy import array,exp,dot,random
"""
Created on vscode 10/22/2021
@author Squirre17
"""
X=array([[0,0,1],[0,1,1],[1,0,1],[1,1,1]])
y=array([[0,1,1,0]]).T # T means "transposition"
random.seed(1)
epochs=100000
w0=2*random.random((3,4))-1 # input layer neure
w1=2*random.random((4,1))-1 # hidden layer neure
lr=1
def fp(input):
l1=1/(1+exp(-dot(input,w0))) # 4×4
l2=1/(1+exp(-dot(l1,w1))) # 4×1
return l1,l2
def bp(l1,l2,y):
l2_error=y-l2
l2_slope=l2*(1-l2)
l1_delta=l2_error*l2_slope*lr # 4×1
l1_error=l1_delta.dot(w1.T)
l1_slope=l1*(1-l1)
l0_delta=l1_error*l1_slope*lr
return l0_delta,l1_delta
for it in range(epochs):
l0=X
l1,l2=fp(l0)
l0_delta,l1_delta=bp(l1,l2,y)
w1+=dot(l1.T,l1_delta) # 4×4 4×1 # adjust w1 according to loss
w0+=dot(l0.T,l0_delta)
print(fp([[1,0,0]])[1])
其中关于l1_error=l1_delta.dot(w1.T)
,就是第三层的误差反向加权传播给第二层
来源:https://blog.csdn.net/Xuanyaz/article/details/120913389
标签:python,机器学习,神经网络
0
投稿
猜你喜欢
谈谈FACEBOOK的一处产品细节
2008-03-11 11:05:00
JavaScript 获取客户端计算机硬件及系统信息
2009-01-13 17:59:00
python+selenium实现简历自动刷新的示例代码
2023-11-27 16:13:01
python绘制棉棒图的方法详解
2021-11-06 06:24:58
vue中typescript装饰器的使用方法超实用教程
2024-05-28 15:47:06
Go语言编程中字符串切割方法小结
2023-06-16 01:41:24
利用python和百度地图API实现数据地图标注的方法
2023-01-30 11:59:43
浅谈配置OpenCV3 + Python3的简易方法(macOS)
2023-03-26 02:35:36
java正则表达式之Pattern与Matcher类详解
2023-06-21 10:14:03
JS使用百度地图API自动获取地址和经纬度操作示例
2024-04-23 09:31:24
Spring Boot Mysql 数据库操作示例
2024-01-19 10:22:28
详解 python logging日志模块
2021-05-07 19:59:01
解决SpringBoot启动过后不能访问jsp页面的问题(超详细)
2023-06-13 19:43:31
PHP session有效期session.gc_maxlifetime
2023-11-14 17:01:45
MySQL性能优化技巧分享
2024-01-26 06:58:16
OpenCV实战之实现手势虚拟缩放效果
2023-04-06 12:51:09
使用百度云加速后网站打开速度慢、广告不显示的解决方法
2023-04-23 19:07:24
vscode常用插件整理汇总
2023-11-21 10:48:59
php读取mysql的简单实例
2023-11-15 08:57:51
聊一聊Vue.js过渡效果
2024-05-13 09:07:51