Python 如何获取张量对象的值

Python 如何获取张量对象的值,python,tensorflow,keras,Python,Tensorflow,Keras,我有下面的张量对象,它是a=model.layers[3]的outpur。输出此代码 a = <tf.Tensor 'dense_20/Softmax:0' shape=(None, 3) dtype=float32> 我也尝试了evala方法,得到了同样的上述错误 使用a.eval时,出现以下错误: AttributeError: 'Tensor' object has no attribute 'numpy' ValueError: Cannot evaluate tenso

我有下面的张量对象,它是a=model.layers[3]的outpur。输出此代码

a = <tf.Tensor 'dense_20/Softmax:0' shape=(None, 3) dtype=float32>
我也尝试了evala方法,得到了同样的上述错误

使用a.eval时,出现以下错误:

AttributeError: 'Tensor' object has no attribute 'numpy'
ValueError: Cannot evaluate tensor using `eval()`: No default session is registered. Use `with sess.as_default()` or pass an explicit session to `eval(session=sess)`
RuntimeError: The Session graph is empty.  Add operations to the graph before calling run().
我也尝试过以下方法:

with tf.compat.v1.Session() as sess:
    a=model.layers[3].output
    print(sess.run(a))
    sess.close()
并获得以下错误:

AttributeError: 'Tensor' object has no attribute 'numpy'
ValueError: Cannot evaluate tensor using `eval()`: No default session is registered. Use `with sess.as_default()` or pass an explicit session to `eval(session=sess)`
RuntimeError: The Session graph is empty.  Add operations to the graph before calling run().
我试过很多东西,但没有得到答案


我正在研究google colab,tensorflow=2.2.0,keras=2.3.1

为了评估keras模型中任意层的输出,您需要确保其所有输入都可用。下面是一个示例代码,它使用一个虚拟模型来显示相同的内容。该代码应在TF1.x和TF2.x中工作。请注意,这里使用了Keras函数来摆脱处理tensorflow会话的锅炉板代码

import tensorflow as tf
print('TensorFlow: ', tf.__version__, end='\n\n')

input_layer = tf.keras.Input(shape=[100])
x = tf.keras.layers.Dense(16, activation='relu')(input_layer)
x = tf.keras.layers.Dense(64, activation='relu')(x)
x = tf.keras.layers.Dense(32, activation='relu')(x)
x = tf.keras.layers.Dense(10, activation='relu')(x)
output_layer = tf.keras.layers.Dense(5, activation='softmax')(x)

model = tf.keras.Model(inputs=[input_layer], outputs=[output_layer])

a = model.layers[3].output
print(a)

fn = tf.keras.backend.function(input_layer, a)  # create a Keras Function
random_input = tf.random.normal([1, 100])  # random noise

a_eval = fn(random_input)
print('\nLayer Output:\n', a_eval)
输出:

TensorFlow:  2.3.0-dev20200611

Tensor("dense_73/Identity:0", shape=(None, 32), dtype=float32)

Layer Output:
 [[0.         0.         0.46475422 0.0961322  0.         0.
  0.23016977 0.         0.         0.05861767 0.03298267 0.11953808
  0.         0.         0.97043467 0.         0.         0.6384926
  0.         0.         0.         0.2346505  0.1822727  0.0145395
  0.08411474 0.         0.         0.37601566 0.         0.
  0.29435986 0.44069782]]

您需要提供更多的上下文,比如一个我们可以看到错误的最小示例。根据您是处于图形模式还是渴望模式,您可以做不同的事情,这取决于您尝试从何处获取值。也许可以帮助你。请提供一个简单的例子来重现你的问题。