python机器学习实现神经网络示例解析

 更新时间:2021年10月29日 10:30:52   作者:SquirreI7  
这篇文章主要为大家介绍了python机器学习python实现神经网络的示例解析,在同样在进行python机器学习的同学可以借鉴参考下,希望能够有所帮助

单神经元引论

请添加图片描述

对于如花,大美,小明三个因素是如何影响小强这个因素的。

请添加图片描述

这里用到的是多元的线性回归,比较基础

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
单神经元没法解决,只能解决单一线性关系

请添加图片描述

在这里插入图片描述

代码如下,可自行调整epocheslr

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),就是第三层的误差反向加权传播给第二层

请添加图片描述

以上就是python机器学习实现神经网络示例解析的详细内容,更多关于python机器学习实现神经网络的资料请关注脚本之家其它相关文章!

相关文章

  • 如何从PyTorch中获取过程特征图实例详解

    如何从PyTorch中获取过程特征图实例详解

    特征提取是图像处理过程中常需要用到的一种方法,其效果好坏对模型的泛化能力有至关重要的影响,下面这篇文章主要给大家介绍了关于如何从PyTorch中获取过程特征图的相关资料,需要的朋友可以参考下
    2023-01-01
  • PyTorch中model.zero_grad()和optimizer.zero_grad()用法

    PyTorch中model.zero_grad()和optimizer.zero_grad()用法

    这篇文章主要介绍了PyTorch中model.zero_grad()和optimizer.zero_grad()用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python异步编程入门之实现文件批处理的并发处理方式

    Python异步编程入门之实现文件批处理的并发处理方式

    本文以Python初级程序员为对象,介绍了如何使用asyncio和logging模块实现一个异步批处理文件的并发处理系统,以提高处理大量文件或数据时的效率,其中,通过配置日志系统记录处理文件的日志信息,定义AsyncBatchProcessor类控制并发任务的数量
    2024-10-10
  • python代码中的缩进规则详细解释(史上最全)

    python代码中的缩进规则详细解释(史上最全)

    这篇文章主要介绍了代码缩进的重要性以及在Python语言中的具体规则,代码缩进有助于提高代码的可读性和整洁性,并且是Python语言中一个强制性的语法要求,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-01-01
  • python无法识别vim中文代码的解决方案

    python无法识别vim中文代码的解决方案

    这篇文章主要介绍了python无法识别vim中文代码的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Facebook开源一站式服务python时序利器Kats详解

    Facebook开源一站式服务python时序利器Kats详解

    这篇文章主要为答案及介绍了Facebook开源一站式服务python时序利器Kats的功能详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • python如何解决指定代码段超时程序卡死

    python如何解决指定代码段超时程序卡死

    这篇文章主要介绍了python如何解决指定代码段超时程序卡死,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 详解Python中 __get__和__getattr__和__getattribute__的区别

    详解Python中 __get__和__getattr__和__getattribute__的区别

    __get__、__getattr__、__getattribute都是访问属性的方法,但作用不太相同,这里我们就来详解Python中 __get__和__getattr__和__getattribute__的区别:
    2016-06-06
  • 利用python 读写csv文件

    利用python 读写csv文件

    python中有一个读写csv文件的包,直接import csv即可。利用这个python包可以很方便对csv文件进行操作。
    2020-09-09
  • Python数组与列表的区别解析

    Python数组与列表的区别解析

    列表因为其存储的类型可以是任何对象,因此列表的用处更广泛,更多样化,并且列表可以有更多的存储空间去使用,而数组使用的空间就相对较少,这篇文章主要介绍了Python数组与列表的区别,需要的朋友可以参考下
    2023-11-11

最新评论