Как получить значение тензора Кераса в TensorFlow 2? - PullRequest
1 голос
/ 06 октября 2019

TF1 имел sess.run() и .eval() для получения значений тензоров - а у Кераса было K.get_value();теперь ни одна из них не работает одинаково (прежние две вообще).

K.eager(K.get_value)(tensor), кажется, работает внутри графа Кераса, выходя из него, и K.get_value(tensor) вне графа - оба с нетерпением по умолчанию с TF2 (который от в прежнем). Однако это не работает, если tensor является бэкэнд-операцией Keras :

import keras.backend as K
def tensor_info(x):
    print(x)
    print("Type: %s" % type(x))
    try:        
        x_value = K.get_value(x)
    except:
        try:    x_value = K.eager(K.get_value)(x)
        except: x_value = x.numpy()
    print("Value: %s" % x_value)  # three methods

ones = K.ones(1)
ones_sqrt = K.sqrt(ones)

tensor_info(ones); print()
tensor_info(ones_sqrt)
<tf.Variable 'Variable:0' shape=(1,) dtype=float32, numpy=array([1.], dtype=float32)>
Type: <class 'tensorflow.python.ops.resource_variable_ops.ResourceVariable'>
Value: [1.]

Tensor("Sqrt:0", shape=(1,), dtype=float32)
Type: <class 'tensorflow.python.framework.ops.Tensor'>
# third print fails w/ below
AttributeError: 'Tensor' object has no attribute 'numpy' 


Это не проблема в TF <2.0. <a href="https://github.com/keras-team/keras/issues/13396" rel="nofollow noreferrer"> Github молчал. Я знаю способы переписать код в качестве обходного пути, но это устранит нейтральность бэкэнда Кераса и сродни tf.keras. Есть ли способ получить значения тензора Keras 2.3 в TensorFlow 2.0 при сохранении нейтральности бэкэнда?

1 Ответ

1 голос
/ 06 октября 2019

Я думаю, что вы хотите K.eval:

>>> v = K.ones(1)
>>> K.eval(v)
array([1.], dtype=float32)
>>> K.eval(K.sqrt(v))
array([1.], dtype=float32)

Обратите внимание, что K.get_value зарезервировано для использования с переменными (например, v здесь)в то время как K.eval работает с любым тензором.

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