如何在keras中查看图层输出的张量值

时间:2019-05-22 18:15:32

标签: tensorflow keras keras-layer autoencoder tf.keras

我有一个Seq2Seq模型。我有兴趣在每次迭代中打印出编码器输出的矩阵值。

例如,由于encoder中矩阵的维度为(?,20)epoch =5,并且在每个时期中,都有10个迭代, 我想查看每个10的维度(?,20)的{​​{1}}矩阵。

我以here的身份进入了几个链接,但它仍然没有打印出值矩阵。 使用上面链接中提到的代码:

epoch

我知道了

import keras.backend as K

k_value = K.print_tensor(encoded)
print(k_value)

有没有一种简单的方法来显示KERAS中每一层的张量值?

谢谢!

更新1

通过尝试以下代码:Tensor("Print:0", shape=(?, 20), dtype=float32) 会引发此错误:

K_value = K.eval(encoded)

1 个答案:

答案 0 :(得分:0)

打印张量的非常简单的方法:

from keras import backend as K

k_value = K.eval(tensor)
print(k_value)

更新1

创建一个回调以在每个纪元末打印:

class callback(Callback):
    def __init__(self, model, X_train):
        self.model = model
        self.x = X_train

    def on_train_begin(self, logs={}):
        return

    def on_train_end(self, logs={}):
        return

    def on_epoch_begin(self, epoch, logs={}):
        return

    def on_epoch_end(self, epoch, logs={}):
        inp = model.input  # input placeholder
        outputs = model.layers[N].output  # get output of N's layer
        functors = K.function([inp, K.learning_phase()], [outputs])
        layer_outs = functors([self.x, 1.])
        print('\r OUTPUT TENSOR : %s' % layer_outs)

        return

    def on_batch_begin(self, batch, logs={}):
        return

    def on_batch_end(self, batch, logs={}):
        return

像这样在fit()方法中调用此函数:

callbacks=[callback(model = model, X_train = X_train)])

灵感来自Keras, How to get the output of each layer?

希望这将最终对您有所帮助!