web-dev-qa-db-ja.com

TensorFlowデータセットからデータ/ラベルを抽出する方法

tensorFlowデータセットを作成して使用する方法の例はたくさんあります。

dataset = tf.data.Dataset.from_tensor_slices((images, labels))

私の質問は、TFデータセットからデータ/ラベルを派手な形式で取得する方法ですか?言い換えると、上の行の逆の操作が必要になります。つまり、TFデータセットがあり、そこから画像とラベルを取得したいのです。

6
Valentin

Tf.data.Datasetが_train_dataset_と呼ばれ、_eager_execution_がオンの場合、次のように画像とラベルを取得できます。

_for images, labels in train_dataset.take(1):  # only take first element of dataset
    numpy_images = images.numpy()
    numpy_labels = labels.numpy()
_
  • インライン演算.numpy()はtf.Tensorsをnumpy配列に変換します
  • データセットの要素をさらに取得したい場合は、 take メソッド内の数値を増やしてください。すべての要素が必要な場合は、_-1_を挿入するだけです
2
Tommaso Di Noto

ここに問題に対する私の独自の解決策があります:

def dataset2numpy(dataset, steps=1):
    "Helper function to get data/labels back from TF dataset"
    iterator = dataset.make_one_shot_iterator()
    next_val = iterator.get_next()
    with tf.Session() as sess:
        for _ in range(steps):
           inputs, labels = sess.run(next_val)
           yield inputs, labels

この関数はデータセットバッチの入力/ラベルを生成することに注意してください。ステップは、データセットから取り出されるバッチの数を制御します。

1
Valentin

ここに良い例があると思います:

https://colab.research.google.com/github/tensorflow/datasets/blob/master/docs/overview.ipynb#scrollTo=BC4pEXtkp4K-

import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
import tensorflow_datasets as tfds

# where mnsit train is a tf dataset
mnist_train = tfds.load(name="mnist", split=tfds.Split.TRAIN)
assert isinstance(mnist_train, tf.data.Dataset)

mnist_example, = mnist_train.take(1)
image, label = mnist_example["image"], mnist_example["label"]

plt.imshow(image.numpy()[:, :, 0].astype(np.float32), cmap=plt.get_cmap("gray"))
print("Label: %d" % label.numpy())

したがって、データセットの個々のコンポーネントには、辞書のようにアクセスできます。おそらく異なるデータセットには異なるフィールド名があります(ボストンの住宅には画像と値はありませんが、「機能」と「ターゲット」または「価格」がある場合があります:

cnn = tfds.load(name="cnn_dailymail", split=tfds.Split.TRAIN)
assert isinstance(cnn, tf.data.Dataset)
cnn_ex, = cnn.take(1)
print(cnn_ex)

内部に派手な文字列を持つキー['article'、 'highlight']を持つdict()を返します。

1
Dylan