简化TensorFlow工作流。

laminarflow的Python项目详细描述


层流

简化TensorFlow工作流。

安装

pip install laminarflow

用法

tfrecord数据集

层流有两个类用于写入和读取tfrecord数据集,DatasetWriterDatasetReader

使用DatasetWriter创建数据集时,可以传入原始python或numpy数据,它将自动转换为tensorflow示例或sequenceexamples并写入tfrecord文件。

然后,当从tfrecord文件中读取时,DatasetReader负责创建输入管道,该管道将解析存储的示例或序列示例,根据需要准备它们(批处理、填充、洗牌等),然后将它们传递给tensorflow估计器,实现tensorflow的Input Pipline Performance Guide中概述的推荐最佳实践。

为了演示,我们将创建一些数据集。

importlaminarflowaslftrain_writer=lf.DatasetWriter('data/train.tfrecord')test_writer=lf.DatasetWriter('data/test.tfrecord')train_writer.write({'input':[3.1,4.1,5.9],'label':2})train_writer.write({'input':[2.7,1.8,2.8],'label':1})test_writer.write({'input':[0.1,1.2,3.5],'label':8})train_writer.close()test_writer.close()

我们创建一个DatasetWriter,然后对要添加到数据集的每个tensorflow示例或sequenceexample调用其上的write方法。当我们调用write方法时,我们传入一个字典,其中键是特征名,值是特征值。这些值可以是numpy数组,也可以是可以转换为numpy数组的任何值,例如python int、float或int或float列表。值的形状可以是多维的,但示例之间必须相同。下面讨论创建支持可变长度数据的sequenceexamples。

当我们用writer编写完数据后,我们会在上面调用close()方法。

数据将写入tfrecord文件,功能的形状和数据类型将存储在单独的元数据json文件中,该文件与tfrecord文件具有相同的文件名,但扩展名将更改为“.json”。

data/
├── test.json
├── test.tfrecord
├── train.json
└── train.tfrecord

然后我们可以在我们的数据集上训练一个模型。

train_dataset=lf.DatasetReader('data/train.tfrecord')test_dataset=lf.DatasetReader('data/test.tfrecord')estimator=tf.estimator.Estimator(model_fn=model_fn,model_dir=MODEL_DIR,params=PARAMS)train_spec=tf.estimator.TrainSpec(input_fn=train_dataset.input_fn,max_steps=1000)eval_spec=tf.estimator.EvalSpec(input_fn=test_dataset.input_fn)tf.estimator.train_and_evaluate(estimator=estimator,train_spec=train_spec,eval_spec=eval_spec)

调用lf.DatasetReader('data/train.tfrecord')将使用tfrecord文件及其相应的元数据json文件创建一个数据集。元数据json文件data/train.json的路径是从tfrecord路径推断出来的。

创建的数据集有一个input_fn方法,您可以将其作为输入函数传递给tensorflow估计器。input_fn方法自动为数据集创建输入管道。

有关创建数据集、训练模型和使用该模型进行预测的更完整示例,请查看:xor.py

使用with语句

也可以使用with语句创建DatasetWriter,在这种情况下,不需要调用close()方法。

withlf.DatasetWriter('data/train.tfrecord')astrain_writer:train_writer.write({'input':[1.4,1.4,2.1],'label':3})

序列示例

write方法的默认行为是编写tensorflow示例。要编写SequenceExample,请使用context_featuressequence_features参数传入特性,而不是将特性传递给write方法的第一个参数。

train_writer.write(context_features={'category':7},sequence_features={'inputs':[[1.4,0.0],[1.4,0.0],[1.4,0.0]],'labels':[3,5,3]})train_writer.write(context_features={'category':5},sequence_features={'inputs':[[1.4,0.0],[1.4,0.0]],'labels':[3,5]})

传入context_features是可选的,但是如果使用,它们的值在sequenceexamples之间必须具有相同的形状,类似于example特性。

sequence_features值的形状必须具有至少1的秩。对于SequenceExample中的所有sequence_features,第一个维度的长度必须相同,但SequenceExample之间的长度可以不同。其余维度的长度可以在不同的特征之间变化,但在SequenceExamples之间必须相同。

创建一批SequenceExamples时,任何短于最长序列的序列都将填充零。

从数据集读取时,每个序列的长度将作为输入管道中的一个步骤从数据中提取。序列的长度将作为传递到模型features['lengths']的特征值之一提供。它将是一个int的批大小长度列表,即在可能用零填充该序列之前批中每个序列的长度。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
静态函数中局部变量的java垃圾收集   java向ImageView添加投掷手势   java spring引导未根据配置文件读取正确的属性   主屏幕小部件中的java自定义布局   java JSP:具有相对路径的FileReader引发FileNotFoundException   java Hibernate在集合上循环时删除会话   java无法建立到jdbc:oracle:thin:@localhost:1521:XE的连接   java我可以使用Hibernate对特定的整数大小进行验证吗?   批处理文件如何注意Java中不同语言环境中的文件名   用于IntelliJ中声纳、PMD、Findbugs和Checkstyle的Java 8   在PIG程序中找不到java类分布式文件系统   Java游戏引擎中动态ZOrdering的绘制   java处理线程工作者的多个错误   带有MariaDB驱动程序的java MySQL服务器产生日期排序错误   java终止线程的正确方法   java Android在手机睡眠时发送udp   java如何将文档添加到事务内部的Firebase集合?