python - 在张量流版本 > 2.0 中打印张量
问题描述
我是新来的keras
和tensorflow
。在 google colab 中运行以下代码会打印以下内容:
TF Version: 2.2.0
Keras Version: 2.3.1
'float32' # the type of tf.keras.backend.dtype(loss)
我有兴趣打印 , 的layer_output
值loss
。Tensor flow
以上版本2.0
不需要session
. 但是我仍然在打印时遇到错误layer_output
,loss
......任何想法都会有助于如何打印这些张量中包含的实际值
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)
解决方案
要打印中间层的激活,您必须传入输入图像,这可以使用方便地完成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)
推荐阅读
- python - 捕获雨水:蛮力方法中的错误
- r - 使用 dplyr 和 paste0 汇总和整理结果后没有返回记录
- javascript - 猫鼬等待承诺错误
- python - 添加数组字段 OperationalError
- perl - 如何使用 Perl 根据它们的差异结果将目录中的文件排序到不同的文件夹中
- html - 离子图像未在第一页加载时显示
- algorithm - 我们是根据计算模型进行算法分析,还是根据“常识”进行分析?
- ios - 自定义导航项未显示在顶级视图控制器上
- javascript - slickslider (unslick) 响应式
- bash - bash脚本中`-exec mv -f`的含义