Tensor Flow如何保存数据结果?

本文的数据集是存放在两个文件夹:1和2,其中每个文件夹包含200张彩色图像。每张图像的大小为(32x32x3),均为.png。

关于TF2.0中TFrecord的一些基础内容请参考:

参考以上教程,我们设计输入和输出都为图像的端到端卷积网络。步骤如下:

  1. 用Keras写一个简单网络并运行。

首先,把两个文件夹(1和2)的数据准备好,我们假设文件夹1中的数据为train_image,文件夹2中的数据为train_label,要保存的TFrecord文件名为train.tfrecords。

首先,获取两个文件夹中所有图像的路径列表

所有写入操作在with block中进行,在写入时主要用到该类的write方法。

其中zip函数试将两个列表中的元素封装到一个元组中,最后返回包含所有元组的列表,参考:

read函数则是从一个打开的文件中读取字符串(尽可能的多读)。引用官方的说法:

read函数的使用方法

由此可以看出,此处image和label接收的是一个bytestring类型的返回值。

在开始的时候我们给出了一个TFrecord的教程地址,看过之后可以知道TFrecord文件中包含的都是examples,每个example包含一个feature字典。tf.train.Example的包含一个属性,引用官网的表述:

该类为tf.train.Features参数,是一个协议类,其属性为一个字典

也就是说将我们数据组织成一个字典后,传入该类最后通过出入tf.train.Example类我们就得到了一个example,最后再通过write函数将该example写入TFrecord文件即可。现在我们需要知道的是如何将我们的数据组织称字典格式,这里就要用到另一个类:tf.train.Feature。

该类也是一个消息协议,有三个属性:

我们可以看到每个属性都是一个列表,每个列表代表不一样的数据类型。根据上文我们知道此次我们使用的bytesString类型的数据。所以我们选择第一种属性,另外上面有说tf.train.Features.FeatureEntry要求传入的是一个字典,所以我们要将数据组织成字典格式,就有:

这样我们得到了一个example,最后通过for循环就可以将所有的数据写入TFrecord文件中啦。

我们主要用到其前两个参数

传入一个example和字典格式,就可以将其内容解析出来(写入可以理解为序列化过程,这里解析可以理解为反序列化过程)。

有了这个之后我们就先把刚才写入并保存的TFrecord文件读取出来。

现在我们的任务就变为:将dataset中的数据example全部解析出来。对dataset中所有元素进行某一种操作可以用map函数。所以我们只要使用一下语句就可以了

其中的参数read_and_decode就是我们定义的解析example的函数,实现如下:

example_string就是原始dataset中的数据,feature_description是对字典的描述,这里我们要自己定义一个格式,与写入时保持一致即可:

因为输入的是字符串,所以shape为空,最后一个参数不用填,dtype为string格式。

搭建一个端到端的简单网络(windows下运行)

}

内容简介:tensorflow实现在函数中用实现在函数中用tf.Print输出中间值输出中间值今天小编就为大家分享一篇tensorflow实现在函数中用tf.Print输出中间值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧tensorflow由于其基于静态图的模式,导致写代码的时候很难调试,除了用官方的调试工具外,最直接的方法就是把中间结果输出出来查看,然而,直接用print函数只能输出tensor变量的形状,而不是数值,想要输出tensor的具体数值需要用tf.Print函数。网上有很多关于这个函数使用方法的说明,这里简要介绍:Print(

资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!

}

这篇文章主要介绍了Python Tensor FLow简单使用方法,结合实例形式详细分析了Tensor FLow相关概念、原理、用法与操作注意事项,需要的朋友可以参考下

本文实例讲述了Python Tensor FLow简单使用方法。分享给大家供大家参考,具体如下:

Tensor表示张量,是一种多维数组的数据结构。Flow代表流,是指张量之间通过计算而转换的过程。TensorFLow通过一个计算图的形式表示编程过程,数据在每个节点之间流动,经过节点加工之后流向下一个节点。

计算图是一个有向图,其组成如下:节点:代表一个操作。边:代表节点之间的数据传递和控制依赖,其中实线代表两个节点之间的数据传递关系,虚线代表两个节点之间存在控制相关。

张量是所有数据的表示形式,可以将其理解为一个多维数组。零阶张量就是标量(scalar),表示一个数,一阶张量为一维数组,即向量(vector)。n阶张量也就是n维数组。张量并不保存具体数字,它保存的是计算过程。

下面的例子是将节点1、2的值相加得到节点3。

 

直接print(node3)输出的结果不是具体的值,而是张量结构。因为创建计算图只是建立了计算模型,只有会话执行run()才能获得具体结果。

Tensor("Add_3:0", shape=(), dtype=float32)中,Add表示节点名称,3表示这是该节点的第3个输出。shape表示张量的维度信息,()代表标量。dtype表示张量的类型,每个张量的类型唯一,如果不匹配会报错,不带小数点的默认类型为int32,带小数点默认为float35。下面的例子为更复杂的张量类型:

 

其中shape=(4,2,3)表示tensor1的最外层有4个数组,每个数组内有2个子数组,子数组由3个数字构成。可以通过多维数组的方式访问其中的具体元素,[3,0,0]即为第四个数组中第一个子数组的第一个元素,4。

计算图中还有的节点表示操作,例如加减乘除、赋初值等,操作有自己的属性,需要在创建图的时候就确定,操作之间有先后等依赖关系,通过图的边可以直观地看出来。

会话(Session)拥有并管理TensorFLow的所有资源,通过Session运行计算才能得到结果,计算完成后记得关闭会话回收资源。下面是使用Session的流程:

#利用会话进行计算操作
 

也可以通过python上下文管理器来使用Session,当退出上下文时会自动关闭Session并释放资源

 

还可以通过指定默认会话,使用eval()获取张量的值:

 

在交互式环境下通过InteractiveSession()自动将生成的会话设为默认:

 

TensorFLow通过constant函数完成对常量的定义,可以为其赋初值与命名

 

而变量不仅需要定义,还需要经过初始化后才可以使用,初始化操作不仅需要定义,还需要执行

 
 
 

TensorFLow的变量一般不需要手动赋值,因为系统会在训练过程中自动调整。如果不希望由模型自动赋值,可以在定义时指定属性trainable=False,并通过assign函数来手动赋值

 
 
 
 

有时在定义变量的时候,并不知道它的具体值,只有在运行的时候才输入对应数值,而tensorflow中变量的定义需要赋初值,这时就需要使用占位符placeholder来进行定义,并在计算时传入具体数值。一个简单的使用例子:

 
 

也可以把多个操作放到一次feed操作完成

 
#将m,s两个操作放到一起,并返回两个结果
 

TensorBoard是TensorFLow的可视化工具,通过程序运行中输出的日志文件可视化地表示TensorFLow的运行状态。其编程如下:

 
#定义日志存放的默认路径
#生成writer将当前的计算图写入日志
 

利用TensorBoard显示图片,通过summary.image()将格式化的图片数据显示,其中输入的image_imput数据是四维格式,第一维表示一次输入几行数据,-1表示不确定。28,28,1表示图片数据为28×28大小,且其色彩通道为1。

在创建session后定义writer用于日志文件的写入,在进行训练时,每批次训练都将执行一次merge操作,并将结果写入日志。

如下为通过的例子,将其中的一些数据通过TensorBoard显示出来:

 
 
 #执行summary操作并将结果写入日志文件
 
 

运行结果如下图所示分别为图片、accuracy、loss标量图、Y1直方图以及随之生成的分布图:

更多关于Python相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》及《》

希望本文所述对大家Python程序设计有所帮助。

}

我要回帖

更多关于 fluent如何导出数据 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信