tenors.numpy () не работает в tenorflow.data.Dataset. Выдает ошибку: AttributeError: у объекта 'Tensor' нет атрибута 'numpy' - PullRequest
1 голос
/ 19 июня 2019

Я использую tenorflow 2.0.0-бета1 и Python 3.7

Сначала рассмотрим следующий фрагмент кода, где тензор.numpy () работает правильно:

import tensorflow as tf
import numpy as np

np.save('data.npy',np.ones(1024))

def func(mystr): 
    return np.load(mystr.numpy())

mystring = tf.constant('data.npy')
print(func(mystring))

Приведенный выше код работает правильно и выводит [1. 1. 1. ... 1. 1. 1.].

Теперь рассмотрим следующий код, в котором тензор.numpy () не работает.

import tensorflow as tf
import numpy as np

np.save('data.npy',np.ones(1024))

def func(mystr):
    return np.load(mystr.numpy())

mystring = tf.constant('data.npy')
data = tf.data.Dataset.from_tensor_slices([mystring])
data.map(func,1)

Приведенный выше код выдает следующую ошибку AttributeError: 'Tensor' object has no attribute 'numpy'

Я не могу понять, почему тензор.numpy () не работает в случае tf.data.Dataset.map ()

EDIT

Следующий параграф разъясняет мою цель:

У меня есть папка набора данных, которая содержит миллионы пар данных (изображения, временные ряды). Весь набор данных не помещается в память, поэтому я использую tf.data.Dataset.map (func). Внутри функции func () я хочу загрузить пустой файл, который содержит временные ряды, а также загрузить изображение. Для загрузки изображения в встроенном потоке есть встроенные функции, такие как tf.io.read_file и tf.image.decode_jpeg, которые принимают тензор строки. Но np.load () не принимает строковый тензор. Вот почему я хочу преобразовать тензор строки в стандартную строку Python.

1 Ответ

1 голос
/ 19 июня 2019

Разница в том, что первый пример выполняется с нетерпением, но tf.data.Dataset изначально лениво оцениваются (по уважительной причине).

Набор данных может использоваться для представления произвольно больших (и даже бесконечных) наборов данных, поэтомуони оцениваются только внутри графа вычислений, чтобы обеспечить возможность передачи данных в виде фрагментов.

Это означает, что нетерпеливо выполняемые методы, такие как numpy(), недоступны в конвейере набора данных.

...