Tensorflow:TextLineDataset()读取数据后,长度不等的padden_batch()填充处理详细说明

1.首先说明关于TextLineDataset()函数,这是从文件中读取数据用的,用于NLP领域,具体可以参考我这篇博客

https://blog.csdn.net/xinjieyuan/article/details/90698038

2.关于读取文本中句子长短不一的处理方法,可以使用固定长度截断填充(keras中的如下方法

pad_sequences(inputs_data, maxlen=None)

也可以用动态填充的方法。

TensorFlow中的
padded_batch(batch_size,
            padded_shapes,
            padding_values=None
            )

动态的方法方法非常适合处理TensorFlow中dataset格式的长短不一的数据!!!

解释:因为每个句子通常是独立的数据来训练,长短是不一样的,因此把这些句子放在一个Batch中适合,需要把短的句子补齐到batch中最长句子的长度,既可以保留句子的含义不会变化又可以充分训练每个词。

3.较难的示例(参考TensorFlow:实战Google深度学习框架第九章9.3.2)

# 没看过书的人肯定看不懂下面代码的意思,只是举个例子
padded_shapes = (
        (tf.TensorShape([None]),#源句子是长度未知的向量
         tf.TensorShape([])),#源句子长度是数字
        (tf.TensorShape([None]),# 目标句子,解码器输入,是长度未知的向量
         tf.TensorShape([None]),# 目标句子,解码器输出,是长度未知的向量
         tf.TensorShape([]))) # 目标句子长度是单个数字

# 代用padded_batch方法进行batching操作
batched_dataset = dataset.padded_batch(batch_size,padded_shapes)

dataset.padden_batch()这一步读取了batch_size个数的句子,同时每个元素的维度由padded_shape决定不会变化。

看不懂没关系,看下面这段就懂了

文档such.txt中有四个句子如下(已经全部转换为词汇ID,每个数字代表一个单词),且通过TextLineDataset()存储为dataset

12 2324 42 2
23 2321 231 1 232 2324
121 2324 55 2 32 231 231 12 1234 234 23 42
23 231

同时可以看到这四个句子长度是:

4
6
12
2

我们定义padded_shape是:

padded_shapes = (
                (tf.TensorShape([None]),#存储句子,把每个句子变成一个List,且不知道单个句子是多长故为None
                tf.TensorShape([])  #存储句子的长度, 长度是标量不需要写None
                )

我要一个batch_size是4个数据,同时把这4个数据中小于最长长度的句子进行填充

dataset = dataset.padden_batch(4,padded_shape=padded_shape)

这之后,dataset的内容会变成

[[12,2324,42,2,0,0,0,0,0,0,0,0] #填充了8个0
[23,2321,231,1,232,2324,0,0,0,0,0,0]# 填充了6个0
[121,2324,55,2,32,231,231,12,1234,234,23,42]#该batch中最大长度的句子,无需填充
[23,231,0,0,0,0,0,0,0,0,0,0,0]]#填充了10个0

是不是很有意思?dataset中每个元素都遭到了两部处理:变成了padded_shapes的格式而且还填充了0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值