gpt4 book ai didi

python - 以急切模式访问 Tensor-flow 2.0 中中间层的输出

转载 作者:行者123 更新时间:2023-12-02 19:44:48 26 4
gpt4 key购买 nike

我有在 Tensor-flow 2.0 上构建的 CNN。我需要访问中间层的输出。我正在研究其他类似的 stackoverflow 问题,但所有问题都有涉及 Keras 顺序模型的解决方案。

我试过使用 model.layers[index].output 但我得到了

Layer conv2d has no inbound nodes.

我可以在这里发布我的代码(超长),但我相信即使没有,也有人可以指出我如何在急切模式下仅使用 Tensorflow 2.0 来完成。

最佳答案

我在寻找答案时偶然发现了这个问题,我花了一些时间才弄明白,因为我默认使用 TF 2.0 中的模型子类化 API(如此处 https://www.tensorflow.org/tutorials/quickstart/advanced 所示)。如果有人处于类似情况,您需要做的就是将所需的中间输出分配为类的属性。然后保留没有 @tf.function 装饰器的 test_step 并创建其装饰副本,比如 val_step,以便在训练期间有效地进行验证性能的内部计算。作为一个简短的例子,我相应地修改了链接中教程的一些功能。我假设我们需要在展平后访问输出。

def call(self, x):
x = self.conv1(x)
x = self.flatten(x)
self.intermediate=x #assign it as an object attribute for accessing later
x = self.d1(x)
return self.d2(x)

#Remove @tf.function decorator from test_step for prediction
def test_step(images, labels):
predictions = model(images, training=False)
t_loss = loss_object(labels, predictions)
test_loss(t_loss)
test_accuracy(labels, predictions)
return

#Create a decorated val_step for object's internal use during training
@tf.function
def val_step(images, labels):
return test_step(images, labels)

现在,当您在训练后运行 model.predict() 时,使用未修饰的测试步骤,您可以使用 model.intermediate 访问中间输出,这将是一个 EagerTensor,其值仅通过 model.intermediate.numpy( ).但是,如果您不从 test_step 中删除 @tf_function 装饰器,这将返回一个张量,其值不是那么容易获得。

关于python - 以急切模式访问 Tensor-flow 2.0 中中间层的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59493222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com