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 = 1num_samples = len(dataset) # 序列的个数。输出:4lengths = [len(s) for s in dataset] # 获取每个序列的长度。输出:[4, 3, 5, 2]max_length = max(lengths) # 最长序列的长度。输出:5padding_dataset = np.zeros([num_samples, max_length, feature_dim]) # 生成一个全零array来存放padding后的数据集for idx, seq in enumerate(dataset): # 将序列放入array中(相当于padding成一样长度)padding_dataset[idx, :len(seq), :] = seqprint(padding_dataset) # <type 'numpy.ndarray'>如果已知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)