2017年11月17日
生成数据集
这里先固定好整个SFC的结构,也就是一共几类VNF,以及每一类SFC的实例个数,以及QOS属性的数量和前向属性的个数K。
可以变动的参数有:
- 每一个VNF当前的QOS取值
- 每一个属性的权重
那么生成的样本的输入属性就是:所有VNF当前的QOS,以及每一个属性的权重组成的一个向量
样本的标签为每一类VNF的选择。
模拟环境示意图
确定到网络的结构
1 | __init__(self, num_i = [2, 3], scope_L = [[1, 1000],[1, 100]], K = 1) |
num_i
为每一类VNF的数量
scope_L
为每一个QOS属性的取值范围
K
为前向属性的数量
随机QOS请求
首先确定出QOS请求的范围
注意到应该有QOS不能被SFC所满足
那么这里将它的范围上限定义为属性的上限乘上VNF的种类数,下限就为属性的下限。?
生成样本写入文件
生成一百万条样本
写成CSV文件
1 | import numpy as np |
神经网络
直接使用keras,使用一个三隐藏层的神经网络进行尝试。
每一层1000个神经元。
1 | def my_net(input_len = (56,), output_len = 61): |
目前的效果
使用100万条样本,其中70万条作为训练集,30万作为测试集。
1
2
3
4
Epoch 50/50
- 124s - loss: 1.0770 - acc: 0.6653
Test Loss = 1.12501473908
Test Accuracy = 0.668746666667
1 | Epoch 50/50 |
2017年11月24日
sfc网络数据生成
前提:
- 网络结构最大5*5,否则网络过大会造成数据量爆炸。
- Qos属性数量最大为4。理由同上。
- 想象中,请求从前向后依次经过每一类VNF,因为这里是加性的权重,经过顺序其实没有关系。
- Qos属性的取值范围确定。反正进行归一化之后,范围没有任何影响。
可变参数:
- 网络中存在的VNF。在5*5的网络结构矩阵中,存在的VNF取值为1,否则为0。
- VNF的Qos取值。由于是4维属性,那么就是5*5*4的矩阵。
- 前后向属性的个数。前向属性,Qos取值乘上-1。
- 每一个属性的权重。4维属性,那么将每一个属性的权重扩张为5*5的矩阵,组成5*5*4的矩阵。
- Qos请求。4维属性,与上面相同,扩张为5*5*4的矩阵。
注意:这里的参数之所以设计为矩阵,是为了利用到卷积神经网络。
样本属性:
4层Qos属性取值,4层Qos属性权重,4层Qos请求,总共12层,5*5*12?
样本标签:
5*6的矩阵,第一行有6列,每一列代表一个分类,那么就是选1、2、3、4、5或者不选(也就是不满足)。
图形表示:
神经网络
训练五个同样结构的神经网络,每一个指示其中一类VNF的选取。
1 | def my_net(input_len = (5,5,12), classes = 6 ): |
训练集样本:
1 | $ print(X_train.shape, Y_train.shape) |
测试集样本:
1 | $ print(X_test.shape, Y_test.shape) |
样本中大约10%的样本为当前不能服务。
训练次数:
epoch = 100。
测试集上精度:
单神经网络精度(单类VNF选择):88.58 %
总精度:58.12%