自然语言处理(三)——PTB数据的batching方法
参考书
《TensorFlow:实战Google深度学习框架》(第2版)
从文本文件中读取数据,并按照下面介绍的方案将数据整理成batch。
方法是:先将整个文档切分成若干连续段落,再让batch中的每一个位置负责其中一段。
- #!/usr/bin/env python
- # -*- coding: UTF-8 -*-
- # coding=utf-8
- """
- @author: Li Tian
- @contact: 694317828@qq.com
- @software: pycharm
- @file: word_deal3.py
- @time: 2019/2/23 16:36
- @desc: 从文本文件中读取数据,并按照下面介绍的方案将数据整理成batch。
- 方法是:先将整个文档切分成若干连续段落,再让batch中的每一个位置负责其中一段。
- """
- import numpy as np
- import tensorflow as tf
- # 使用单词编号表示的训练数据
- TRAIN_DATA = './ptb.train'
- TRAIN_BATCH_SIZE = 20
- TRAIN_NUM_STEP = 35
- # 从文件中读取数据,并返回包含单词编号的数组
- def read_data(file_path):
- with open(file_path, "r") as fin:
- # 将整个文档读进一个长字符串
- id_string = ' '.join([line.strip() for line in fin.readlines()])
- # 将读取的单词编号转为整数
- id_list = [int(w) for w in id_string.split()]
- return id_list
- def make_batches(id_list, batch_size, num_step):
- # batch_size: 一个batch中样本的数量
- # num_batches:batch的个数
- # num_step: 一个样本的序列长度
- # 计算总的batch数量。每个batch包含的单词数量是batch_size * num_step
- num_batches = (len(id_list) - 1) // (batch_size * num_step)
- # 将数据整理成一个维度为[batch_size, num_batches*num_step]的二维数组
- data = np.array(id_list[: num_batches * batch_size * num_step])
- data = np.reshape(data, [batch_size, num_batches * num_step])
- # 沿着第二个维度将数据切分成num_batches个batch,存入一个数组。
- data_batches = np.split(data, num_batches, axis=1)
- # 重复上述操作,但是每个位置向右移动一位,这里得到的是RNN每一步输出所需要预测的下一个单词
- label = np.array(id_list[1: num_batches * batch_size * num_step + 1])
- label = np.reshape(label, [batch_size, num_batches * num_step])
- label_batches = np.split(label, num_batches, axis=1)
- # 返回一个长度为num_batches的数组,其中每一项包括一个data矩阵和一个label矩阵
- print(len(id_list))
- print(num_batches * batch_size * num_step)
- return list(zip(data_batches, label_batches))
- def main():
- train_batches = make_batches(read_data(TRAIN_DATA), TRAIN_BATCH_SIZE, TRAIN_NUM_STEP)
- # 在这里插入模型训练的代码。训练代码将在后面提到。
- for i in train_batches:
- print(i)
- if __name__ == '__main__':
- main()
运行结果:
自然语言处理(三)——PTB数据的batching方法的更多相关文章
- JSON三种数据解析方法(转)
原 JSON三种数据解析方法 2018年01月15日 13:05:01 zhoujiang2012 阅读数:7896 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...
- 答:SQLServer DBA 三十问之一: char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储 过程和使用T-SQL查询数据有啥不一样;
http://www.cnblogs.com/fygh/archive/2011/10/18/2216166.html 1. char.varchar.nvarchar之间的区别(包括用途和空间占用) ...
- 《驾驭Core Data》 第三章 数据建模
本文由海水的味道编译整理,请勿转载,请勿用于商业用途. 当前版本号:0.1.2 第三章数据建模 Core Data栈配置好之后,接下来的工作就是设计对象图,在Core Data框架中,对象图被表 ...
- 用 Python 排序数据的多种方法
用 Python 排序数据的多种方法 目录 [Python HOWTOs系列]排序 Python 列表有内置就地排序的方法 list.sort(),此外还有一个内置的 sorted() 函数将一个可迭 ...
- Excel应该这么玩——5、三种数据:Excel也是系统
Excel最常用的功能就是记录数据,把数据按照行列记录下来.这部分数据是源数据,是业务活动中最原始的流水账,作为后续操作的依据.为了从源数据中得出一定的结论,需要对源数据进行分析得出报表数据. ...
- .net之工作流工程展示及代码分享(三)数据存储引擎
数据存储引擎是本项目里比较有特色的模块. 特色一,使用接口来对应不同的数据库.数据库可以是Oracle.Sqlserver.MogoDB.甚至是XML文件.采用接口进行对应: public inter ...
- JMeter中返回Json数据的处理方法
Json 作为一种数据交换格式在网络开发,特别是 Ajax 与 Restful 架构中应用的越来越广泛.而 Apache 的 JMeter 也是较受欢迎的压力测试工具之一,但是它本身没有提供对于 Js ...
- ASP.NET页面间数据传递的方法<转>
ASP.NET页面间数据传递的方法 作者: 灰色的天空2 来源: 博客园 发布时间: 2010-10-28 11:06 阅读: 822 次 推荐: 0 原文链接 [收藏] 摘要:本 ...
随机推荐
- cpio
1 压缩 -o,生成cpio格式的归档文件.从标准输入获取文件名列表. 2 解压 -i,对cpio格式的归档文件进行解压,生成单个的文件. 3 --null 从标准输入获取的文件名列表为"\ ...
- lazy evaluation and deferring a computation await promise async
Promise - JavaScript | MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_ ...
- Linux就该这么学--命令集合5(用户与组管理命令)
1.useradd命令用于创建新用户:(useradd [选项] 用户名) 附录: -d 指定用户的家目录 -D 展示默认值 -e 账号有效截止日期,格式:YYY-MM-DD -g 指定一个初始用户组 ...
- javascript fetch 跨域请求时 session失效问题
javascript 使用fetch进行跨域请求时默认是不带cookie的,所以会造成 session失效. fetch(url, { method: 'POST', credentials: 'in ...
- Shell之内容匹配与格式输出
对于大文本或者有些特定格式的文本,有时我们要查找特定内容或定位指定的区域,这样就需要内容匹配. 关于内容匹配,我们常使用的有几个命令: grep,支持正则,查找包含有匹配项的行. cut,提取指定的列 ...
- Promise 源码分析
前言 then/promise项目是基于Promises/A+标准实现的Promise库,从这个项目当中,我们来看Promise的原理是什么,它是如何做到的,从而更加熟悉Promise 分析 从ind ...
- vue axios拦截器介绍
关于axios的拦截器是一个作用非常大,非常好用的东西.分为请求拦截器和响应拦截器两种.我一般把拦截器写在main.js里. 1. 请求拦截器 请求拦截器的作用是在请求发送前进行一些操作,例如在每个请 ...
- 关于Zookeeper
Zookeeper是分布式协调工具 应用场景 命名服务(注册中心) Dubbo注册中心 分布式配置中心(SpringCloud config)动态管理配置文件信息 消息中间件 事件通知(类似发布订阅) ...
- valid No such filter: 'drawtext'"
libfreetype is missing. You'll have to rebuild FFmpeg with this library or disable overlays. --enabl ...
- SSD Network Architecture--keras version
这里的网络架构和论文中插图中的网络架构是相一致的.对了,忘了说了,这里使用的keras版本是1.2.2,等源码读完之后,我自己改一个2.0.6版本上传到github上面.可别直接粘贴复制,里面有些中文 ...