Как визуализировать изученные обученные веса в модели керас? - PullRequest
1 голос
/ 19 мая 2019

Я хотел бы увидеть значения веса моей модели керас, пригодные для обучения, с целью узнать, существуют ли большие пятна нулей или единиц после тренировки.

Мой керас использует бэкэнд тензорного потока. Это работает в образе докера и запускается из блокнота 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 позволяет мне увидеть лежащие в основе переменные тензорного потока.

[<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 или бесконечность?

1 Ответ

1 голос
/ 19 мая 2019

Самый простой способ - это вычислить весовые тензоры:

from keras import backend as K

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

K.eval(w) вернет пустой массив, так что вы можете выполнить обычные проверки, например:

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

, и вы можете использовать np.any или np.argwhere для выделения проблемных значений.

Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...