| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> Keras快速入门 -> 正文阅读 |
|
[Python知识库]Keras快速入门 |
Keras顺势诞生都知道有很多开源的深度学习工具包,比如:CNTK、TensorFlow、Theano、Caffe、mxNet和Torch。这些工具包都提供了非常灵活而强大的建模能力,极大地降低了使用深度学习技术的门槛。但是他们各有所长、接口不同,而且对于很多初学者,这些工具包过于灵活,难以掌握。Keras就此诞生,Keras可以认为是一个简单、在更高层上进行抽象,兼顾兼容性和灵活性的深度学习框架,也可以理解为一个以TensorFlow、CNTK为后台的深度学习建模环境。他底层可以在CNTK、TensorFlow之间自由切换。 Keras的优点高度模块化,Keras中将任意网络模型描述成一个图模型或者序列模型,其中的部件被划分为以下模块:神经网络层、损失函数、激活函数、初始化方法、正则化方法、优化引擎。这些模块都可以以任意且合理的方式放入模型中。简单来说,Keras已经将基本的代码封装成了API,用户只需要根据自己的模型使用这些API进行建模就好了。这样大大的提高的编写效率。 基于Python的,用户可以使用Python自定义的自己的网络模型,可以在CPU和GPU之间无缝切换,适用于不同的应用环境。 Keras的数据处理Keras在数据处理方面,提供了几个易于使用的工具,包括针对序列模型的数据预处理、针对文字输入的数据处理,以及针对图片输入的数据处理。所有的函数都在Keras.preprocessing这个库里面,分别有text、sequence和image三个子库。 1. 文字类型预处理一般,文字在建模时,要把原始文字拆解成单字、单词或者词组,然后将这些拆分后的要素进行索引、标记化供机器学习算法使用。这种预处理叫作标注(Tokenize)。步骤大致为
使用Keras的话,文字预处理函数都在Keras.preprocessing.text这个子库里。这里需Keras是为英文文字设计的,如果是处理中文,因为中英文的差异,建议使用结巴分词里提供的切分函数cut来进行文字拆分。 使用Keras预处理将变为: 第一步拆分需要用到text里的text_to_word_sequence函数,函数就是根据预定义的分隔符进行切割,将返回一个单词列表,过程中会先处理一下,比如将过滤表中的字符过滤掉,或者将字符都变为小写字母等。代码如下:
拆分结果: 当然你也可以加上限制条件,过滤词,大小写等等,但是对于中文来说就有问题了。代码如下:
结果: ?中文中这个函数是以过滤符号为分隔符,而不是引号。对于处理中文,需要使用特定的工具,jieba是其中一种,需要自己安装(pip install jieba)。其使用了如下算法来进行中文分词。
对于中文分词,结巴分词提供了jieba.cut和jieba.cut_for_search函数,其中cut是最常用的,cut_for_search是为搜索引擎构造索引所采用的比精确分词模式颗粒度略细的分词方法,返回一个可迭代的生成器(Generator)对象,可以使用for循环来获取分割后的单词。它们各自对应一个返回列表的函数,分别是lcut和lcut_for_search,其用法一样,只是返回数据类型不同。 cut/lcut接受三个参数,分别是需要分割的Unicode字符串、分词是否采用细颗粒度模式和是否使用HMM模型。代码演示如下:
结果:
第二步建立索引:建立索引就是将拆分出来的每一个单字或者单词进行排序之后编号。可以使用如下代码进行建立索引。
当然也可以使用One Hot编码法,即对于K个不同的单字或者单词,依次设定一个1到K之间的数值来索引这K个单字或者单词构成的词汇表。可以直接使用one_hot函数。one_hot()函数,有俩参数,一个是需要加索引的字符串列表,一个是最大索引值。one_hot(str,n) 第三步序列补齐:因为需要放入多为矩阵中,需要进行补齐。因为将一段话拆分成单一的词以后,丢失了重要的上下文信息,因此将上下文的一组词放在一起建模能保持原来的上下文信息,从而提高建模的质量。大致分为两种情况。 第一种情况是自然的文本序列,比如微博上的一段话,都是一个自然的单字或者单词序列,而待建模的数据是由很多微博组成的,或者对一组文章进行建模,每篇文章中的每一句话构成一个文本序列。这个时候每句话的长度不一,需要进行补齐为统一长度。 第二种情况是将一个由K个(K较大)具备一定顺序的单词串拆分成小块的连续子串,每个子串只有M个(M<K)单词。这种情况一般是一大段文字按照固定长度移动一个窗口,将窗口内的单词索引载入多维矩阵的每一行,因此一句话可能会对应于矩阵的多行数据,形成时间步(timestep)。 当然对于补齐有pad_sequences函数,默认用0补齐,也可以用value选项修改。可以使用maxlen设定序列长度,不使用的就以最长的序列为标准。 第四步转为矩阵:因为所有的建模都只能使用多维矩阵,Keras提供了两种方法。 第一种方法是使用pad_sequences函数。这个函数可以生成一个宽度为指定句子长度、高度为句子个数的矩阵。假设text是一个包含每一句话的列表,而每一句话已经通过text_to_word_sequence或者jieba.cut函数拆分为单字或者单词的列表,使用这个函数就可以变为相应的矩阵。代码如下:
第二种方法是使用标注类进行。下一部分介绍. 第四步批量处理文本文件:批量处理文本时,Keras提供了一个标注类(Tokenizer class)来进行文本处理。当批量处理文本文件时,一般所有文本会被读入一个大的列表中,每一个元素是单个文件的文本或者一大段文本。上述方法都是针对单一字符串设计的,而标注类中的方法是针对一个文本列表设计的。这个类对应的操作数据有两种类型,分别是文本列表和单词串列表,对应的方法包含texts或者sequences字样,对应于文本列表的方法都是将文本拆分成单词串以后执行相应的操作。初始化标注对象。
标注类中有两个方法是用来将文本序列列表转换为待建模矩阵的,text_to_matrix和sequence_to_matrix。其中text_to_matrix是对从文本序列列表中抽取的每一个序列元素应用sequence_to_matrix转换为矩阵。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 10:12:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |