Tensorflow2.0: Как преобразовать разреженный тензор с рангом (st_input) больше 2 в RaggedTensor? - PullRequest
0 голосов
/ 06 февраля 2020

Я читаю текстовый файл через API данных и преобразовываю текст в TFRecords. Когда я читаю записи построчно, я получаю разреженную матрицу ранга 2, которую легко преобразовать в RaggedTensor с помощью tf.RaggedTensor.from_sparse. Однако, когда я читаю записи в партии размером 10, результирующий разреженный тензор имеет ранг 3. В документации написано, что tf.RaggedTensor.from_sparse работает только с разреженными тензорами ранга 2. Есть ли способ создания RaggedTensors из разреженный тензор ранга 3? Я попытался tf.sparse.reshape и попытался удалить ось = 1. Это было успешно, так как я смог напечатать вывод. Но это кажется немного хакерским sh способом, и я ищу что-то более tenorflow-i sh. Пример для воспроизведения моего случая выглядит следующим образом: -

  1. При чтении tfrecords построчно

    indices = array([[ 0, 0], [ 0, 1], [ 0, 2], [ 0, 3], [ 0, 4], [ 0, 5], [ 0, 6], [ 0, 7], [ 0, 8], [ 0, 9], [ 0, 10]], dtype=int64) values = array([b'What', b'interesting', b'fact', b'about', b'India', b'can', b'you', b'add', b'to', b'my', b'knowledge?'], dtype=object) dense_shape=array([ 1, 11], dtype=int64) tf.RaggedTensor.from_sparse(tf.SparseTensor(indices=indices,values=values,dense_shape=dense_shape))

дает

`<tf.RaggedTensor [[b'What', b'interesting', b'fact', b'about', b'India', b'can', b'you', b'add', b'to', b'my', b'knowledge?']]>`

2. При чтении партии размером 1 (фактический размер партии был 10, но это стало бы слишком громоздким):

`indices=array([[ 0,  0,  0],
       [ 0,  0,  1],
       [ 0,  0,  2],
       [ 0,  0,  3],
       [ 0,  0,  4],
       [ 0,  0,  5],
       [ 0,  0,  6],
       [ 0,  0,  7],
       [ 0,  0,  8],
       [ 0,  0,  9],
       [ 0,  0, 10]], dtype=int64)`<br/>
`values=array([b'What', b'interesting', b'fact', b'about', b'India', b'can',
       b'you', b'add', b'to', b'my', b'knowledge?'], dtype=object)`<br/>
`dense_shape=array([ 1,  1, 11], dtype=int64)`<br/><br/>
`tf.RaggedTensor.from_sparse(tf.SparseTensor(indices=indices,values=values,dense_shape=dense_shape))`

выдает ошибку

`ValueError: rank(st_input) must be 2`

Однако, используя утверждение tf.sparse.reshape(tf.SparseTensor(indices=indices,values=values,dense_shape=dense_shape),shape=[1,11]) устраняет эту проблему.

Извинения за небрежное редактирование.

...