您的位置:首页 > 理论基础 > 计算机网络

BP神经网络的网络带宽预测

2016-04-22 16:26 281 查看
网络流量预测的背景

网络流量为指定时间内通过网络或网络端口的数据大小,各个网络节点都是有瓶颈的,当流量达到或超过节点的瓶颈时,网络服务已经收到了不同程度的影响。建立网络流量模型,通过模型预测将来可能超过瓶颈的的时间和可能性,便可以预先采取一定的防护措施,如大节点的流量切换;另外由于各个节点的计费方式和价格也不同,我们可以依据预测的流量在不影响用户体验的情况下把代价高的流量切换到代价低的节点上,减少带宽的支出。

人工神经网络

人工神经网络是一个能够自动学习总结归纳的协同,它能够通过已知的数据来学习和归纳,对局部的情况对照比较能推理产生一个自动识别的系统。

通常来说人工神经网络是有一个多层神经元结构组成的网络结构,本例中使用的是多层结构的前馈网络,它由三部分组成

输入层(Input
layer),众多神经元(Neuron)接受大量非线形输入信息。输入的信息称为输入向量。
输出层(Output
layer),信息在神经元链接中传输、分析、权衡,形成输出结果。输出的信息称为输出向量。
隐藏层(Hidden
layer),简称“隐层”,是输入层和输出层之间众多神经元和链接组成的各个层面。隐层可以有多层,习惯上会用一层。隐层的节点(神经元)数目不定,但数目越多神经网络的非线性越显著,从而神经网络的强健性(robustness)(控制系统在一定结构、大小等的参数摄动下,维持某些性能的特性。)更显著。

输出个数最要是看你怎么来看结果了。比如你可以用一个神经元,取值为1-20来表示每个类,也可以用5个神经元,用二进制来表示一类,比如第5类,为00101,还可以用20个神经元来表示等等
神经网络输入层神经元的个数和你输入的参数个数相等
习惯上会选输入节点1.2至1.5倍的节点,或输入层神经元数目乘以输出层神经元数开根号。

基本构成

人工神经网络由神经元模型构成,这种由许多神经元组成的信息处理网络具有并行分布结构。每个神经元具有单一输出,并且能够与其它神经元连接;存在许多(多重)输出连接方法,每种连接方法对应一个连接权系数。可把
ANN 看成是以处理单元 PE(processing element) 为节点,用加权有向弧(链)相互连接而成的有向图。令来自其它处理单元(神经元)i的信息为Xi,它们与本处理单元的互相作用强度为 Wi,i=0,1,…,n-1,处理单元的内部阈值为 θ。那么本神经元的输入为:



而处理单元的输出为:



式中,xi为第 i 个元素的输入,wi 为第 i 个元素与本处理单元的互联权重。f 称为激发函数(activation
function)或作用函数。它决定节点(神经元)的输出。该输出为 1 或 0 取决于其输入之和大于或小于内部阈值 θ。

下图所示神经元单元由多个输入Xi,i=1,2,...,n和一个输出y组成。中间状态由输入信号的权和表示,而输出为:



作用函数是反映下层输入对上层节点刺激脉冲强度的函数又称刺激函数,一般取为(0,1)内连续取值Sigmoid函数: f(x)=1/(1+e-x)

关键实现

pybrain是python的人工神经网络包,网络地址为:http://www.pybrain.org/docs/index.html

首先对把数据规整为想要的格式:

7107096, 8533904, 9968112, 9509840, 7633016, 8377680,
9035520, 9907744, 11819432, 10105136, -> 11080640

8533904, 9968112, 9509840, 7633016, 8377680, 9035520, 9907744, 11819432, 10105136, 11080640, -> 8789912

。。。

每连续十天的一个大节点的流量数据作为输入,下一天的数据作为输出

ds = SupervisedDataSet(10,1)
利用pybrain的函数建立数据集(把训练集中所有的数据都写入)

while ***:

inList,outList = content.split('->')

inList = tuple(map(lambda n
:float(n)/10000000 ,inList.strip(', ').split(',
')))//归一化简单的处理都除以了/10000000

outList = tuple(map(lambda n:float(n)/10000000 ,outList.strip(',
').split(', ')))

ds.addSample(inList,outList)

输入数据集建立完毕

net = buildNetwork(10,12,1,bias=True)
建立网络

trainer = BackpropTrainer(net,ds) 训练

#trainer.trainEpochs(500) 利用低度下降法训练500次

trainer.trainUntilConvergence() 训练直到收敛

print net.activate((1.0860368, 1.1647056, 0.7756248, 0.8321048, 0.10194144,0.11894632, 0.8946552, 1.0466936, 1.2625720, 1.2823216))
预测
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: