我只想在自定义图层内进行一些数字验证。
假设我们有一个非常简单的自定义层:
class test_layer(keras.layers.Layer):
def __init__(self, **kwargs):
super(test_layer, self).__init__(**kwargs)
def build(self, input_shape):
self.w = K.variable(1.)
self._trainable_weights.append(self.w)
super(test_layer, self).build(input_shape)
def call(self, x, **kwargs):
m = x * x # Set break point here
n = self.w * K.sqrt(x)
return m + n
Run Code Online (Sandbox Code Playgroud)
和主程序:
import tensorflow as tf
import keras
import keras.backend as K
input = keras.layers.Input((100,1))
y = test_layer()(input)
model = keras.Model(input,y)
model.predict(np.ones((100,1)))
Run Code Online (Sandbox Code Playgroud)
如果我在该行设置断点调试m = x * x
,程序在执行时会在此处暂停y = test_layer()(input)
,这是因为图形已构建,call()
方法被调用。
但是当我model.predict()
用来赋予它真正的价值,并且想看看它是否正常工作时,它不会在该行停顿m = …
我是Keras的新手。在培训阶段,如何打印中间层或最终层的输出?
我正在尝试调试我的神经网络,并想知道训练过程中各层的行为。为此,我尝试在训练过程中为每一步精确输入和输出一层。
FAQ(https://keras.io/getting-started/faq/#how-can-i-obtain-the-output-of-an-intermediate-layer)具有提取中间层输出以构建另一层的方法模型,但这不是我想要的。我不需要将中间层的输出用作其他层的输入,我只需要打印出它们的值,并可能对其进行图形化/图表化/可视化。
我正在使用Keras 2.1.4