首页 > 解决方案 > 在张量流版本 > 2.0 中打印张量

问题描述

我是新来的kerastensorflow。在 google colab 中运行以下代码会打印以下内容:

TF Version:  2.2.0
Keras Version:  2.3.1
'float32' # the type of tf.keras.backend.dtype(loss)

我有兴趣打印 , 的layer_outputlossTensor flow以上版本2.0不需要session. 但是我仍然在打印时遇到错误layer_outputloss......任何想法都会有助于如何打印这些张量中包含的实际值

import keras
from keras.applications import VGG16
from keras import backend as K
import tensorflow as tf


print("TF Version: ", tf.__version__)
print("Keras Version: ",keras.__version__)

model = VGG16(weights='imagenet',
              include_top=False)

layer_name = 'block3_conv1'
filter_index = 0

layer_output = model.get_layer(layer_name).output
tf.keras.backend.dtype(layer_output)
loss = K.mean(layer_output[:, :, :, filter_index])
tf.keras.backend.dtype(loss)
# tf.print(loss)

标签: pythontensorflowkeras

解决方案


要打印中间层的激活,您必须传入输入图像,这可以使用方便地完成keras.backend.function

import tensorflow as tf

model = tf.keras.applications.VGG16(weights='imagenet',
              include_top=False)

layer_output = model.get_layer(layer_name).output
fn = tf.keras.backend.function(model.input, layer_output)
random_image = tf.random.uniform([1, 224, 224, 3])

output = fn(random_image)
print(output.shape)

输出:

(1, 56, 56, 256)

但是,如果您只想检查实际存储的层,您可以只打印卷积滤波器的权重,这就是您的方法

layer_name = 'block3_conv1'
filter_index = 0
conv_filters = model.get_layer(layer_name).kernel
loss = tf.keras.backend.mean(conv_filters[:, :, :, filter_index])
print(loss)

输出:

tf.Tensor(-0.0004023569, shape=(), dtype=float32)

推荐阅读