具有多维数组的 tf.SequenceExample

2023-12-26

在 Tensorflow 中,我想将多维数组保存到 TFRecord。例如:

[[1, 2, 3], [1, 2], [3, 2, 1]]

由于我试图解决的任务是连续的,因此我尝试使用 Tensorflowtf.train.SequenceExample()当写入数据时,我成功地将数据写入 TFRecord 文件。但是,当我尝试使用 TFRecord 文件加载数据时tf.parse_single_sequence_example,我遇到了大量神秘的错误:

W tensorflow/core/framework/op_kernel.cc:936] Invalid argument: Name: , Key: input_characters, Index: 1.  Number of int64 values != expected.  values size: 6 but output shape: []
E tensorflow/core/client/tensor_c_api.cc:485] Name: , Key: input_characters, Index: 1.  Number of int64 values != expected.  values size: 6 but output shape: []

我用来尝试加载数据的函数如下:

def read_and_decode_single_example(filename):

    filename_queue = tf.train.string_input_producer([filename],
                                                num_epochs=None)

    reader = tf.TFRecordReader()
    _, serialized_example = reader.read(filename_queue)

    context_features = {
         "length": tf.FixedLenFeature([], dtype=tf.int64)
    }

    sequence_features = {
         "input_characters": tf.FixedLenSequenceFeature([],           dtype=tf.int64),
         "output_characters": tf.FixedLenSequenceFeature([], dtype=tf.int64)
    }

    context_parsed, sequence_parsed = tf.parse_single_sequence_example(
    serialized=serialized_example,
    context_features=context_features,
    sequence_features=sequence_features
)

context = tf.contrib.learn.run_n(context_parsed, n=1, feed_dict=None)
print context

我用来保存数据的函数在这里:

# http://www.wildml.com/2016/08/rnns-in-tensorflow-a-practical-guide-and-undocumented-features/
def make_example(input_sequence, output_sequence):
    """
    Makes a single example from Python lists that follows the
    format of tf.train.SequenceExample.
    """

    example_sequence = tf.train.SequenceExample()

    # 3D length
    sequence_length = sum([len(word) for word in input_sequence])
    example_sequence.context.feature["length"].int64_list.value.append(sequence_length)

    input_characters = example_sequence.feature_lists.feature_list["input_characters"]
    output_characters = example_sequence.feature_lists.feature_list["output_characters"]

    for input_character, output_character in izip_longest(input_sequence,
                                                          output_sequence):

        # Extend seems to work, therefore it replaces append.
        if input_sequence is not None:
            input_characters.feature.add().int64_list.value.extend(input_character)

        if output_characters is not None:
            output_characters.feature.add().int64_list.value.extend(output_character)

    return example_sequence

任何帮助都会受到欢迎。


我有同样的问题。我认为这是完全可以解决的,但是你必须决定输出格式,然后弄清楚你将如何使用它。

First 你的错误是什么?

该错误消息告诉您,您尝试读取的内容不适合您指定的特征尺寸。那么你在哪里指定的呢?就在这儿:

sequence_features = {
    "input_characters": tf.FixedLenSequenceFeature([], dtype=tf.int64),
    "output_characters": tf.FixedLenSequenceFeature([], dtype=tf.int64)
}

这表示“我的 input_characters 是单个值的序列”,但事实并非如此;你所拥有的是一系列单个值的序列,因此是一个错误。

Second 你能做什么?

如果您改为使用:

a = [[1,2,3], [2,3,1], [3,2,1]] 
sequence_features = {
    "input_characters": tf.FixedLenSequenceFeature([3], dtype=tf.int64),
    "output_characters": tf.FixedLenSequenceFeature([3], dtype=tf.int64)
}

您的代码不会出现错误,因为您已指定顶级序列的每个元素的长度为 3 个元素。

或者,如果您没有固定长度的序列,那么您将不得不使用不同类型的功能。

sequence_features = {
    "input_characters": tf.VarLenFeature(tf.int64),
    "output_characters": tf.VarLenFeature(tf.int64)
}

VarLenFeature 告诉它在读取之前长度是未知的。不幸的是,这意味着您的 input_characters 无法再一步读取为密集向量。相反,它将是一个稀疏张量 https://www.tensorflow.org/api_docs/python/tf/SparseTensor默认情况下。你可以把它变成一个稠密张量tf.sparse_tensor_to_dense https://www.tensorflow.org/api_docs/python/tf/sparse_tensor_to_dense eg:

input_densified = tf.sparse_tensor_to_dense(sequence_parsed['input_characters'])

正如中提到的文章 http://www.wildml.com/2016/08/rnns-in-tensorflow-a-practical-guide-and-undocumented-features/您一直在查看的数据,如果您的数据并不总是具有相同的长度,您的词汇表中必须有一个“not_really_a_word”单词,您可以将其用作默认索引。例如假设您有索引 0 映射到“not_really_a_word”单词,然后使用您的

a = [[1,2,3],  [2,3],  [3,2,1]]

python 列表最终将成为

array((1,2,3),  (2,3,0),  (3,2,1))

tensor.

被警告;我不确定反向传播对于稀疏张量“是否有效”,就像对于密集张量一样。这野生ML文章 http://www.wildml.com/2016/08/rnns-in-tensorflow-a-practical-guide-and-undocumented-features/讨论了每个序列填充 0 来掩盖“not_actually_a_word”单词的损失(请参阅他们的文章中的“旁注:小心您的词汇/类中的 0”)。这似乎表明第一种方法会更容易实现。

请注意,这与此处描述的情况不同,其中每个示例都是序列的序列。据我了解,这种方法之所以得不到很好的支持,是因为它滥用了本应支持的案例;直接加载固定大小的嵌入。


我假设您接下来要做的就是将这些数字转换为词嵌入。您可以将索引列表转换为嵌入列表tf.nn.embedding_lookup

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

具有多维数组的 tf.SequenceExample 的相关文章

随机推荐

  • 使用 aws-sdk 从 javascript(reactjs) 调用 lambda(node/express - 无服务器快速路由)

    Reactjs const result await invokeLambda points 调用Lambda js const AWS require aws sdk AWS config update accessKeyId id se
  • 调试时忽略 Visual Studio 中的项目

    在 Visual Studio 中 如果您有一个包含许多项目的解决方案 是否可以指示调试器忽略某些项目 在这个意义上将它们视为外部 DLL 吗 我们有很多我想调试的帮助程序代码 例如 如果我处于函数调用中 并且进入其中 我想跳过 IoC 代
  • 数组的 IsEmpty() 函数

    我想测试我的数组是否为空 我尝试使用该功能IsEmpty 但函数总是返回False 并且不要输入 if 条件 我的代码如下 Sub Freeze Dim tab freeze as variant If IsEmpty tab freeze
  • Scala mixin 到类实例

    Scala 中是否可以对类实例进行一些混合 例如 我有一些 MyClass 实例var x new MyClass我想在某些方法或特征上扩展它而不复制它 Edit 我正在寻找延伸的方法x当它被实例化之后 因此 例如在函数方法中 得到x作为参
  • Facebook 转化事件是否有类似于 Google Analytics 的回调功能?

    我在文档中找不到转化跟踪中是否有任何回调功能 https developers facebook com docs ads for websites tag api https developers facebook com docs ad
  • 使用“;”下载文件或文件名中的“#”会破坏文件名

    我有一个名为 AttachmentDownload aspx 的文件 并且 Page Load 方法内部有这样的代码 可以提供下载文件 除包含 的名称外 所有名称均可在 IE 中正常工作 或者 他们允许用户以 AttachmentDownl
  • github 搜索限制结果

    我需要在 Github 上进行大量搜索以获取论文中的统计数据 例如 我需要在 GitHub 上探索大量 Android 项目 但该网站将搜索结果限制为 1000 个 例如 还使用Java GitHub API我尝试使用该方法库org ecl
  • 从 DNX 迁移到 ASP.NET Core 2.0 时 API 丢失/更改

    我一直致力于将应用程序从过时的 DNX 迁移到 ASP NET Core 2 0 在这样做的过程中 我们发现命名空间和 API 几乎没有变化 例如Microsoft AspNet to Microsoft AspNetCore 尽管我已经能
  • android listview 显示所有可用项目,无需滚动静态标题

    我在尝试使某种布局发挥作用时遇到了一些困难 我想要一个列表 列表不必是可滚动的 但应该完整显示 但是 如果总内容高于屏幕 页面本身应该能够滚动 其中包含列表
  • ReactiveUI 与 MvvmCross

    标题说明了一切 根据您的经验 这两个框架之间的主要区别是什么 我们什么时候应该使用其中一种而不是另一种 预期用途 跨平台开发 Windows 8 iOS Android WindowsRT Mac 我在同一个跨平台解决方案中同时使用 Mvv
  • 验证类实例属性的正确方法

    有一个像这样的简单 Python 类 class Spam object init self description value self description description self value value 我想检查以下限制
  • 使用 Pandas 从 CSV 读取整数时如何优雅地回退到“NaN”值?

    使用时read csv对于 Pandas 如果我想要将给定的列转换为类型 格式错误的值将中断整个操作 而不会指示有问题的值 例如 运行如下内容 import pandas as pd import numpy as np df pd rea
  • 将字符串作为条件求值 Java

    我必须从 D B 检索一组列值并将其作为条件进行检查 例如 我会有像这样的字符串 value gt 2 4 lt value lt 6 在 D B 列中 值是一直被比较的值 我将在代码中声明一个变量值 并且我应该评估这个条件 int val
  • GoLand 的运行/调试配置窗口中“Go 工具参数”的“-i”选项是什么?

    What is the i option for Go tool arguments in GoLand s Run Debug Configurations window 取自go help build The i flag instal
  • 关闭弹出窗口时刷新父页面

    我有一个父页面 我在其中添加了搜索功能 像下面这样 function FunClick StrPriCaption var StrPriHTML if StrPriCaption AdvSearch document getElementB
  • 画布工具提示出现在画布之外?

    我使用 KineticJS 和 D3 js 制作了以下内容 我使用 KineticJS 让我在用户将鼠标悬停在其中一个点上时弹出工具提示 但是 由于画布的边界 工具提示看起来被切断 有什么办法可以让它出现而不被剪掉吗 整个代码本身非常庞大
  • Azure SQL - 用户登录失败

    我正在使用免费的 azure 订阅 设置了 SQL 服务器 v12 并在其上创建了数据库 但是 我似乎无法使用在 SQL Server 凭据期间出现提示时设置的服务器管理凭据登录 管理工作室回报 Cannot connect to
  • 本地文件的 NSURLThumbnailDictionaryKey 为空

    我想获取必须在我的应用程序中显示的文件的缩略图 我在这里使用 NSURL NSDictionary thumbnails nil BOOL success fileURL getResourceValue thumbnails forKey
  • 套接字输入和输出的单独线程

    我被分配去解决多线程 java 服务器的一些性能和随机崩溃问题 尽管线程和线程安全对我来说并不是真正的新主题 但我发现设计一个新的多线程应用程序可能比尝试调整一些遗留代码困难一半 我浏览了一些著名的书籍来寻找答案 但奇怪的是 只要我阅读并分
  • 具有多维数组的 tf.SequenceExample

    在 Tensorflow 中 我想将多维数组保存到 TFRecord 例如 1 2 3 1 2 3 2 1 由于我试图解决的任务是连续的 因此我尝试使用 Tensorflowtf train SequenceExample 当写入数据时 我