使用python实现一段bp神经网络后,由于数据量增多(76条),出现nan报错

代码如下:

# coding:utf-8

import numpy as np

import matplotlib.pyplot as plt

def logsig(x):

return 1.0/(1+np.exp(-x))

#76条归一化数据

#输出层

# 订单数

ordernum=[12668619, 13103780, 13257004, 14638190, 14726263, 12600723, 12949334, 13341628, 13169524, 13301632, 15020992, 15606709, 13446703, 13371539, 13262251, 13162602, 13168550, 13598886, 12370827, 11962626, 11717528, 11869467, 12318038, 13303466, 14288269, 12600621, 12957388, 13200367, 13271152, 13051823, 15049197, 16090773, 13568785, 13152151, 12927545, 12827040, 13172809, 14904629, 15239996, 12646447, 12834756, 13102306, 13447091, 13632212, 15747318, 16151994, 13377774, 13633451, 13317559, 13592490, 14065724, 15377027, 15486313, 13024443, 13557400, 13234309, 13538881, 14339158, 15770610, 16017075, 13932597, 14057435, 14136860, 14621550, 15745729, 17343336, 17072830, 14217876, 14457732, 14380455, 14505519, 14957927, 16587364, 16489540, 13943044, 14326370]

# 输入层 3 个变量

#是否节假日(0代表工作日;1代表节假日)

holiday=[0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0]

#整体在线商家数

shopnum= [0, 0.0171, 0.0372, 0.0415, 0.0432, 0.0618, 0.0794, 0.0971, 0.1153, 0.1313, 0.1359, 0.1377, 0.1537, 0.1685, 0.1799, 0.1882, 0.1949, 0.1989, 0.2021, 0.2016, 0.1977, 0.1931, 0.1933, 0.1945, 0.1901, 0.2004, 0.2148, 0.2323, 0.2508, 0.2686, 0.2724, 0.2725, 0.2854, 0.3036, 0.3230, 0.3428, 0.3610, 0.3637, 0.3642, 0.3770, 0.3920, 0.4077, 0.4199, 0.4304, 0.4301, 0.4299, 0.4389, 0.4428, 0.4576, 0.4702, 0.4837, 0.4837, 0.4850, 0.5022, 0.5165, 0.5273, 0.5427, 0.5560, 0.5566, 0.5566, 0.5724, 0.5871, 0.6020, 0.6167, 0.6307, 0.6319, 0.6332, 0.6489, 0.6601, 0.6670, 0.6713, 0.6759, 0.6673, 0.6655, 0.6733, 0.6720]

#整体补贴率

subsidyrate=[0.5333, 0.7238, 0.5905, 0.5619, 0.5762, 0.4619, 0.4143, 0.4571, 0.4667, 0.2762, 0.3238, 0.3381, 0.2095, 0.1952, 0.2333, 0.3571, 0.3714, 0.3524, 0.0667, 0.0143, 0.0000, 0.1000, 0.0095, 0.1048, 0.1619, 0.0714, 0.0619, 0.0857, 0.2238, 0.1143, 0.2000, 0.2143, 0.0857, 0.1810, 0.2286, 0.4333, 0.3571, 0.3810, 0.3905, 0.3571, 0.4000, 0.5000, 0.9095, 0.9238, 0.9190, 0.9476, 1.0000, 0.9381, 0.7905, 0.9619, 0.8095, 0.6286, 0.5714, 0.5143, 0.4952, 0.4619, 0.5857, 0.5190, 0.6714, 0.5952, 0.5571, 0.6333, 0.6714, 0.7190, 0.6476, 0.6952, 0.5286, 0.4190, 0.4000, 0.4190, 0.5810, 0.5476, 0.5714, 0.5524, 0.4762, 0.4714]

# 输入值

samplein = np.mat([holiday,subsidyrate,shopnum]) #3*76

sampleinminmax = np.array([samplein.min(axis=1).T.tolist()[0],samplein.max(axis=1).T.tolist()[0]]).transpose()#3*2,对应最大值最小值

# 输出值

sampleout = np.mat([ordernum])#1*76

sampleoutminmax = np.array([sampleout.min(axis=1).T.tolist()[0],sampleout.max(axis=1).T.tolist()[0]]).transpose()#2*2,对应最大值最小值

#3*76

sampleinnorm = (2*(np.array(samplein.T)-sampleinminmax.transpose()[0])/(sampleinminmax.transpose()[1]-sampleinminmax.transpose()[0])-1).transpose()

#1*76

sampleoutnorm = (2*(np.array(sampleout.T).astype(float)-sampleoutminmax.transpose()[0])/(sampleoutminmax.transpose()[1]-sampleoutminmax.transpose()[0])-1).transpose()

#给输出样本添加噪音

noise = 0.03*np.random.rand(sampleoutnorm.shape[0],sampleoutnorm.shape[1])

sampleoutnorm += noise

# 训练次数

maxepochs = 1500

# 学习速率

learnrate = 0.035

# 误差率

errorfinal = 0.65*10**(-3)

#errorfinal = 0.05

# 数据量

samnum = 76

# 输入数

indim = 3

# 输出数

outdim = 1

hiddenunitnum = 8 # 2~10

# 随机产生权值和偏置

w1 = 0.5*np.random.rand(hiddenunitnum,indim)-0.1

b1 = 0.5*np.random.rand(hiddenunitnum,1)-0.1

w2 = 0.5*np.random.rand(outdim,hiddenunitnum)-0.1

b2 = 0.5*np.random.rand(outdim,1)-0.1

errhistory = []

for i in range(maxepochs):

hiddenout = logsig((np.dot(w1,sampleinnorm).transpose()+b1.transpose())).transpose()

hiddenout = np.nan_to_num(hiddenout)

networkout = (np.dot(w2,np.nan_to_num(hiddenout)).transpose()+b2.transpose()).transpose()

err = sampleoutnorm - np.nan_to_num(networkout)

sse = sum(sum(err**2))

errhistory.append(sse)

if sse < errorfinal:

break

delta2 = err

delta1 = np.dot(w2.transpose(),delta2)*hiddenout*(1-hiddenout)

dw2 = np.dot(delta2,hiddenout.transpose())

db2 = np.dot(delta2,np.ones((samnum,1)))

dw1 = np.dot(delta1,sampleinnorm.transpose())

dw1 = np.nan_to_num(dw1)

db1 = np.dot(delta1,np.ones((samnum,1)))

# db1 = np.nan_to_num(db1)

# w2 += learnrate*dw2

# b2 += learnrate*db2

w2 = np.nan_to_num(w2+learnrate * dw2)

b2 = np.nan_to_num(b2+learnrate*db2)

w1 += learnrate*dw1

b1 += learnrate * db1

# b1 = np.nan_to_num(b1+learnrate*db1)

# print 'db1=', db1

# print 'db1=', db1

# print 'err=',err,'w1=',w1,'w2=',w2,'b1=',b1,'b2=',b2

# 误差曲线图

errhistory10 = np.log10(errhistory)

minerr = min(errhistory10)

plt.plot(errhistory10)

plt.plot(range(0,i+1000,1000),[minerr]*len(range(0,i+1000,1000)))

ax=plt.gca()

ax.set_yticks([-2,-1,0,1,2,minerr])

ax.set_yticklabels([u'$10^{-2}$',u'$10^{-1}$',u'$1$',u'$10^{1}$',u'$10^{2}$',str(('%.4f'%np.power(10,minerr)))])

ax.set_xlabel('iteration')

ax.set_ylabel('error')

ax.set_title('Error History')

plt.savefig('total-errorhistory.png',dpi=700)

plt.close()

# 仿真输出和实际输出对比图

hiddenout = logsig((np.dot(w1,sampleinnorm).transpose()+b1.transpose())).transpose()

networkout = (np.dot(w2,hiddenout).transpose()+b2.transpose()).transpose()

diff = sampleoutminmax[:,1]-sampleoutminmax[:,0]

networkout2 = (networkout+1)/2

networkout2[0] = networkout2[0]*diff[0]+sampleoutminmax[0][0]

#networkout2[1] = networkout2[1]*diff[1]+sampleoutminmax[1][0]

sampleout = np.array(sampleout)

print 'networkout',networkout

fig,axes = plt.subplots(nrows=2,ncols=1,figsize=(12,10))

line1, =axes[0].plot(networkout2[0],'k',marker = u'$\circ$')

line2, = axes[0].plot(sampleout[0],'r',markeredgecolor='b',marker = u'$\star$',markersize=9)

print "chazhi=",(networkout2[0]-sampleout[0])

print"准确率=",(sampleout[0]/networkout2[0])

print"误差率=",((networkout2[0]-sampleout[0])/networkout2[0])

axes[0].legend((line1,line2),('simulation output','real output'),loc = 'upper left')

yticks = [10000000,12000000,14000000,16000000,18000000]

ytickslabel = [u'$10$',u'$12$',u'$14$',u'$16$',u'$18$']

axes[0].set_yticks(yticks)

axes[0].set_yticklabels(ytickslabel)

axes[0].set_ylabel('ordernum')

xticks = range(0,30,1)

xtickslabel = range(0,30,1)

axes[0].set_xticks(xticks)

axes[0].set_xticklabels(xtickslabel)

axes[0].set_xlabel(u'date')

axes[0].set_title('ordernum')

fig.savefig('total-simulation.png',dpi=500,bbox_inches='tight')

plt.close()

python 神经网络 多进程_使用python实现一段bp神经网络后,由于数据量增多(76条),出现nan报错...相关推荐

  1. python读取大数据量xml_[C#]_[使用微软OpenXmlSDK (OpenXmlReader)读取xlsx表格] 读取大数据量100万条数据Excel文件解决方案...

    1.OpenXmlSDK是个很好的类库,可惜只能通过C#调用,C#的童鞋又福气了. 2.服务端程序由于没法安装office,所以这个对asp.net网站来说是最理想的库了.需要.net 4.0版本以上 ...

  2. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  3. python的认识_认识Python和基础知识

    一.第一个Python程序 用vim编写,格式: vim hello.py 然后按 i 进入插入模式开始写代码,注意所有的代码都要用英文输入法,先写括号和引号,再在引号里面写内容(为了避免引号.括号不 ...

  4. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  5. python生成器单线程_【Python】迭代器、生成器、yield单线程异步并发实现详解

    转自http://blog.itpub.net/29018063/viewspace-2079767 大家在学习python开发时可能经常对迭代器.生成器.yield关键字用法有所疑惑,在这篇文章将从 ...

  6. python数据分析准备_使用Python进行数据分析I 环境准备

    下载Python包并安装:https://www.continuum.io/downloads Alan采用Mac OSX进行操作,这里下载最新版Python 3.5 在Terminal中输入pyth ...

  7. 《MATLAB神经网络案例分析》学习(一)——BP神经网络基本理论

    一.BP神经网络理论基本介绍 BP(Back Propagation)是一种按误差逆传播算法训练的多层前馈网络,是应用最广泛的神经网络模型之一.BP网络能学习和存贮大量的输入-输出模式映射关系,而无需 ...

  8. python深度神经网络量化_基于Python建立深度神经网络!你学会了嘛?

    原标题:基于Python建立深度神经网络!你学会了嘛? 图1 神经网络构造的例子(符号说明:上标[l]表示与第l层:上标(i)表示第i个例子:下标i表示矢量第i项) 单层神经网络 图2 单层神经网络示 ...

  9. python编程图文_深入Python多进程编程基础——图文版

    多进程编程知识是Python程序员进阶高级的必备知识点,我们平时习惯了使用multiprocessing库来操纵多进程,但是并不知道它的具体实现原理.下面我对多进程的常用知识点都简单列了一遍,使用原生 ...

最新文章

  1. 在Linux上安装Memcached服务
  2. 关于学习Python的一点学习总结(36->基本序列和映射协议)
  3. 地球系统科学简史:理解地球复杂性的多学科探索历程
  4. java try resource_从 Java 字节码角度看 try with resource 语法糖
  5. 【GAN优化】GAN优化专栏上线,首谈生成模型与GAN基础
  6. 基于Xml 的IOC 容器-载入配置路径
  7. 安卓应用用户数据_Android手机用户注意,你要知道的中国十大安卓应用商店
  8. mysql 值到99999后不增值了_MySQL必知必会3
  9. MySQL数据库的优化-运维架构师必会高薪技能,笔者近六年来一线城市工作实战经验...
  10. Python使用标准库itertools中count类求解数苹果问题
  11. 各大搜索引擎提交地址
  12. java获得当前路径_JAVA 取得当前目录的路径/Servlet/class/文件路径/web路径/url地址...
  13. 2019最新 Java商城秒杀系统的设计与实战视频教程(SpringBoot版)_2-1微服务项目的搭建-SpringBoot搭建多模块项目一...
  14. MySQL中的时间函数
  15. python火了_【资源篇】Python那么火,你还不知道如何人门?
  16. android dex文件改造过程
  17. 云计算趋势:从SAS和RAID看服务器与存储的融合
  18. 多进程中的进程锁(互斥锁)
  19. extern声明变量或函数
  20. 山东大学人工智能专业认知科学与类脑计算回忆版

热门文章

  1. 蓝桥杯软件类Java语言IDE(Eclipse)安装
  2. 终极指南:构建用于检测汽车损坏的Mask R-CNN模型(附Python演练)
  3. 测试案例:登录--手机号验证码登录
  4. pandoc实现LaTeX转word+公式格式批量转换
  5. 6个例子掌握print函数的format用法
  6. #力扣LeetCode720. 词典中最长的单词 @FDDLC
  7. JVM中篇:字节码与类的加载篇之02-字节码指令集
  8. 极简而高效的沟通管理法
  9. 2021-07-22虚拟内存(三)页表
  10. Linux查看目录占用磁盘block,linux系统磁盘block、inode占满处理