如何在keras模型中可视化学习过的训练重量?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (8)

我希望看到我的keras模型的可训练重量值,目标是在训练后是否存在零或1的大块。

我的keras正在使用tensorflow后端。这是在一个docker镜像中运行,并从一个jupyter笔记本运行。

这是我走了多远。

print(model.summary())将生成所有可训练参数的列表。

_____________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         (None, 512, 512, 3)       0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 512, 512, 16)      448       
_________________________________________________________________
activation_1 (Activation)    (None, 512, 512, 16)      0         
_________________________________________________________________
batch_normalization_1 (Batch (None, 512, 512, 16)      64        
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 256, 256, 16)      0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 256, 256, 32)      4640  

model.trainable_weights让我看到底层的tensorflow变量。

[<tf.Variable 'conv2d_1/kernel:0' shape=(3, 3, 3, 16) dtype=float32_ref>,
 <tf.Variable 'conv2d_1/bias:0' shape=(16,) dtype=float32_ref>,
 <tf.Variable 'batch_normalization_1/gamma:0' shape=(16,) dtype=float32_ref>,
 <tf.Variable 'batch_normalization_1/beta:0' shape=(16,) dtype=float32_ref>,
 <tf.Variable 'conv2d_2/kernel:0' shape=(3, 3, 16, 32) dtype=float32_ref>,
 <tf.Variable 'conv2d_2/bias:0' shape=(32,) dtype=float32_ref>,

我如何打印这些变量的值,看看有多少得到像0,1或无穷大的疯狂值?

提问于
用户回答回答于

最简单的方法是评估重量张量:

from keras import backend as K

for w in model.trainable_weights:
    print(K.eval(w))

K.eval(w) 将返回一个numpy数组,因此您可以执行常规检查,例如:

np.isnan(w)
np.isinf(w)
w == 0
w == 1

并且您可以使用np.anynp.argwhere单独列出有问题的值。

干杯

扫码关注云+社区

领取腾讯云代金券