热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

有无激活函数训练bp的区别

对于bp神经网络有无激活函数训练,本文使用sigmod函数。对于有sigmoid的bp神经网络,由于sigmod函数理论上讲可将线性相加的组合映射到(0,1)的区间,在一定程度上可

对于bp神经网络有无激活函数训练,本文使用sigmod函数。

对于有sigmoid的bp神经网络,由于sigmod函数理论上讲可将线性相加的组合映射到(0,1)的区间,在一定程度上可以使得将输入进行预测并作出分类。同时,运用梯度下降来更新权重使得反向传播得到可能。

对于无sigmod函数,从理论上讲,其模型就是简单的线性相加求和,对于非线性模型进行预测毫无理论支撑性可言,并且其线性相加的数值可根据权值大小得出的结果也无限大小,其结果数值波动性也特别大,而非误差一直向数值小处进行拓展。

本文使用pycharm对两者进行模拟,对于反向传播,有sigmod函数的bp神经网络还是利用链式法则依次求偏导,无sigmod函数的bp神经网络则直接跳过对激活函数求偏导,而直接对输入函数z(z=w*x+b)求偏导。

迭代100次后观察得出:

无sigmod函数的bp神经网络,其残差数值波动性较大,可能第i+1次比第i次迭代得出的结果还要大,并可能由于偶然性因素,残差竟在第51次迭代得0。但其结果毫无理论性支撑可言。于是换了一组原始输入值,发现其得出结果误差波动性较大,其结果也无实际意义,无法解释其结果理论意义。

#有sigmod函数bp神经网络代码
import
numpy as np
import math
def nonlin(x, deriv=False):
if (deriv == True):
return x * (1 - x) #如果deriv为true,求导数
else:
return 1 / (1 + np.exp(-x))
X
= np.array([[0.35],[0.9]]) #输入层
y = np.array([[0.5]]) #输出值

np.random.seed(
1)
min
=9999
W0
= np.array([[0.1,0.8],[0.4,0.6]])
W1
= np.array([[0.3,0.9]])
print('original ',W0,'\n',W1)
print('begin time ')
for j in range(100):
l0
= X #相当于文章中x0
l1 = nonlin(np.dot(W0,l0)) #相当于文章中y1
l2 = nonlin(np.dot(W1,l1)) #相当于文章中y2
l2_error = y - l2
Error
= 1/2.0*math.pow(l2_error,2)
print('ERROR',j,':',Error)
l2_delta
= l2_error * nonlin(l2, deriv=True) #this will backpack
#print 'l2_delta=',l2_delta
l1_error = l2_delta*W1; #反向传播
l1_delta = l1_error * nonlin(l1.T, deriv=True)
W1
+= l2_delta*l1.T; #修改权值
W0 += l1_delta.dot(l0)
print(W0,'\n',W1)
print('endtime')

无sigmod函数bp神经网络代码
import
numpy as np
import math
X
= np.array([[0.35],[0.9]]) #输入层 #第二次输入值为[0.8],[0.9]
y = np.array([[0.5]]) #输出值      #第二次输入值为[0.7]

np.random.seed(
1)
min
=9999
W0
= np.array([[0.1,0.8],[0.4,0.6]])
W1
= np.array([[0.3,0.9]])
print('original ',W0,'\n',W1)
print('begin time ')
for j in range(100):
l0
= X #相当于文章中x0
l1 = np.dot(W0,l0) #相当于文章中y1
l2 = np.dot(W1,l1) #相当于文章中y2
l2_error = y - l2
Error
= 1/2.0*math.pow(l2_error,2)
print('ERROR',j,':',Error)
l1_delta
= l2_error * W1
W1
+=l2_error*l1.T
W0
+=l1_delta.dot(l0)
#print("Error:",Error)
print(W0,'\n',W1)
print('endtime')

    无sigmod函数结果

        更改输入值后结果



推荐阅读
  • 使用Python代码高效生成大规模随机数据集(千万级) ... [详细]
  • 目录预备知识导包构建数据集神经网络结构训练测试精度可视化计算模型精度损失可视化输出网络结构信息训练神经网络定义参数载入数据载入神经网络结构、损失及优化训练及测试损失、精度可视化qu ... [详细]
  • 使用多项式拟合分析淘宝双11销售趋势
    根据天猫官方数据,2019年双11成交额达到2684亿元,再次刷新历史记录。本文通过多项式拟合方法,分析并预测未来几年的销售趋势。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • Python多线程详解与示例
    本文介绍了Python中的多线程编程,包括僵尸进程和孤儿进程的概念,并提供了具体的代码示例。同时,详细解释了0号进程和1号进程在系统中的作用。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 本文介绍了如何利用 `matplotlib` 库中的 `FuncAnimation` 类将 Python 中的动态图像保存为视频文件。通过详细解释 `FuncAnimation` 类的参数和方法,文章提供了多种实用技巧,帮助用户高效地生成高质量的动态图像视频。此外,还探讨了不同视频编码器的选择及其对输出文件质量的影响,为读者提供了全面的技术指导。 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 本项目通过Python编程实现了一个简单的汇率转换器v1.02。主要内容包括:1. Python的基本语法元素:(1)缩进:用于表示代码的层次结构,是Python中定义程序框架的唯一方式;(2)注释:提供开发者说明信息,不参与实际运行,通常每个代码块添加一个注释;(3)常量和变量:用于存储和操作数据,是程序执行过程中的重要组成部分。此外,项目还涉及了函数定义、用户输入处理和异常捕获等高级特性,以确保程序的健壮性和易用性。 ... [详细]
  • 如何将Python与Excel高效结合:常用操作技巧解析
    本文深入探讨了如何将Python与Excel高效结合,涵盖了一系列实用的操作技巧。文章内容详尽,步骤清晰,注重细节处理,旨在帮助读者掌握Python与Excel之间的无缝对接方法,提升数据处理效率。 ... [详细]
  • Python错误重试让多少开发者头疼?高效解决方案出炉
    ### 优化后的摘要在处理 Python 开发中的错误重试问题时,许多开发者常常感到困扰。为了应对这一挑战,`tenacity` 库提供了一种高效的解决方案。首先,通过 `pip install tenacity` 安装该库。使用时,可以通过简单的规则配置重试策略。例如,可以设置多个重试条件,使用 `|`(或)和 `&`(与)操作符组合不同的参数,从而实现灵活的错误重试机制。此外,`tenacity` 还支持自定义等待时间、重试次数和异常处理,为开发者提供了强大的工具来提高代码的健壮性和可靠性。 ... [详细]
  • Python多线程编程技巧与实战应用详解 ... [详细]
  • 利用 Python Socket 实现 ICMP 协议下的网络通信
    在计算机网络课程的2.1实验中,学生需要通过Python Socket编程实现一种基于ICMP协议的网络通信功能。与操作系统自带的Ping命令类似,该实验要求学生开发一个简化的、非标准的ICMP通信程序,以加深对ICMP协议及其在网络通信中的应用的理解。通过这一实验,学生将掌握如何使用Python Socket库来构建和解析ICMP数据包,并实现基本的网络探测功能。 ... [详细]
author-avatar
xh7212176
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有