有没有办法在Keras训练时调整张量内的值?

时间:2018-02-02 03:28:10

标签: tensorflow keras

我正在尝试使用TensorFlow后端在Keras上实现我自己的图层。

训练期间有没有办法在张量内打印价值? 例如,我想在以下代码中打印xself.kernel

class MyLayer(Layer):

    def __init__(self, output_dim, **kwargs):
        self.output_dim = output_dim
        super(MyLayer, self).__init__(**kwargs)

    def build(self, input_shape):
        # Create a trainable weight variable for this layer.
        self.kernel = self.add_weight(name='kernel', 
                                      shape=(input_shape[1], self.output_dim),
                                      initializer='uniform',
                                      trainable=True)
        super(MyLayer, self).build(input_shape)

    def call(self, x):

        # print x
        # print self.kernel

        return K.dot(x, self.kernel)

    def compute_output_shape(self, input_shape):
        return (input_shape[0], self.output_dim)

2 个答案:

答案 0 :(得分:1)

您可以使用keras.backend.print_tensor,这只是一个身份转换,具有打印张量值的副作用,以及可选的消息。例如:

import keras.backend as K

def call(self, x):

    return K.dot(K.print_tensor(x, message='Value of x'),
                 K.print_tensor(self.kernel, 
                                message='Value of kernel'))

有关详细信息,请参阅https://keras.io/backend/#print_tensor

答案 1 :(得分:0)

在使用TensorFlow后端时,您也可以使用tf.print

def call(self, x):

    tf.print(x)
    tf.print(self.kernel) 

    return K.dot(x, self.kernel)