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 при сохранении нейтральности бэкэнда?