DL4J中文文档/DataVec/读取器

读取器

读取器从存储中的数据集迭代记录,并将数据加载到数据向量中。除了数据集中的单个条目之外,阅读器的用处包括:如果想要在语料库上训练文本生成器,或是以编程方式将两个条目组合在一起形成新的记录的时候该怎么办?读取器实现对于复杂的文件类型或分布式存储机制是有用的。

读取器返回记录记录中每一列的Writable类。这些类用于将每个记录转换为张量/NDArray 格式。

使用

每个读取器实现都扩展了BaseRecordReader并提供了一个简单的API用于选取数据集中的下一条记录,行为类似于迭代器。

包括以下有用的方法:

  • next: 返回一个批量的 Writable
  • nextRecord: 返回单条记录,RecordMetaData 是可选的。
  • reset: 重置基础迭代器。
  • hasNext: 迭代器方法以确定是否有其他记录可用 。

监听器

你可以将自定义的RecordListener挂钩到记录读取器进行调试或可视化目的。在初始化类之后,立即将你的自定义侦听器传递给addListener基类方法。

读取器的类型

initialize
public void initialize(InputSplit split) throws IOException, InterruptedException 

记录读取器用于每个管道。独立的记录是由两个集合连接而成的。


ConcatenatingRecordReader 连接记录读取器

[源码]

把多个读取器合并为一个读取器。记录按顺序读取-因此如果第一个取读器有100条记录,并且第二个读取器有200条记录,那么连接记录读取器将有300条记录。


FileRecordReader 文件记录读取器

[源码]

文件读取/写入

getCurrentLabel
public int getCurrentLabel() 

返回当前标签。标签列表中当前文件的父目录的索引。

  • 返回当前文件父目录的索引

LineRecordReader 行记录读取器

[源码]

一行一行读取文件


CollectionRecordReader 集合记录读取器

[源码]

集合记录读取器,主要用于测试。


CollectionSequenceRecordReader 集合序列读取器

[源码]

用于序列的集合记录读取器,主要用于测试。

initialize
public void initialize(InputSplit split) throws IOException, InterruptedException 

  • 参数records是序列集合。例如List<List<List>> 这里内部两个列表都是序列,并且外部的列表/集合是一个序列。

ListStringRecordReader 集合字符记录读取器

[源码]

迭代一个字符列表返回一条记录

initialize
public void initialize(InputSplit split) throws IOException, InterruptedException 

在初始化的时候调用一次。

  • 参数 split是定义要读取的记录范围的拆分
  • 抛出 IOException
  • 抛出 InterruptedException
initialize
public void initialize(Configuration conf, InputSplit split) throws IOException, InterruptedException 

在初始化的时候调用一次

  • 参数 conf是一个用于初始化的配置
  • 参数 split是定义要读取的记录范围的拆分
  • 抛出 IOException
  • 抛出 InterruptedException
hasNext
public boolean hasNext() 

判断是否有下一条记录

  • 返回布尔值
reset
public void reset() 

重置

  • return
nextRecord
public Record nextRecord() 

从给定的DataInputStream加载记录,与{-link#next()}不同,RecordReader的内部状态没有修改。此方法的实现不应关闭DataInputStream。

  • 参数 uri
  • 参数 dataInputStream
  • 抛出 IOException ,如果从输入流中读取的时候出错。
close
public void close() throws IOException 

关闭此流并释放与之相关联的任何系统资源。如果流已经关闭,那么调用此方法没有效果。如{-Link AutoCutabySyCuffe()}所指出的,关闭可能失败的情况需要仔细注意。强烈建议在抛出{-code IOException}之前,放弃底层资源,并在内部将{-code Closeable}标记为关闭。

  • 抛出 IOException, 如果 I/O 错误发生。
setConf
public void setConf(Configuration conf) 

设置此对象要使用的配置。

  • 参数 conf
getConf
public Configuration getConf() 

返回此对象所使用的配置。


CSVRecordReader CSV记录读取器

[源码]

简单的CSV读取器。

initialize
public void initialize(Configuration conf, InputSplit split) throws IOException, InterruptedException 

跳过前n行

  • 参数 skipNumLines 需要跳过的行数

CSVRegexRecordReader CSV正则记录读取器

[源码]

一个CSV正则记录读取器,它可以使用正则将每个列拆分为其他列。


CSVSequenceRecordReader CSV序列记录读取器

[源码]

CSV序列记录读取器此读取器旨在读取CSV格式的数据序列,其中每个序列在其自己的文件中定义(并且有多个文件),文件中的每一行表示一个时间步骤。


CSVVariableSlidingWindowRecordReader CSV可变滑动窗口记录读取器

[源码]

在整个CSV上可变大小的滑动窗口。在实践中,滑动窗口大小开始于1,然后线性增加到最大线性序列,然后线性下降回到1。

initialize
public void initialize(Configuration conf, InputSplit split) throws IOException, InterruptedException 

带有每个序列默认行数为10的无参构造器


LibSvmRecordReader LibSvm记录读取器

[源码]

libsvm格式的记录读取器,它与SVMLight格式密切相关。与SCIKIT学习类似,我们为两种格式使用同一个读取器,因此该类是SvMLeadReadReader的子类。

关于格式的进一步细节可以在如下网站中找到


MatlabRecordReader Matlab记录读取器

[源码]

Matlab记录读取器


SVMLightRecordReader SVMLight记录读取器

[源码]

用于SVMLight格式的记录读取器,它通常可以描述为如下

LABEL INDEX:VALUE INDEX:VALUE …

SVMLight格式非常适合于稀疏数据(如词袋),因为它忽略了所有值为零的特征。

我们支持一个“扩展”版本,允许多个目标(或标签)用逗号分隔,如下:

LABEL1,LABEL2,… INDEX:VALUE INDEX:VALUE …

这可以用于表示多任务问题或具有稀疏二进制标签的多任务问题(通过“MULTILABEL”配置选项进行控制)。

与SCIKIT学习一样,我们支持基于零的和基于一个的索引。

关于格式的进一步细节可以在如下网站中找到

initialize
public void initialize(Configuration conf, InputSplit split) throws IOException, InterruptedException 

在尝试读取记录之前调用。

  • 参数 conf 是数据向量配置
  • 参数 split是文件分割器
  • 抛出 IOException
  • 抛出 InterruptedException
setConf
public void setConf(Configuration conf) 

Set configuration. 设置配置

  • 参数 conf 是数据向量配置
  • 抛出 IOException
  • 抛出 InterruptedException
hasNext
public boolean hasNext() 

帮助检测被注释的行的帮助函数。可以提前读取并缓存一行。

  • return
nextRecord
public Record nextRecord() 

以Writables的列表返回下一个记录。

  • return

RegexLineRecordReader 正则行记录读取器

[源码]

读取一整个文件,每次一行,并使用正则分割字段。例如:输入数据的格试为“2016-01-01 23:59:59.001 1 DEBUG First entry message!”

使用正则字符 “(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3}) (\d+) ([A-Z]+) (.)”将被分割为4个文本writables: [“2016-01-01 23:59:59.001”, “1”, “DEBUG”, “First entry message!”]

RegexSequenceRecordReader 正则序列记录读取器

[源码]

读取一整个序列文件,每次一行,并使用正则分割字段。例如:输入数据的格试为“2016-01-01 23:59:59.001 1 DEBUG First entry message!”

使用正则字符 “(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3}) (\d+) ([A-Z]+) (.)”将被分割为4个文本writables: [“2016-01-01 23:59:59.001”, “1”, “DEBUG”, “First entry message!”]

不匹配正则的行会倒致一个异常(FailOnInvalid),可以被悄悄跳过(SkipInvalid),或跳过无效但记录一个警告(SkipInvalidWithWarning)


TransformProcessRecordReader 转换过程记录读取器

[源码]

在返回之前应用一个转换过程。

initialize
public void initialize(InputSplit split) throws IOException, InterruptedException 

在初始化的时候调用一次

  • 参数 split 分割器,它定义记录被读取的范围
  • 抛出 IOException
  • 抛出 InterruptedException
initialize
public void initialize(Configuration conf, InputSplit split) throws IOException, InterruptedException 

在初始化的时候调用一次

  • 参数 conf初始化需要的一个配置
  • 参数 split 分割器,它定义记录被读取的范围
  • 抛出 IOException
  • 抛出 InterruptedException
hasNext
public boolean hasNext() 

得到下一行

  • return
reset
public void reset() 

重置

  • return
nextRecord
public Record nextRecord() 

从给定的DataInputStream加载记录,与{-link#next()}不同,RecordReader的内部状态没有修改。此方法的实现不应关闭DataInputStream。

  • 参数 uri
  • 参数 dataInputStream
  • 如果从输入流中读取的时候出错则抛出 IOException 。
loadFromMetaData
public Record loadFromMetaData(RecordMetaData recordMetaData) throws IOException 

从一个RecordMetaData实例中加载单个记录。注意:对于不可分割的数据(即需要扫描/分割的文本数据),通过使用{- link #loadFromMetaData(List)}一次加载多行是更有效的。

  • 参数 recordMetaData 是 我们想要加载记录的Metadata
  • 为给定的RecordMetaData实例返回单个记录
  • 如果在加载过程中发生 I/O错误则抛出 IOException
loadFromMetaData 原文档中漏了这个方法说明
public List<Record> loadFromMetaData(List<RecordMetaData> recordMetaDatas) throws IOException

从给定RecordMetaData实例列表中加载多条记录

  • 参数 recordMetaData 是 我们想要加载记录的Metadata
  • 为给定的RecordMetaData实例返回多条记录
  • 如果在加载过程中发生 I/O错误则抛出 IOException
setListeners
public void setListeners(RecordListener... listeners) 
setListeners
public void setListeners(Collection<RecordListener> listeners) 

为这个记录读取器设置记录监听器

  • 参数 listeners
close
public void close() throws IOException 

关闭此流并释放与之相关联的任何系统资源。如果流已经关闭,那么调用此方法没有效果。如{-Link AutoCutabySyCuffe()}所指出的,关闭可能失败的情况需要仔细注意。强烈建议在抛出{-code IOException}之前,放弃底层资源,并在内部将{-code Closeable}标记为关闭。

  • 抛出 IOException, 如果 I/O 错误发生。
setConf
public void setConf(Configuration conf) 

设置这个对象使用的配置

  • 参数 conf
getConf
public Configuration getConf() 

返回这个对象使用的配置


TransformProcessSequenceRecordReader 转换过程序列记录读取器

[源码]

在返回之前被转换

setConf
public void setConf(Configuration conf) 

设置这个对象使用的配置

  • 参数 conf
getConf
public Configuration getConf() 

返回这个对象使用的配置。

batchesSupported
public boolean batchesSupported() 

返回是否支持批量

  • 返回一个布尔值
nextSequence
public SequenceRecord nextSequence() 

从给定的DataInputStream加载序列记录,与{-link#next()}不同,RecordReader的内部状态没有修改。此方法的实现不应关闭DataInputStream。

  • 参数 uri
  • 参数 dataInputStream
  • 如果从输入流中读取的时候出错则抛出 IOException 。
loadSequenceFromMetaData
public SequenceRecord loadSequenceFromMetaData(RecordMetaData recordMetaData) throws IOException 

从一个RecordMetaData实例中加载单个记录。注意:对于不可分割的数据(即需要扫描/分割的文本数据),通过使用{- link #loadSequenceFromMetaData(List)}一次加载多行是更有效的。

  • 参数 recordMetaData 是 我们想要加载序列记录的Metadata
  • 为给定的RecordMetaData实例返回单个记录
  • 如果在加载过程中发生 I/O错误则抛出 IOException
loadSequenceFromMetaData 原文档中漏了这个方法说明
public List<SequenceRecord> loadSequenceFromMetaData(List<RecordMetaData> recordMetaDatas) throws IOException

从给定RecordMetaData实例列表中加载多条记录

  • 参数 recordMetaData 是 我们想要加载记录的Metadata
  • 为给定的RecordMetaData实例返回多条记录
  • 如果在加载过程中发生 I/O错误则抛出 IOException
initialize
public void initialize(InputSplit split) throws IOException, InterruptedException 

initialize
public void initialize(Configuration conf, InputSplit split) throws IOException, InterruptedException  

在初始化的时候调用一次

  • 参数 conf是一个用于初始化的配置
  • 参数 split是定义要读取的记录范围的拆分
  • 抛出 IOException
  • 抛出 InterruptedException

hasNext

public boolean hasNext() 

得到下一条记录

  • return
reset
public void reset() 

重置

  • return
nextRecord
public Record nextRecord() 

从给定的DataInputStream加载记录,与{-link#next()}不同,RecordReader的内部状态没有修改。此方法的实现不应关闭DataInputStream。

  • 参数 uri
  • 参数 dataInputStream
  • 如果从输入流中读取的时候出错则抛出 IOException 。
loadFromMetaData
public Record loadFromMetaData(RecordMetaData recordMetaData) throws IOException 

从一个RecordMetaData实例中加载单个记录。注意:对于不可分割的数据(即需要扫描/分割的文本数据),通过使用{- link #loadFromMetaData(List)}一次加载多行是更有效的。

  • 参数 recordMetaData 是 我们想要加载记录的Metadata
  • 为给定的RecordMetaData实例返回单个记录
  • 如果在加载过程中发生 I/O错误则抛出 IOException
loadFromMetaData 此方法说明在原文档中没有
public List<Record> loadFromMetaData(List<RecordMetaData> recordMetaDatas) throws IOException

从一个RecordMetaData实例中加载单个记录。注意:对于不可分割的数据(即需要扫描/分割的文本数据),通过使用{- link #loadFromMetaData(List)}一次加载多行是更有效的。

  • 参数 recordMetaData 是 我们想要加载记录的Metadata
  • 为给定的RecordMetaData实例返回多条记录
  • 如果在加载过程中发生 I/O错误则抛出 IOException
setListeners
public void setListeners(RecordListener... listeners) 

setListeners
public void setListeners(Collection<RecordListener> listeners) 

为这个记录读取器设置记录监听器。

  • 参数 listeners
close
public void close() throws IOException 

关闭此流并释放与之相关联的任何系统资源。如果流已经关闭,那么调用此方法没有效果。如{-Link AutoCutabySyCuffe()}所指出的,关闭可能失败的情况需要仔细注意。强烈建议在抛出{-code IOException}之前,放弃底层资源,并在内部将{-code Closeable}标记为关闭。

  • 抛出 IOException, 如果 I/O 错误发生。

NativeAudioRecordReader 本地音频记录读取器

[源码]

使用FFmpeg的本地音频文件加载器。


WavFileRecordReader 声音文件记录读取器

[源码]

声音文件加载器


ImageRecordReader 图片记录读取器

[源码]

图像记录读取器。读取本地文件系统并解析给定高度和宽度的图像。所有图像被重新缩放并转换为给定的高度、宽度和通道数量。

如果指定,还附加标签(基于目录结构的k个编码之一,其中根目录的每个子目录是一个索引标签)


VideoRecordReader 视频记录读取器

[源码]

视频只是一个移动的图片窗口。应该这样处理。这会遍历根文件夹并返回一帧。

initialize
public void initialize(InputSplit split) throws IOException, InterruptedException 

用给定的高和宽加载记录读取器

  • 参数 height 是加载的高度
  • 参数 width 是加载的宽度

TfidfRecordReader 词频-逆向文件频率记录读取器

[源码]

词频-逆向文件频率记录读取器(封装一个TFIDF矢量化器,用于传送标签并遵守记录读取器接口)

有任何问题请联系微信

image

如果您觉得我的文章给了您帮助,请为我买一杯饮料吧!以下是我的支付宝,意思一下我将非常感激!

image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • (上期独胆2中.独跨6中.6码中组) 胆码246.双胆46.独胆4. 定位:百位3469.十位1248.个位056...
    萱萱_eed9阅读 82评论 0 0
  • 今天是什么日子 规定起床:8时 实际起床:8时45分 规定就寝:9时30分 实际就寝: 10时 天气:晴 心情:※...
    改变_阅读 109评论 0 0
  • 今天已经是21月21日,2017已经走进尾声,新的一年将要开始。对今年做下复盘。 一,与往年的对比 刚听到“七年就...
    践行而生阅读 145评论 1 0
  • 1。 富人爱创业;穷人爱打工。 2。 富人有投资意识;穷人只有存钱意识。 3。 富人看趋势做事;穷人看结果做事。 ...
    onnlfcthqb阅读 201评论 0 0
  • “懂比爱更珍贵,爱你的人很多,懂你的人太少”,这句话曾经说到无数人心坎里去了,隐喻的体现了人际交往中沟通的价值。 ...
    遇见热带鱼阅读 799评论 3 13