【问题标题】:Get the output of intermediate layer tensorflow获取中间层tensorflow的输出
【发布时间】:2021-06-23 20:13:21
【问题描述】:

我必须在 Tensorflow 中获取中间层的输出,并计算相对于输出的梯度而不是权重。这种方式返回我无,这是获取输出和操作它的正确方法吗? Logits 是包含每一层输出的向量。

with tf.GradientTape(persistent = True) as tape:
     logits.append(mnist_model.layers[0](images, training=True))
     logits.append(mnist_model.layers[1](mnist_model.layers[0].output, training=True))
     logits.append(mnist_model.layers[2](mnist_model.layers[1].output, training=True))
     output = mnist_model(images, training=True)
     loss_value = loss_object(labels, output)
     loss_history.append(loss_value.numpy().mean())

grads0 = tape.gradient(loss_value, logits[0])
grads1 = tape.gradient(loss_value, logits[1])
grads2 = tape.gradient(loss_value, logits[2])

【问题讨论】:

  • 计算梯度而不是权重...?你能在没有输出的情况下重现代码吗?
  • 我的意思是我想计算相对于输出而不是相对于权重的梯度。我不知道我如何计算每一层的输出是否正确。

标签: tensorflow


【解决方案1】:

使用model.get_layer("layer_name")获取中间层的输出并找到下面的示例代码

with tf.GradientTape() as tape:
    mid_layer = mnist_model.get_layer[layer_index].output
    loss = loss_object(labels, mid_layer)

grads = tape.gradient(loss, inp)

使用 layer_index 或 layer_name 来获取所需层的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-16
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多