【问题标题】:How to visualize the learned trained weights in a keras model?如何在 keras 模型中可视化学习的训练权重?
【发布时间】:2019-10-06 02:35:39
【问题描述】:

我想查看我的 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 或无穷大?

【问题讨论】:

    标签: python-3.x tensorflow keras jupyter-notebook


    【解决方案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.any 或np.argwhere 来找出有问题的值。

    干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多