web-dev-qa-db-ja.com

2つのテンソルフローデータセットをスタックする方法はありますか?

Tensorflow(Rのrbind関数)で2つのデータセットオブジェクトをスタックしたいと思います。 tfRecordファイルから1つのデータセットAを作成し、numpy配列から1つのデータセットBを作成しました。どちらも同じ変数を持っています。これら2つのデータセットを積み重ねて、より大きなデータセットを作成する方法があるかどうか知っていますか?または、この2つのソースからランダムにデータを読み取るイテレーターを作成するには?

ありがとう

5
Kent930

tf.data.Dataset.concatenate() メソッドは、データセットを操作する場合のtf.stack()の最も近い類似物です。同じ構造の2つのデータセットがある場合(つまり、各コンポーネントのタイプは同じですが、形状が異なる可能性があります):

dataset_1 = tf.data.Dataset.range(10, 20)
dataset_2 = tf.data.Dataset.range(60, 70)

...次のようにそれらを連結できます。

combined_dataset = dataset_1.concatenate(dataset_2)
5
mrry

積み重ねることによって、tf.stack()np.stack()が何をするかを意味する場合:

ランク-Rテンソルのリストを1つのランク-_(R+1)_テンソルにスタックします。

https://www.tensorflow.org/api_docs/python/tf/stack

新しい軸に沿って配列のシーケンスを結合します。

https://docs.scipy.org/doc/numpy/reference/generated/numpy.stack.html

_tf.data.Dataset_に最も近いのはDataset.Zip()だと思います。

_@staticmethod
Zip(datasets)
_

指定されたデータセットを一緒に圧縮することにより、Datasetを作成します。

https://www.tensorflow.org/api_docs/python/tf/data/Dataset?version=stable#Zip

これにより、stack() edテンソルまたは行列と同様に、元のデータセットの共有ディメンションを反復処理することにより、複数のデータセットを同時に反復処理できます。

次に、.map(tf.stack)または.map(lambda *t: tf.stack(t, axis=-1))を使用して、それぞれ前面または背面の新しい次元に沿ってテンソルをスタックすることもできます。

実際にtf.concat()np.concatenate()の機能を実現したい場合は、Dataset.concatenate()を使用します。

0
bers