版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
卷积神经网络算法动提取高级特征,并进一步分析,同时使得计算复杂度以指数级别下卷积神经网络算法识别恶意评论,识别垃圾邮件等。目录TOC\o"1-1"\h\u171031卷积神经网络算法概述 3100592示例:helloworld!卷积神经网络 760613示例:识别恶意评论 983081.数据清洗与特征化 976872.训练样本 10114003.验证效果 10160064示例:识别垃圾邮件 11卷积神经网络算法概述人脸识别等图像识别技术正在改变人们的生活,如图17-1所示,回顾之前识别MNIST数据集时,28×28的图片识别数字的成功率都徘徊在95%左右,那是什么样的技术让图像识别长足发展的呢?答案就是卷积神经网络。图17-1 人脸识别卷积神经网络(ConvolutionalNeuralNetwork,CNN)原本是在图像处理领域应用的,后来广泛应用于文本处理、语音识别等领域。是近年发展起来的,并引起广泛重视的一种高效识别图像的方法。20世纪60年代,Hubel和Wiesel在研究猫脑皮层中用于局部敏感和方向选择的神经元时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性,继而提出了卷积神经网络。现在,CNN究热点之一,特别是在模式分类领域,由于该网络避免了对图像的复杂前期预处理,可以直接输入原始图像,因而得到了更为广泛的应用,如图17-2所示。K.Fukushima在1980年提出的新识别机是卷积神经网络的第一个实现网络。随后,更多的科研工作者对该网络进行了改进。其中,具有代表性的研究成果是Alexander和Taylor提出的“改进认知机”,该方法综合了各种改进方法的优点并避免了耗时的误差反向传播。图17-2 CNN图像处理示例图在DNN这类全连接神经网络算法中,隐藏层的前一层的每个节点都需要与下一层的每个节点连接,当节点数量巨大时,产生的连接就非常多,这样,在硬件环境有限的情况下就几乎难以完成训练过程,如图17-3所示。图17-3 全连接神经网络为了解决图像处理领域全连接造成的计算量巨大的问题,人们提出了局部连接,如图17-4所示。其理论基础是基于这样的假设:生物在进行图像识别时,对图像的理解只需要处理局部的数据即可,不需要全面分析全部图像后才能进行处理。这一假设在图像处理领域得到了广泛应用,证明其简单有效。图17-4 局部连接神经网络在卷积神经网络中有几个概念需要介绍一下所谓权值共享是指当从一个大尺寸图像中随机选取一小块,比如说8×8作为样本,并且从这个小块样本中学习到了一些特征,这时我们可以把从这个8×8样本中学习到的特征作为探测器,应用到这个图像的任意地方。特别是,我们可以用从8×8样本中所学习到的特征跟原本的大尺寸图像作卷积,从而在这个大尺寸图像上的任一位置获得一个不同特征的激活值。如图17-5所示,展示了一个3×3的卷积核在5×5的图像上做卷积的过程。每个卷积都是一种特征提取方式,就像一个筛子,将图像中符合条件(激活值越大越符合条件)的部分筛选出来。图17-5 CNN权值共享原理所谓池化是指人们可以计算图像一个区域上的某个特定特征的平均值或者最大值。这些概要统计特征不仅具有低得多的维度,同时还会改善结果。这种聚合的操作就叫做池化。基于局部连接、权值共享以及池化层的降采样,进一步发展成了完整的CNN算法,关于CNN的详细算法说明不是本书的重点,有兴趣的读者可以参考本章最后的参考文献。示例:helloworld!卷积神经网络完整演示代码请见本书GitHub上的17-1.py。数据清洗与特征化我们继续使用MNIST数据集,MNIST数据集的详细介绍请阅读第3章相关内容。这次我们利用TFLearn提供的API来获取MNIST数据集:X,Y,testX,testY=mnist.load_data(one_hot=True)第一次调用这个API的时候,会自动下载MNIST数据集到默认目录:DownloadingMNIST...Succesfullydownloadedtrain-images-idx3-ubyte.gz9912422bytes.Extractingmnist/train-images-idx3-ubyte.gzDownloadingMNIST...Succesfullydownloadedtrain-labels-idx1-ubyte.gz28881bytes.Extractingmnist/train-labels-idx1-ubyte.gzDownloadingMNIST...Succesfullydownloadedt10k-images-idx3-ubyte.gz1648877bytes.Extractingmnist/t10k-images-idx3-ubyte.gzDownloadingMNIST...Succesfullydownloadedt10k-labels-idx1-ubyte.gz4542bytes.Extractingmnist/t10k-labels-idx1-ubyte.gz后继再调用该API时会自动从默认目录中加载对应的文件:Extractingmnist/train-images-idx3-ubyte.gzExtractingmnist/train-labels-idx1-ubyte.gzExtractingmnist/t10k-images-idx3-ubyte.gzExtractingmnist/t10k-labels-idx1-ubyte.gz图片样本大小为28×28,TFLearn默认将其转换成维度为784的向量,为了处理方便,需要恢复成28×28的二维向量:X=X.reshape([-1,28,28,1])testX=testX.reshape([-1,28,28,1])训练样本构造CNN网络,定义输入层,大小为28×28:net=tflearn.input_data(shape=[None,28,28,1])构造二维卷积函数:net=tflearn.conv_2d(net,64,3,activation=’relu’,bias=False)组装余下神经网络:net=tflearn.residual_bottleneck(net,3,16,64)net=tflearn.residual_bottleneck(net,1,32,128,downsample=True)net=tflearn.residual_bottleneck(net,2,32,128)net=tflearn.residual_bottleneck(net,1,64,256,downsample=True)net=tflearn.residual_bottleneck(net,2,64,256)net=tflearn.batch_normalization(net)net=tflearn.activation(net,'relu')net=tflearn.global_avg_pool(net)net=tflearn.fully_connected(net,10,activation='softmax')net=tflearn.regression(net,optimizer='momentum',loss='categorical_crossentropy',learning_rate=0.1)效果验证训练并交叉验证效果,准确率达到了99%以上,非常不错:model=tflearn.DNN(net,checkpoint_path='model_resnet_mnist',max_checkpoints=10,tensorboard_verbose=0)model.fit(X,Y,n_epoch=100,validation_set=(testX,testY),show_metric=True,batch_size=256,run_id='resnet_mnist')示例:识别恶意评论完整演示代码请见本书GitHub上的17-2.py。数据清洗与特征化这次我们的样本依然采用MovieReviewData数据集。MovieReviewData数据集包含1000条正面评论和1000条负面评论,被广泛应用于文本分类尤其是恶意评论识别方面。本书使用其最新的版本,polaritydatasetv2.0,详细的介绍请参考第3章相关内容。MovieReviewData数据集的每条评论都保存成单独的一个文本文件,正面和负面评论放置在不同的文件夹下面,使用词袋模型将文本向量化。读取文件,把每个文件转换成一个字符串:defload_one_file(filename):x=""withopen(filename)asf:forlineinf:x+=linereturnx遍历读取文件夹下全部文件:defload_files(rootdir,label):list=os.listdir(rootdir)x=[]y=[]foriinrange(0,len(list)):path=os.path.join(rootdir,list[i])ifos.path.isfile(path):print"Loadfile%s"%pathy.append(label)x.append(load_one_file(path))returnx,y根据不同文件夹,标记为正面和负面,其中正面评论标记为0,负面评论标记为1:defload_data():x=[]y=[]x1,y1=load_files("../data/movie-review-data/review_polarity/txt_sentoken/pos/",0)xx=x1+x2y=y1+y2returnx,y使用词袋模型将数据向量化,并且使用train_test_split将样本随机划分成训练集合和测试集合,分配比例为0.4,这个比例可以根据自己的需要进行调整,不过一般都是建议使用40%作为测试数据:x,y=load_data()x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.4,random_stavp=learn.preprocessing.VocabularyProcessor(max_document_length=MAX_DOCUMENT_LENGTvp.fit(x)x_train=np.array(list(vp.transform(x_train)))x_test=np.array(list(vp.transform(x_test)))n_words=len(vp.vocabulary_)print(‘Totalwords:%d'%n_words)训练样本构造CNN,使用一维卷积函数:network=input_data(shape=[None,MAX_DOCUMENT_LENGTH],name='input')network=tflearn.embedding(network,input_dim=n_words+1,output_dim=128)branch1=conv_1d(network,128,3,padding='valid',activation='relu',regularizer=branch2=conv_1d(network,128,4,padding='valid',activation='relu',regularizer=branch3=conv_1d(network,128,5,padding='valid',activation='relu',regularizer=network=merge([branch1,branch2,branch3],mode='concat',axis=1)network=tf.expand_dims(network,2)network=global_max_pool(network)network=dropout(network,0.5)network=fully_connected(network,2,activation='softmax')network=regression(network,optimizer='adam',learning_rate=0.001,loss='categorical_crossentropy',name='target')验证效果CNN算法在fit函数中直接指定了测试数据集合(testX,testY):model=tflearn.DNN(network,tensorboard_verbose=0)model.fit(trainX,trainY,n_epoch=10,shuffle=True,validation_set=(testX,testY)运行程序,准确率66%左右,比之前NB和RNN算法有提升。示例:识别垃圾邮件完整演示代码请见本书GitHub上的17-3.py。数据清洗与特征化CNN习的问题,CNN别效果还满足需求。图像通常是二维数组,文字通常都是一维数据,是否可以通过某种转换后,也使用CNN对文字进行处理呢?答案是肯定的。我们回顾一下在图像处理时,CNN是如何处理二维数据的。如图17-6所示,CNN使用二维卷积函数处理小块图像,提炼高级特征进一步分析。典型的二维卷积函数处理图片的大小为3×3、4×4等。图17-6 CNN处理图像数据的过程同样的原理,我们可以使用一维的卷积函数处理文字片段,提炼高级特征进一步分析。典型的一维卷积函数处理文字片段的大小为3、4、5等,如图17-7所示。图17-7 CNN处理文本数据的过程感谢YoonKim的经典论文ConvolutionalNeuralNetworksforSentenceClassification给我们的知识。常见的词袋模型可以很好地表现文本由哪些单词组成,但是却无法表达出单词之间的前后关系,于是人们借鉴了词袋模型的思想,使用生成的词汇表对原有句子按照单词逐个进行编码。TensorFlow默认支持了这种模型:tf.contrib.learn.preprocessing.VocabularyProcessor(max_document_length,min_frequevocabulary=None,tokenizer_fn=None)其中各个参数的含义为:·max_document_length:,文档的最大长度。如果文本的长度大于最大长度,那么它会被剪切,反之则用0填充。·min_frequency,词频的最小值,出现次数小于这个值的词则不会被收录到词表中。·vocabulary,CategoricalVocabulary对象。·tokenizer_fn,分词函数。假设有如下句子需要处理:x_text=['iloveyou','metoo']基于以上句子生成词汇表,并对'imetoo'这句话进行编码:vocab_processor=learn.preprocessing.VocabularyProcessor(max_document_length)vocab_processor.fit(x_text)printnext(vocab_processor.transform(['imetoo'])).tolist()x=np.array(list(vocab_processor.fit_transform(x_text)))printx运行结果为:[1,4,5,0][[1230][4500]]整个过程如图17-8所示。图17-8 使用词汇表模型进行编码我们使用TensorFlow自带的VocabularyProcessor对数据集的文本进行编码转换:ham,spam=load_all_files()x=ham+spamy=[0]*len(ham)+[1]*len(spam)vp=tflearn.data_utils.VocabularyProcessor(max_document_length=max_document_length,x=vp.fit_transform(x,unused_y=None)x=np.array(list(x))returnx,y使用词汇表编码后,将数据集合随机分配成训练集合和测试集合,其中测试集合比例为40%:x,y=get_features_by_tf()x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.4,random_s将训练和测试数据进行填充和转换,不到最大长度的数据填充0,由于是二分类问题,把标记数据二值化。定义输入参数的最大长度为文档的最大长度:trainX=pad_sequences(trainX,maxlen=max_document_length,value=0.)testX=pad_sequences(testX,maxlen=max_document_length,value=0.)#ConvertinglabelstobinaryvectorstrainY=to_categorical(trainY,nb_classes=2)testY=to_categorical(testY,nb_classes=2)network=input_data(shape=[None,max_document_length],name='input')训练样本定义CNN模型,其实使用3个数量为128核,长度分别为3、4、5的一维卷积函数处理数据:network=tflearn.embedding(network,input_dim=1000000,output_dim=128)branch1=conv_1d(network,128,3,padding='valid',activation='relu',regularizer=branch2=conv_1d(network,128,4,padding=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生物教师年度工作计划
- 家庭工作计划
- 垃圾分类宣传教育活动总结例文八篇
- 儿科医生的工作总结10篇
- 安全教案模板合集7篇
- 安检人员年终总结范文
- 2023-2024学年天津市经开区国际学校七年级(上)期末语文试卷
- 2024-2025学年广西南宁三中九年级(上)月考数学试卷(12月份)
- 关中地区饮食
- 六年级诗经采薇
- 古代小说戏曲专题-形考任务2-国开-参考资料
- 上海市闵行区2024-2025学年八年级(上)期末物理试卷(解析版)
- 运动是良医智慧树知到期末考试答案章节答案2024年成都师范学院
- 浙美版六年级上册美术复习资料
- 年度工作总结ppt美观模板
- 临时施工用电工程监理实施细则
- 低压铸造常见缺陷及预防
- 辐照灭菌与其他主要灭菌方式对比所存在的优点
- 订单评审作业流程
- 侧钻井工艺技术简介
- 自己编制的表格-两孔箱涵(结构、配筋、裂缝、基底应力)箱涵结构计算(恒载+活载)
评论
0/150
提交评论