Значения тензора печати TF 2.0 - PullRequest
2 голосов
/ 22 марта 2019

Я изучаю новейшую версию Tensorflow (2.0), и я попытался запустить простой код для нарезки матрицы.Используя функцию декоратора @ tf.function, я создал следующий класс:

class Data:
def __init__(self):
    pass

def back_to_zero(self, input):
    time = tf.slice(input, [0,0], [-1,1])
    new_time = time - time[0][0]
    return new_time

@tf.function
def load_data(self, inputs):
    new_x = self.back_to_zero(inputs)
    print(new_x)

Поэтому, когда я запускаю код, используя пустую матрицу, я не могу получить числа.

time = np.linspace(0,10,20)
magntiudes = np.random.normal(0,1,size=20)
x = np.vstack([time, magntiudes]).T


d = Data()
d.load_data(x)

Вывод:

Tensor("sub:0", shape=(20, 1), dtype=float64)

Мне нужно получить этот тензор в формате numpy, но в TF 2.0 нет класса tf.Session для использования методов run () или eval ().

Спасибоза любую помощь, которую вы можете предложить мне!

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Проблема в том, что вы не можете получить значения тензора непосредственно внутри графика.Таким образом, вы либо делаете, как @edkeveked предложил использовать tf.print, либо измените свой код следующим образом:

class Data:
    def __init__(self):
        pass

    def back_to_zero(self, input):
        time = tf.slice(input, [0,0], [-1,1])
        new_time = time - time[0][0]

        return new_time

    @tf.function
    def load_data(self, inputs):
        new_x = self.back_to_zero(inputs)

        return new_x

time = np.linspace(0,10,20)
magntiudes = np.random.normal(0,1,size=20)
x = np.vstack([time, magntiudes]).T

d = Data()
data = d.load_data(x)
print(data.numpy())
0 голосов
/ 22 марта 2019

Внутри графика, указанного декоратором @tf.function, вы можете использовать tf.print для печати значений вашего тензора.

tf.print(new_x)

Вот как может быть кодпереписан

class Data:
    def __init__(self):
        pass

    def back_to_zero(self, input):
        time = tf.slice(input, [0,0], [-1,1])
        new_time = time - time[0][0]
        return new_time

    @tf.function
    def load_data(self, inputs):
        new_x = self.back_to_zero(inputs)
        tf.print(new_x) # print inside the graph context
        return new_x

time = np.linspace(0,10,20)
magntiudes = np.random.normal(0,1,size=20)
x = np.vstack([time, magntiudes]).T

d = Data()
data = d.load_data(x)
print(data) # print outside the graph context

тип тензора вне контекста tf.decorator имеет тип tensorflow.python.framework.ops.EagerTensor.Чтобы преобразовать его в массив numpy, вы можете использовать data.numpy()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...