TensorFlow函數(shù):tf.parse_example

2018-11-10 11:54 更新

tf.parse_example 函數(shù)

parse_example(
    serialized,
    features,
    name=None,
    example_names=None
)

定義在:tensorflow/python/ops/parsing_ops.py

請(qǐng)參閱指南:輸入和讀取器>協(xié)議緩沖區(qū)示例

把 Example 原型解析成張量字典.

解析 serialized 中給定的一系列序列化 Example 原型.我們提到的 serialized 作為一個(gè)批次與 batch_size 的許多條目的個(gè)別 Example 原型.

example_names 可能包含相應(yīng)序列化原型的描述性名稱.這些對(duì)于調(diào)試目的可能是有用的,但是它們對(duì)輸出沒有影響.如果值不是 None,example_names 必須與serialized 具有相同長(zhǎng)度.

這個(gè) op 將序列化的例子解析成一個(gè)用于 Tensor 和 SparseTensor 對(duì)象的字典映射鍵.features 是從鍵到 VarLenFeature、SparseFeature 和 FixedLenFeature 對(duì)象的字典.每個(gè) VarLenFeature 和 SparseFeature 被映射到一個(gè) SparseTensor,每個(gè) FixedLenFeature 被映射到一個(gè) Tensor.

每個(gè) VarLenFeature 映射到表示不規(guī)則矩陣的指定類型的  SparseTensor .它的索引為 [batch, index],其中 batch 標(biāo)識(shí) serialized 的例子,并且 index 是與該功能和示例關(guān)聯(lián)的值列表中的值索引.

每個(gè) SparseFeature 映射到指定類型的 SparseTensor,表示 dense_shape [batch_size] + SparseFeature.size 的張量.它的值來自于示例中具有鍵 value_key 的特征.values[i] 來自于一個(gè)在批處理?xiàng)l目批次的例子中的位置 k.該位置信息作為 [batch, index_0, index_1, ...] 被記錄在 indices[i] 中,其中 index_j 是該特征的 k-th,在示例中使用鍵 SparseFeature. index_key [j].也就是說,我們將 aSparseTensorby 的索引(表示批輸入的第一個(gè)指數(shù)除外) 按照維度 分解為例的不同特征.由于其復(fù)雜性 aVarLenFeature 應(yīng)優(yōu)先于 aSparseFeature(只要有可能的話).

每個(gè) FixedLenFeature df 映射到一個(gè)指定的類型(或 tf.float32,如果沒有指定)和形狀 (serialized.size(),) + df.shape 的 Tensor.

帶有 default_value 的 FixedLenFeature 條目是可選的.如果沒有默認(rèn)值,則在 serialized 的任何示例中缺少該 Feature 時(shí),我們將失敗.

每個(gè) FixedLenSequenceFeature df 映射到指定類型 (或 tf. float32,如果未指定) 和形狀 (serialized.size(), None) + df.shape 的 Tensor.serialized 的所有的例子都將用 default_value 沿第二個(gè)維度填充.

示例-1

例如,如果提供了一個(gè) tf.float32 VarLenFeature ft 和三個(gè)序列化的 Examples:

serialized = [
  features
    { feature { key: "ft" value { float_list { value: [1.0, 2.0] } } } },
  features
    { feature []},
  features
    { feature { key: "ft" value { float_list { value: [3.0] } } }
]

那么輸出將如下所示:

{"ft": SparseTensor(indices=[[0, 0], [0, 1], [2, 0]],
                    values=[1.0, 2.0, 3.0],
                    dense_shape=(3, 2)) }

如果使用 FixedLenSequenceFeaturewith default_value = -1.0 和 shape=[],那么輸出將如下所示:

{"ft": [[1.0, 2.0], [3.0, -1.0]]}

示例-2

給出兩個(gè)在 serialized 中的 Example 輸入原型:

[
  features {
    feature { key: "kw" value { bytes_list { value: [ "knit", "big" ] } } }
    feature { key: "gps" value { float_list { value: [] } } }
  },
  features {
    feature { key: "kw" value { bytes_list { value: [ "emmy" ] } } }
    feature { key: "dank" value { int64_list { value: [ 42 ] } } }
    feature { key: "gps" value { } }
  }
]

和論據(jù)(arguments):

example_names: ["input0", "input1"],
features: {
    "kw": VarLenFeature(tf.string),
    "dank": VarLenFeature(tf.int64),
    "gps": VarLenFeature(tf.float32),
}

那么輸出是一個(gè)字典:

{
  "kw": SparseTensor(
      indices=[[0, 0], [0, 1], [1, 0]],
      values=["knit", "big", "emmy"]
      dense_shape=[2, 2]),
  "dank": SparseTensor(
      indices=[[1, 0]],
      values=[42],
      dense_shape=[2, 1]),
  "gps": SparseTensor(
      indices=[],
      values=[],
      dense_shape=[2, 0]),
}

對(duì)于兩個(gè)序列化示例中的密集結(jié)果:

[
  features {
    feature { key: "age" value { int64_list { value: [ 0 ] } } }
    feature { key: "gender" value { bytes_list { value: [ "f" ] } } }
   },
   features {
    feature { key: "age" value { int64_list { value: [] } } }
    feature { key: "gender" value { bytes_list { value: [ "f" ] } } }
  }
]

我們可以使用參數(shù):

example_names: ["input0", "input1"],
features: {
    "age": FixedLenFeature([], dtype=tf.int64, default_value=-1),
    "gender": FixedLenFeature([], dtype=tf.string),
}

預(yù)期的輸出是:

{
  "age": [[0], [-1]],
  "gender": [["f"], ["f"]],
}

示例-3

VarLenFeature 獲得 SparseTensor 的另一種方法是 SparseFeature.例如,給出 serialized 中的兩個(gè) Example 輸入原型:

[
  features {
    feature { key: "val" value { float_list { value: [ 0.5, -1.0 ] } } }
    feature { key: "ix" value { int64_list { value: [ 3, 20 ] } } }
  },
  features {
    feature { key: "val" value { float_list { value: [ 0.0 ] } } }
    feature { key: "ix" value { int64_list { value: [ 42 ] } } }
  }
]

和論據(jù):

example_names: ["input0", "input1"],
features: {
    "sparse": SparseFeature(
        index_key="ix", value_key="val", dtype=tf.float32, size=100),
}

那么輸出是一個(gè)字典:

{
  "sparse": SparseTensor(
      indices=[[0, 3], [0, 20], [1, 42]],
      values=[0.5, -1.0, 0.0]
      dense_shape=[2, 100]),
}

參數(shù):

  • serialized:一個(gè)字符串類型的向量(一維張量),一組二進(jìn)制序列化 Example 原型.
  • features:FixedLenFeature、VarLenFeature 和 SparseFeature 值的字典映射功能鍵.
  • name:此操作的名稱(可選).
  • example_names:一個(gè)字符串類型的向量(一維張量)(可選),批處理中的序列化原型的名稱.

返回:

映射功能鍵到 Tensor 和 SparseTensor 值的字典.

可能引發(fā)的異常:

  • ValueError:如果存在任何功能無效.
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)