不均等な形状の配列のリストをTensorflow2データセットに変換する:ValueError:長方形以外のPythonシーケンスをTensorに変換できません

ニコラス・ゲルヴェ

不均等な形状の配列のリストの形式でデータをトークン化しました

array([array([1179,    6,  208,    2, 1625,   92,    9, 3870,    3, 2136,  435,
          5, 2453, 2180,   44,    1,  226,  166,    3, 4409,   49, 6728,
         ...
         10,   17, 1396,  106, 8002, 7968,  111,   33, 1130,   60,  181,
       7988, 7974, 7970])], dtype=object)

それぞれのターゲットで:

Out[74]: array([0, 0, 0, ..., 0, 0, 1], dtype=object)

それらをパッド付きに変換しようとしていますが、tf.data.Dataset()等しくない形状をテンソルに変換することはできません。このエラーが発生します:

ValueError: Can't convert non-rectangular Python sequence to Tensor.

完全なコードはここにあります。私の出発点が後だと仮定しますy = ...

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import tensorflow as tf
import tensorflow_datasets as tfds
import numpy as np

(train_data, test_data) = tfds.load('imdb_reviews/subwords8k',
                                    split=(tfds.Split.TRAIN, tfds.Split.TEST),
                                    as_supervised=True)

x = np.array(list(train_data.as_numpy_iterator()))[:, 0]
y = np.array(list(train_data.as_numpy_iterator()))[:, 1]


train_tensor = tf.data.Dataset.from_tensor_slices((x.tolist(), y))\
    .padded_batch(batch_size=8, padded_shapes=([None], ()))

これをパッド付きバッチテンソルに変えるための私のオプションは何ですか?

今日

データがNumpy配列またはPythonリストに保存されている場合は、tf.data.Dataset.from_generatorメソッドを使用してデータセットを作成し、バッチをパディングできます

train_batches = tf.data.Dataset.from_generator(
    lambda: iter(zip(x, y)), 
    output_types=(tf.int64, tf.int64)
).padded_batch(
    batch_size=32,
    padded_shapes=([None], ())
)

ただし、tensorflow_datasets.load関数を使用as_numpy_iteratorしている場合は、を使用してデータとラベルを分離し、それらをデータセットに戻す必要はありませんそれは冗長で非効率的です。によって返されるオブジェクトは、tensorflow_datasets.loadすでにtf.data.Dataset。のインスタンスですだから、あなたpadded_batchはそれらに使用する必要があります:

train_batches = train_data.padded_batch(batch_size=32, padded_shapes=([None], []))
test_batches = test_data.padded_batch(batch_size=32, padded_shapes=([None], []))

TensorFlow 2.2以降では、padded_shapesすべての軸をバッチの最長にパディングするだけの場合(つまり、デフォルトの動作)引数を指定する必要がなくなったことに注意してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ