自然语言处理(三)——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 原文链接 [收藏] 摘要:本 ...
随机推荐
- MapReduce源代码分析之LocatedFileStatusFetcher
LocatedFileStatusFetcher是MapReduce中一个针对给定输入路径数组,使用配置的线程数目来获取数据块位置的有用类. 它的主要作用就是利用多线程技术.每一个线程相应一个任务.每 ...
- Strans 内表-xml文件
一.内表到xml文件 <?sap.transform simple?> <tt:transform xmlns:tt="http://www.sap.com/transfo ...
- Python使用setuptools打包源文件(精简)
目录结构: F:\capt>tree ├─abc_test │ ├─__init__.py │ ├─comman_line.py ├─setup.py #__init.py__ def he ...
- 代码空间项目 -- alert窗口自定义
function z_alert(msg){ //创建提示框盒子,设置盒子的css样式 var msgBox=document.createElement("div") ...
- unity导出android项目
1. 2 . 3 选择Google Android Project(若不选则直接导出Apk) Export,Android项目即可导出成功.
- java JDBM2 的几个简单实例
JDBM2 提供了 HashMap 和 TreeMap 的磁盘存储功能,简单易用,用于持久化数据.特别适合用于嵌入到其他应用程序中. 磁盘数据库 HelloWorld.java import java ...
- codeforces776E
传送门 这题看着很唬人,但实际上是道水题... f[n]通过打表或证明,可以发现就是欧拉函数,g[n]恒等于n,所以题目的意思就是让你求n的k次欧拉函数. 可以发现实际上k次欧拉函数,n的数值减小得很 ...
- Python视频教程
Python这门语言相对学起来是简单点的,尤其对于测试人员来说,如果达到可以写自动化测试脚本的程度的话,学些基础就是可以的.那么在网上也是有很多资源的,各种培训的视频.作为一名过来人(哈哈),或者说是 ...
- Opencv— — Circle Filter
// define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...
- 【转载】rageagainstthecage.c源码以及注释
如下: //头文件包含 #include <stdio.h> #include <sys/types.h> #include <sys/time.h> #inclu ...