Python 访问在TF 2.0中未明确显示为层的Keras模型的中间张量

Python 访问在TF 2.0中未明确显示为层的Keras模型的中间张量,python,tensorflow,keras,tensorflow2.0,Python,Tensorflow,Keras,Tensorflow2.0,在Keras模型中有可能获得激活前张量吗?例如,给定此模型: 将tensorflow导入为tf 图像=tf.keras.Input(形状=[2242243],批次大小=1) vgg19=tf.keras.applications.vgg19(包括_top=False,weights='imagenet',input_tensor=image,input_shape=image.shape[1:],pooling=None) 访问层的常用方法是: intermediate\u layer\u m

在Keras模型中有可能获得激活前张量吗?例如,给定此模型:

将tensorflow导入为tf
图像=tf.keras.Input(形状=[2242243],批次大小=1)
vgg19=tf.keras.applications.vgg19(包括_top=False,weights='imagenet',input_tensor=image,input_shape=image.shape[1:],pooling=None)
访问层的常用方法是:

intermediate\u layer\u model=tf.keras.models.model(输入=图像,输出=[vgg19.get\u layer('block1\u conv2').output])
中间层模型摘要()
这为一个层提供了ReLU输出,而我想要ReLU输入。我试着这样做:

graph=tf.function(vgg19[tf.TensorSpec.from_tensor(image)]).get_concrete_function().graph
outputs=[graph.get_tensor_by_name(tname)for tname in[
“vgg19/block4_conv3/BiasAdd:0”,
“vgg19/block4_conv4/BiasAdd:0”,
'vgg19/区块5_conv1/BiasAdd:0'
]]
中间层模型=tf.keras.models.model(输入=图像,输出=输出)
中间层模型摘要()
但是我得到了错误

ValueError:未知图形。流产。
我发现的唯一解决方法是编辑模型文件以手动公开中间层,将每一层如下所示:

x=layers.Conv2D(256,(3,3),activation=“relu”,padding=“same”,name=“block3\u conv1”)(x)
分为两层,第一层可在激活前访问:

x=layers.Conv2D(256,(3,3),activation=None,padding=“same”,name=“block3\u conv1”)(x)
x=layers.ReLU(name=“block3\u conv1\u ReLU”)(x)

有没有一种方法可以访问模型中的预激活张量,而无需编辑Tensorflow 2源代码,或者恢复到Tensorflow 1,它可以完全灵活地访问中间产物?

以获得每一层的输出。您必须定义一个keras函数,并为每个层计算它

请参考如下所示的代码

from tensorflow.keras import backend as K

inp = model.input                                           # input 
outputs = [layer.output for layer in model.layers]          # all layer outputs
functors = [K.function([inp], [out]) for out in outputs]    # evaluation functions

有关这方面的更多详细信息,请参阅。

以获取每层的输出。您必须定义一个keras函数,并为每个层计算它

请参考如下所示的代码

from tensorflow.keras import backend as K

inp = model.input                                           # input 
outputs = [layer.output for layer in model.layers]          # all layer outputs
functors = [K.function([inp], [out]) for out in outputs]    # evaluation functions

有关此问题的更多详细信息,请参阅。

是否回答了您的问题?该解决方案正是我所不具备的。这对回复那篇文章的人也不起作用,但他们得到了一个不同的错误。回答了你的问题吗?这个解决方案正是对我不起作用的。这对回复该帖子的人也不起作用,但他们会得到不同的错误。