TensorFlow函數(shù)教程:tf.io.parse_example

2019-02-21 16:21 更新

tf.io.parse_example函數(shù)

別名:

  • tf.io.parse_example
  • tf.parse_example
tf.io.parse_example(
    serialized,
    features,
    name=None,
    example_names=None
)

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

將Example原型解析為張量的dict。

解析serialized中給出的一些序列化Example原型。我們將serialized稱為具有batch_size的批處理,單個Example原型的許多條目。

example_names可能包含相應(yīng)序列化protos的描述性名稱。這些可能對調(diào)試有用,但它們對輸出沒有影響。如果不是None,則example_names的長度必須與serialized的長度相同。

此操作將序列化示例解析為字典,將鍵映射到Tensor 和SparseTensor對象。features是從鍵到VarLenFeature,SparseFeature和FixedLenFeature對象的一個dict。每個VarLenFeature和SparseFeature都映射到SparseTensor,并且每個FixedLenFeature都映射到Tensor。

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

每個SparseFeature映射到指定類型的SparseTensor,表示dense_shape [batch_size] + SparseFeature.size的Tensor。它values來自帶有value_key鍵的示例中的功能。values[i]來自批處理輸入batch的示例的功能中的位置k。該位置信息在indices[i]中記錄為[batch, index_0, index_1, ...],其中index_j是具有鍵SparseFeature.index_key [j]的示例中的功能的第k個值。換句話說,我們將SparseTensorby維度的索引(指示批處理輸入的第一個索引除外)拆分為Example的不同的特征。由于其復(fù)雜性,VarLenFeature應(yīng)盡可能優(yōu)先于SparseFeature。

每個FixedLenFeature df映射到指定類型(如果未指定,則為tf.float32)的Tensor并且具有shape (serialized.size(),) + df.shape。

具有default_value的FixedLenFeature條目是可選的。如果沒有默認值,serialized中的任何示例都缺少該Feature,我們將失敗。

每個FixedLenSequenceFeature df映射到指定類型的Tensor(如果未指定則為tf.float32)并且具有shape (serialized.size(), None) + df.shape。serialized中的所有示例將在第二維上使用default_value填充。

例子:

例如,如果需要tf.float32 VarLenFeature ft,并提供三個序列化Example:

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)) }

如果使用default_value = -1.0代替FixedLenSequenceFeature,并且使用shape=[],那么輸出將如下所示:

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

給出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 { } }
  }
]

和參數(shù):

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

然后輸出是一個字典:

{
  "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]),
}

對于兩個序列化Example的密集結(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"]],
}

用于獲取SparseTensor的VarLenFeature的替代方法是SparseFeature。例如,給定兩個serialized的示例輸入原型:

[
  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 ] } } }
  }
]

和參數(shù):

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

然后輸出是一個字典:

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

參數(shù):

  • serialized:一個字符串的向量(1-D Tensor),一批二進制序列化的Example原型。
  • features:一個dict映射功能鍵到FixedLenFeature, VarLenFeature和SparseFeature的值。
  • name:此操作的名稱(可選)。
  • example_names:字符串的向量(1-D Tensor)(可選),批處理中序列化原型的名稱。

返回:

一個dict映射功能鍵到Tensor和SparseTensor值。

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號