tensorflow:用dynamic_rnn处理不定长序列,对序列做padding处理

1. 数据处理(padding zero)

首先,我有一个list类型的数据集,按最长将序列的长度存储,不足长度的后面padding zero。将数据集存为ndarray类型的矩阵:

import numpy as np
 
 

dataset = [[[1], [2], [3], [4]],            # list类型的数据集,有4个序列, feature_dim=1
           [[2], [4], [1]], 
           [[5], [2], [7], [3], [8]],
           [[9], [7]]] 
feature_dim = 1
num_samples = len(dataset)          # 序列的个数。输出:4
lengths = [len(s) for s in dataset] # 获取每个序列的长度。输出:[4, 3, 5, 2]
max_length = max(lengths)           # 最长序列的长度。输出:5
padding_dataset = np.zeros([num_samples, max_length, feature_dim]) # 生成一个全零array来存放padding后的数据集
for idx, seq in enumerate(dataset): # 将序列放入array中(相当于padding成一样长度)
    padding_dataset[idx, :len(seq), :] = seq
print(padding_dataset) # <type 'numpy.ndarray'>
[[[ 1.]
  [ 2.]
  [ 3.]
  [ 4.]
  [ 0.]]

 [[ 2.]
  [ 4.]
  [ 1.]
  [ 0.]
  [ 0.]]

 [[ 5.]
  [ 2.]
  [ 7.]
  [ 3.]
  [ 8.]]

 [[ 9.]
  [ 7.]
  [ 0.]
  [ 0.]
  [ 0.]]]

如果已知padding的数据,想知道去掉零以后实际这批序列的长度,参考Variable Sequence Lengths in TensorFlow的Computing the Sequence Length一节。


2. 用dynamic_rnn运行数据

outputs, last_states = tf.nn.dynamic_rnn(
    cell=cell,
    inputs=padding_dataset,
    sequence_length=lengths)


  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值