【发布时间】:2019-01-11 08:43:33
【问题描述】:
我只想在自定义层内做一些数值验证。
假设我们有一个非常简单的自定义层:
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
还有主程序:
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)))
如果我在m = x * x这一行设置断点调试,程序在执行y = test_layer()(input)的时候会在这里暂停,这是因为图建好了,调用了call()方法。
但是当我使用model.predict() 赋予它真正的价值,并想看看它是否正常工作时,它不会在m = x * x 行暂停
我的问题是:
call()方法是否仅在构建计算图时调用? (喂真值时不会调用?)如何在层内调试(或在何处插入断点)以在输入实值时查看变量的值?
【问题讨论】:
标签: python tensorflow keras pycharm