Tensorflow v1.10:将图像存储为字节字符串或每个通道?

2023-12-11

Context

据了解,目前 TF 的 Record 文档还有一些不足之处。

我的问题是关于什么是最佳存储:

  • 一个序列,
  • 它的每个元素类别概率,以及
  • 一些(上下文?)信息(例如序列的名称)

作为 TF 记录。

也就是说,这个问题考虑将序列和类概率存储为通道与字节字符串,以及元信息是否应该作为tf.train.Example或作为上下文tf.train.SequenceExample。 (请参阅底部的问题)。

M.W.E.

例如,假设我的外观顺序如下

seq = [ 
        # el1, el2 
        [ 0,   1   ], # channel 1
        [ 0,   1   ]  # channel 2
      ]

即它是一个 2 通道序列fixedlength(本例中为 2),其中值只能是整数值。

我们尝试将序列分为三个类

cls_probs = [ 
        #cls1, cls2, cls3
        [0   , 0.9 , 0.1 ], # class probabilities element 1
        [0   , 0.1 , 0.9 ]  # class probabilities element 2
      ]

实际上两者都有效seq and cls_probs are numpy.arrays.

仅网络requires此信息。但是,我也有一些元数据,我想将其与序列保留在一起。

e.g.

meta = {
           'name': 'my_seq',  # safer to keep this with the data rather than as file name
           'meta_val_1': 100, # not used by network, but may be useful when evaluating network's predictions for this particular sequence
           'meta_val_2': 10
       }

制作TF记录

tf.train.示例

然后我有几种方法可以构建我的tf.train.Example:

作为渠道

example = tf.train.Example(
    features = tf.train.Features(
        feature = {
            'channel_1': tf.train.Feature(int64_list=tf.train.Int64List(value=seq[:,0])),
            'channel_2': tf.train.Feature(int64_list=tf.train.Int64List(value=seq[:,1])),
            'class_1'  : tf.train.Feature(float_list=tf.train.FloatList(value=cls_probs[:,0])),
            'class_2'  : tf.train.Feature(float_list=tf.train.FloatList(value=cls_probs[:,1])),
            'class_3'  : tf.train.Feature(float_list=tf.train.FloatList(value=cls_probs[:,2])),
            'name'     : tf.train.Feature(bytes_list=tf.train.BytesList(value=[f'{meta["name"]}'.encode('utf-8')])), 
            # should these be FloatList even though it is just a single value?
            # should these be included here if they are not used by the network?
            'val_1'    : tf.train.Feature(float_list=tf.train.FloatList(value=[f'{meta["meta_val_1"]}'])),
            'val_2'    : tf.train.Feature(float_list=tf.train.FloatList(value=[f'{meta["meta_val_2"]}'])),
    })
)

where f'{variable}'.encode('utf-8')目前不建议fb'<string>' (note: f-strings仅适用于 python3.6+)。

这种格式有点好,因为每个序列通道都是明确的。然而,它也很冗长,并且在加载到网络中时需要进行预处理。

作为字符串

或者,我可以将数组转储到字符串中

example = tf.train.Example(
    features = tf.train.Features(
        feature = {
            'sequence' : tf.train.Feature(bytes_list=tf.train.BytesList(value=seq.tostring())),
            'cls_probs': tf.train.Feature(bytes_list=tf.train.BytesList(value=cls_probs.tostring())),
            # ... see encoding of meta values from above
    })
)

tf.train.Sequence示例

TF Records 还接受另一种形式:tf.train.SequenceExample. SequenceExample需要上下文特征和未命名特征的有序列表。

作为渠道

所以上面的重组为channels例子:

example = tf.train.SequenceExample(
    context = tf.train.Features(
        feature = {
            'Name' : tf.train.Feature(bytes_list=tf.train.BytesList(value=[f'{meta["name"]}'.encode('utf-8')])), 
            'Val_1': tf.train.Feature(float_list=tf.train.FloatList(value=[f'{meta["meta_val_1"]}'])),
            'Val_2': tf.train.Feature(float_list=tf.train.FloatList(value=[f'{meta["meta_val_2"]}'])),
        }
    ),
    feature_lists = tf.train.FeatureLists(
        feature_list = {
            'sequence': tf.train.FeatureList(
                feature = [
                    tf.train.Feature(int64_list=tf.train.Int64List(value=seq[:,0])),
                    tf.train.Feature(int64_list=tf.train.Int64List(value=seq[:,1])),
                ]
            ),
            'class_probabilities': tf.train.FeatureList(
                feature = [
                    tf.train.Feature(float_list=tf.train.FloatList(value=cls_probs[:,0])),
                    tf.train.Feature(float_list=tf.train.FloatList(value=cls_probs[:,1])),
                    tf.train.Feature(float_list=tf.train.FloatList(value=cls_probs[:,2]))
                ]
            )
        }
    )
)

作为字符串

同样我们可以创建 asstring例子:

example = tf.train.SequenceExample(
    context = tf.train.Features(
        # see above
    ),
    feature_lists = tf.train.FeatureLists(
        feature_list = {
            'sequence': tf.train.FeatureList(
                feature = [
                    tf.train.Feature(bytes_list=tf.train.BytesList(value=seq.tostring()))
                ]
            ),
            'class_probabilities': tf.train.FeatureList(
                feature = [
                    tf.train.Feature(bytes_list=tf.train.BytesList(value=cls_probs.tostring()))
                ]
            )
        }
    )
)

问题

在这里我给出了 M.W.E.了解如何构建一个示例(准备导出到 TF 记录)tf.train.Example and tf.train.SequenceExample。此外,我还演示了如何按通道执行此操作或通过转储为字节字符串来执行此操作。这两种方法(作为通道/作为字符串)都包含示例中的元信息。

因此我的问题是:

  1. 哪种存储方式(作为通道/作为字符串)更优化(对于读取、写入、重用等)?

  2. 考虑到应与示例一起保留的元信息,最好使用tf.train.Example并将元信息作为特征存储在那里?或使用tf.train.SequenceExample并将元信息存储在上下文参数中?

有谁知道这四种策略中的任何一种是否有任何显着的优点/缺点?

对于那些想要在更大的、更少虚拟的数据上进行测试的人,可以找到一些用于生成此代码的函数below

最后我想指出这一点中等职位其中详细阐述了 TF 的文档。


这是我第一个答案的扩展,有些人可能会觉得有用。

我在这里考虑相反的情况,而不是考虑编码,例如如何从 TFRecord 检索数据。

可以找到colabhere.

本质上,我调查了 10 种对数组/数组数组进行编码的方法。

  1. 示例:Int64 特征(int 数组)
  2. 示例:浮点特征(浮点数组)
  3. 示例:字节功能(int 数组转储为字节字符串)
  4. SequenceExample:Int64 特征列表(int 数组的数组)
  5. SequenceExample:浮点特征列表(浮点数组的数组)
  6. SequenceExample:字节特征列表(转储为字节字符串的 int 数组的数组)
  7. 示例:字节功能(所有 int 数组都转储为字节字符串的数组)
  8. SequenceExample:字节特征列表(转储为字节字符串的 int 数组的数组)
  9. SequenceExample:字节特征列表(所有 int 数组的数组都转储为字节字符串)
  10. SequenceExample:Bytes 特征列表(int 数组的数组,其中每个 int 都转储为字节字符串)

还有更多方法可以做到这一点。

简而言之,除了 8 之外,我能够“恢复”(写入 tf.record 并读回数据)。

但是,应该注意的是,对于方法 7 和 10,检索到的数组是扁平化的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tensorflow v1.10:将图像存储为字节字符串或每个通道? 的相关文章

  • 具有相等宽度和高度 TD 的响应式表格

    如何创建每个单元格 TD 具有相同宽度和高度的响应式 HTML 表格 因此 当我调整浏览器窗口的大小或调整表格容器的大小时 表格将调整大小 但每个单元格将具有相同的高度和宽度 基金会不关心这个 当我用固定宽度和高度 以像素为单位 初始化 T
  • 如何使用 Ioc Unity 注入依赖属性

    我有以下课程 public interface IServiceA string MethodA1 public interface IServiceB string MethodB1 public class ServiceA IServ
  • Python请求401错误但url在浏览器中打开

    我正在尝试从这个位置提取 json https www nseindia com api option chain indices symbol BANKNIFTY https www nseindia com api option cha
  • python pandas如何在多个条件下过滤字符串

    我有以下数据框 import pandas as pd data 5Star FiveStar five star fiv estar data pd DataFrame data columns columnName 当我尝试用一 种条件
  • 连接运算符 + 或 ,

    var1 abc var2 xyz print literal var1 var2 literalabcxyz print literal var1 var2 literal abc xyz 除了带有 的自动空格之外 两者有什么区别 哪个通
  • 处理延迟对象数组

    自从使用 Deferred我已经遇到过这种情况几次 我有一个值列表 每个值都以某种方式生成一个延迟对象 并且我想在所有延迟对象都解析后执行回调 一个更具体的例子是这样的 var urls foo com bar com baz com qu
  • '>&0' 有用途吗(重定向到标准输入)?

    在 bash 中你可以这样做 echo test gt 1 重定向到标准输出 尽管它已经到那里了 echo test gt 2 重定向到标准错误 echo test gt 0 重定向到标准输入 当我做最后一个时 我的终端仍然打印test就像
  • Chrome 中的 addEventListener

    我正在关注 Lynda com 上有关新 DOM 事件模型的教程 这是我正在使用的代码 function addEventHandler oNode sEvt fFunc bCapture if typeof window event un
  • 在私有 guice 模块中公开 Map

    我在 guice 中有一个 PrivateModule 我想从该模块公开一个 Map public class TestInjectionModule extends PrivateModule expose Map class annoa
  • 将 pandas 数据框中的多列更改为日期时间

    我有一个 13 列和 55 000 行的数据框 我正在尝试将其中 5 行转换为日期时间 现在它们返回类型 对象 我需要转换这些数据以进行机器学习 我知道如果我这样做 data birth date pd to datetime data b
  • Pandas 替换特定列上的值

    我知道这两个类似的问题 熊猫替换值 https stackoverflow com questions 27117773 pandas replace values Pandas 替换数据框中的列值 https stackoverflow
  • 如何在 CruiseControl.net 中配置 svn 任务来检测 subversion 外部更改

    我在 subversion 中有一个 net 项目 它持续集成 Cruisecontrol net 我使用Svn源代码控制CCNET任务 net 项目库目录 其中包含配置为 subversion 外部的一组可重用组件 ProjectA li
  • 如何使用 gvisMotionChart 处理 POSIXlt 格式时间?

    The googleVisR软件包出奇的好 然而 我对一个问题感到困惑gvisMotionChart关于 timevar 因为我的数据集中的时间是POSIXlt格式 例如 2009 07 02 19 00 00 2009 07 02 20
  • 非键属性查询

    看起来 dynamodb 的query方法必须包含分区键作为过滤器的一部分 如果不知道分区键如何进行查询 例如 您有一个具有属性的用户表userid设置为分区键 现在我们想通过电话号码查找用户 是否可以在没有分区键的情况下执行查询 使用sc
  • PyQt QFileDialog exec_ 很慢

    我正在使用自定义QFileDialog因为我想选择多个目录 但是exec 功能非常慢 我不明白为什么 我正在使用最新版本的 PyQt 代码片段 from PyQt4 import QtGui QtCore QtNetwork uic cla
  • Android Nougat 无法显示某些矢量文件 (Resources$NotFoundException)

    我一直在开发一个包含许多矢量图形的应用程序 最近我开始在 Nougat 上测试它 发现它立即崩溃了 logcat 在加载矢量时显示 Resources NotFoundException 这让人想起带有矢量图形的 Android 早期版本中
  • 如何获取 EC2 实例的 CloudWatch 指标数据

    我想获取我的 EC2 实例的 Cloudmetrics 数据 以便我可以使用这些数据绘制图表并将其显示在我的 Android 设备上 我怎么做 有相同的示例程序或教程吗 提前致谢 这就是我正在做的 private static void f
  • 如何限制mySQL中的搜索和替换字符串

    我用它来搜索和替换 mySQL 中的字符串 UPDATE products SET prodname REPLACE prodname S S 这些产品包含诸如 TYLENOL TABS 100 S 之类的字符串 我想将其转换为 TYLEN
  • 是否可以使用具有余弦相似度的 KDTree?

    看来我不能使用这个相似度度量sklearn例如 KDTree 但我需要 因为我正在使用测量单词向量相似度 对于这种情况 快速鲁棒定制算法是什么 我知道关于Local Sensitivity Hashing 但它应该经过大量调整和测试才能找到
  • 如何对“2-1”这样的字符串进行数学计算以产生“1”?

    我只是想知道 PHP 是否有一个函数可以接受像这样的字符串2 1并产生它的算术结果 或者我必须手动执行此操作explode 获取算术运算符左侧和右侧的值 我知道这个问题很老了 但我昨晚在寻找不太相关的东西时遇到了它 而且这里的每个答案都很糟

随机推荐

  • python 太多静态嵌套块

    我正在尝试将包含相同数量项目的超过 21 个列表写入文本文件中的列 import random a b q for i in range 200 a append random gauss 10 0 1 b append random 20
  • Delphi CreateOleObject 事件

    有一段代码 var myobject OleVariant begin myobject CreateOleObject SomeNamespace SomeClass end 该 COM 对象具有事件 例如 OnClick 我应该如何在不
  • Solr Facet 具有逗号分隔值的多个单词

    我正在将数据从 mysql 提取到 solr 中 其中一个字段是使用 group concat 函数生成的 该函数会生成一个以逗号分隔的字段 其中列出了事件的所有频段 当时我相信这是为一项活动存储多个乐队的最佳方式 但是 我发现我无法针对所
  • 如何在同一浏览器上重新运行 Selenium 2.0 (webdriver) 测试?

    我正在尝试使用Selenium 2 0 Webdriver 来实现一系列测试 在运行这些测试之前 我必须登录应用程序 由于该应用程序不是我 自己的 测试 api 构建的功能 因此每个测试不应登录到我的应用程序来运行 我更愿意执行以下操作 将
  • Maven:打包时执行antrun任务

    我需要使用 Maven antrun 插件将 Hibernate 字节码检测添加到我的 Java 类之一 以便启用各个字段的延迟加载 但是 我无法让插件在构建周期中执行 如何指示 Maven 在编译之后 打包之前执行 antrun 插件mv
  • Mysql JOIN(多个)表

    我有3张桌子 其中 2 个是相同的 相同的列 不同的数据 第三个有一些关于其他 2 个的信息数据 数据库如下所示 Table 1 ID Name 1 Table 2 2 Table 3 Table 2 Name Temperature Pr
  • WCF 与实体框架错误

    错误 ObjectContext 实例已被释放 不能再用于需要连接的操作 我正在尝试使用实体框架 VS 2010 NET 4 创建 WCF 服务 当我运行它时 我收到上述错误 我读过一些有关编辑 T4 模板的内容 但似乎它已经有了 Data
  • PHP 正则表达式删除多个 ? 标记

    我无法找到正确的正则表达式字符串来删除多个 的序列 人物 我想替换多个连续的 用一个 但是要转义哪些字符 正在逃避我 输入示例 这东西还开着 或者是什么 期望的输出 这个东西开了吗 或者是什么 我在用着预替换 in PHP preg rep
  • 一些基本操作的 CPU 成本数量级

    回答后那么问题被否决了 我想和你核实一下 为了对我编写的代码的成本有一个初步的了解 我倾向于以这种方式扩展操作 堆分配比堆栈分配慢大约 1000 倍 与屏幕 输出的IO约为1000次 比堆分配慢 硬盘上的 IO 大约慢 1000 倍 与屏幕
  • 如何使用 Passport-google-oauth 成功身份验证后重定向到原始页面

    我正在使用节点 Passport google oauth 模块 并尝试使用基于会话的方法成功进行身份验证后将页面重定向回原始路径Node js Passport 的 Google 策略上的自定义 returnUrl 但是 我发现在回调中
  • PHP MYSQL 多维数组

    我在尝试从两个单独的 MySQL 选择创建多维数组时遇到了很大的麻烦 我一直在这里和谷歌搜索一整天 最后不得不承认失败并寻求一些帮助 我也是新手 这没有帮助 我有两个表 一个表包含每个 id 的单行结果 另一个表可以包含一个 id 的多行结
  • 如何确定git中最后合并的分支?

    我需要确定哪个是最后合并到 master 的分支 我一直在搜索 git 文档 但我仍然有点迷失 到目前为止我已经找到了命令 假设master是我当前的分支 git log oneline graph decorate 这为我提供了这样的输出
  • 如何进行合并?

    我有一个主分支和一个功能分支 feature 分支有一些更改 但 master 分支有很多更改 例如从存储库中删除了 10 个项目 问题是如何将feature分支合并回master分支 1 将feature与master合并 然后maste
  • 如何让ffmpeg根据设置的高度比例计算修改后的宽度?

    找到解决方案后 我的 Android 上所有 webm 到 MP4 编解码器转换错误的根源 我遇到了另一个问题 分解我的问题 大多数设备都支持哪些 MP4 分辨率 我知道它们从某个高度值开始经过 p 才能工作 例如 720p X720 有没
  • 从列表创建多个复选框并获取所有值

    我想从一个大列表中生成多个复选框 并获取所有值 这是到目前为止我的代码 列表可能更大 from Tkinter import def print ingredients args values cheese cheese get ham h
  • 如何在 python 中将多图像 TIFF 转换为 PDF?

    我想在 python 中将多图像 TIFF 转换为 PDF 我是这样写的代码 这段代码怎么行不通 我应该如何改变它 images img Image open multipage tif for i in range 4 try img s
  • PHP - 打印带有控制字符的字符串

    有没有办法让 PHP 输出一个带有 r n 和 n 的字符串作为实际文本而不是换行符 我看到一个有趣的问题 n 上的explode 无法在Windows 服务器上正常运行 编辑 r n 来自用户在输入文本区域时按 Enter 键 所以我没有
  • 安卓图片上传

    你好 我是 Android 开发新手 我想知道如何在 Android 中上传图像 我没有找到任何有用的教程 你能给我一些指导吗 请帮助我 我为你构建了这个小方法 private boolean handlePicture String fi
  • JSON 完成的自定义扩展在双引号中不起作用

    我正在开发一个 VSCode 扩展 它应该通过额外的代码完成来增强 JSON 编辑 因此我添加了四个虚拟建议 foo foo1 foo2 foo3 开始测试 当在 JSON 键后输入冒号时 它会按预期工作 此外 当我在空对象中触发完成时 它
  • Tensorflow v1.10:将图像存储为字节字符串或每个通道?

    Context 据了解 目前 TF 的 Record 文档还有一些不足之处 我的问题是关于什么是最佳存储 一个序列 它的每个元素类别概率 以及 一些 上下文 信息 例如序列的名称 作为 TF 记录 也就是说 这个问题考虑将序列和类概率存储为