首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

实验1:深度学习——HTTP CSIC2010入侵检测

在得到CSIC2010数据的词(符号)向量化表示之后,可以使用深度学习模型来学习分类检测模型,本节采用卷积神经网络,循环神经网络(LSTM和GRU)以及卷积循环组合网络进行入侵检测,具体原理请参考原著[1,2]。

前一节向量表示学习后保存了一个词向量文件,在深度学习前,需要将词向量文件中的词和向量分别提取出来构建词典和词向量映射矩阵,具体代码如下:

其中,函数read_word_dict_and_vectors的功能是从前一节保存的词向量文件读取数据,其中增加一个未知词和对应全零的词向量。

函数build_word_idx_for_sentence的功能是给定一个句子、向量长度和词典索引,先对句子进行分词,在根据词获取词在词典中的索引,将索引拼起来得到句子的词索引向量,以表示一句话。

函数read_dataset_from_file的功能是从正负样本(句子)文件中读取数据,并根据函数build_word_idx_for_sentence为每个样本(句子)生成词索引向量,最后根据样本类别生成标签。

函数create_cnn_network的功能是创建一个卷积神经网络。首先,该网络有一个嵌入层,即将词索引转化为词向量的过程,本函数提供了两种方法:第一种是随机生成词向量作为嵌入层作为初始词向量;第二种是将前一节Word2Vec词向量传递给嵌入层作为初始词向量,两种方式在训练中会对词向量进行更新。然后,网络接三个不同大小的卷积,合并后通过最大值池化、dropout策略和全连接完成到交叉熵损失函数的连接。对于tflearn.embedding函数需要修改其中的内容以完成词向量的传递,将embedding_ops.py文件中的第56~58行修改为下图阴影区域的代码,修改后代码将根据参数W_init的类型选择不同的初始化方式,具体修改如下:

其中,if-else语句决定词向量的初始化方式。

函数create_rnn_network的功能是创建一个循环神经网络,嵌入层与前述卷积网络类似,本函数提供了两种循环网络方法:第一种是长短时记忆;第二种是门控记忆单元。然后网络接dropout策略和全连接完成到交叉熵损失函数的连接。

函数create_com_network的功能是创建一个卷积循环组合神经网络,嵌入层与前述卷积网络类似,本函数先接一个大小为5的卷积层,再通过一个大小为5的池化层,接着接循环网络层,然后网络接dropout策略和全连接完成到交叉熵损失函数的连接。

上述函数完成数据的读取、网络的构建,对于主调程序如下:

其中,上述内容完成的是数据的读取,构建训练集合测试集,并初始化词向量维度和句子长度变量。

上面是卷积神经网络的一个构建、训练和测试过程。修改create_cnn_network为create_rnn_network或create_com_network,则实现循环神经网络和卷积循环组合网络的评测。一个典型执行的结果为:

同时修改函数不同参数,得到如下测试结果:

各类方法和参数测试结果

本节对深度学习中的卷积神经网络、循环神经网络及卷积循环组合网络进行了测试,对于不同的网络参数可进一步调整以提高效果。

参考文献:

[1]Kim Y. Convolutional Neural Networks forSentence Classification[C]. Empirical Methods in Natural Language Processing,2014.

[2]Wang J., et. al. Evaluating CNN and LSTM for WebAttack Detection[C]. International Conference on Machine Learning andComputing, 2018.

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180324G13MDG00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券