前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >keras之数据预处理

keras之数据预处理

作者头像
学到老
发布2019-01-25 11:21:43
1.9K0
发布2019-01-25 11:21:43
举报
数据填充pad_sequences

from keras.preprocessing.sequence import pad_sequences

代码语言:javascript
复制
keras.preprocessing.sequence.pad_sequences(sequences, maxlen=None,dtype='int32',padding='pre',truncating='pre', value=0.)

maxlen设置最大的序列长度,长于该长度的序列将会截短,短于该长度的序列将会填充

RNN网络容易出现反向传播过程中的梯度问题。主要原因是我们通常给RNN的参数为有限的序列。

为了实现的简便,keras只能接受长度相同的序列输入。因此如果目前序列长度参差不齐,这时需要使用pad_sequences()。该函数是将序列转化为经过填充以后的一个新序列。

举一个例子,是否使用对齐函数取决于如何切割本文,对于一个文本而言,如果是选择根据‘。’来分割句子,因此需要使用该函数保证每个分割的句子能够得到同等长度,但是更加聪明的做法是考虑将文本按照每一个字来分隔,保证切割的句子都是等长的句子,不要再使用该函数。

最后,输入RNN网络之前将词汇转化为分布式表示。

案例
代码语言:javascript
复制
keras.preprocessing.sequence.pad_sequences(sequences, maxlen=None, dtype=’int32’, padding=’pre’, truncating=’pre’, value=0.) 

函数说明: 将长为nb_samples的序列(标量序列)转化为形如(nb_samples,nb_timesteps)2D numpy array。如果提供了参数maxlen,nb_timesteps=maxlen,否则其值为最长序列的长度。其他短于该长度的序列都会在后部填充0以达到该长度。长于nb_timesteps的序列将会被截断,以使其匹配目标长度。padding和截断发生的位置分别取决于padding和truncating. 参数 sequences:浮点数或整数构成的两层嵌套列表

maxlen:None或整数,为序列的最大长度。大于此长度的序列将被截短,小于此长度的序列将在后部填0.

dtype:返回的numpy array的数据类型

padding:‘pre’或‘post’,确定当需要补0时,在序列的起始还是结尾补

truncating:‘pre’或‘post’,确定当需要截断序列时,从起始还是结尾截断

value:浮点数,此值将在填充时代替默认的填充值0

返回值 返回形如(nb_samples,nb_timesteps)的2D张量

例子:

代码语言:javascript
复制
import tensorflow as tf
import numpy as np

pad_sequence = tf.contrib.keras.preprocessing.sequence.pad_sequences

a=[[1,2,3],[4,5,6,7]]
b_len=np.array([len(_) for _ in a])
bs_packed = pad_sequence(a,maxlen=4,padding='pre',truncating='pre',value = 0)

print(bs_packed)

输出:

代码语言:javascript
复制
[[0 1 2 3] 
[4 5 6 7]]
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年09月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据填充pad_sequences
  • 案例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档