如何在 gpflow 中打印输出(张量值、形状)?
How can I print output (tensor values, shapes) in gpflow?
我正尝试在 gpflow
内开发一个新模型。为了调试它,我需要在图形执行期间知道张量的形状和值。
我尝试了以下基于在 tensorflow
中打印张量值的方法,但没有任何内容打印到控制台。
import numpy as np
import sys
import gpflow
from gpflow.mean_functions import MeanFunction
from gpflow.decors import params_as_tensors
class Log(MeanFunction):
"""
:math:`y_i = \log(x_i)`
"""
def __init__(self):
MeanFunction.__init__(self)
@params_as_tensors
def __call__(self, X):
# I want to figure out the shape of X here
tf.print(tf.shape(X), output_stream=sys.stdout)
# Returns the natural logarithm of the input
return tf.log(X)
# Test gpflow implementation
sess = tf.InteractiveSession()
with sess.as_default(), sess.graph.as_default():
X = np.random.uniform(size=[100, 1])
y = np.random.uniform(size=[100, 1])
m = gpflow.models.GPR(X=X, Y=y, mean_function=Log(), kern=gpflow.kernels.RBF(input_dim=1))
你走在正确的轨道上。根据 TensorFlow 文档 [1],您需要将 tf.print()
包装在 tf.control_dependencies()
上下文管理器中,以确保它在图形模型中是 运行。 GPflow 目前在图形模型中工作。 GPflow 2.0,正在开发中,将允许在 eager 模式下使用。
@params_as_tensors
def __call__(self, X):
# I want to figure out the shape of X here
print_op = tf.print(tf.shape(X), output_stream=sys.stdout)
with tf.control_dependencies([print_op]):
log_calc = tf.log(X)
# Returns the natural logarithm of the input
return log_calc
我正尝试在 gpflow
内开发一个新模型。为了调试它,我需要在图形执行期间知道张量的形状和值。
我尝试了以下基于在 tensorflow
中打印张量值的方法,但没有任何内容打印到控制台。
import numpy as np
import sys
import gpflow
from gpflow.mean_functions import MeanFunction
from gpflow.decors import params_as_tensors
class Log(MeanFunction):
"""
:math:`y_i = \log(x_i)`
"""
def __init__(self):
MeanFunction.__init__(self)
@params_as_tensors
def __call__(self, X):
# I want to figure out the shape of X here
tf.print(tf.shape(X), output_stream=sys.stdout)
# Returns the natural logarithm of the input
return tf.log(X)
# Test gpflow implementation
sess = tf.InteractiveSession()
with sess.as_default(), sess.graph.as_default():
X = np.random.uniform(size=[100, 1])
y = np.random.uniform(size=[100, 1])
m = gpflow.models.GPR(X=X, Y=y, mean_function=Log(), kern=gpflow.kernels.RBF(input_dim=1))
你走在正确的轨道上。根据 TensorFlow 文档 [1],您需要将 tf.print()
包装在 tf.control_dependencies()
上下文管理器中,以确保它在图形模型中是 运行。 GPflow 目前在图形模型中工作。 GPflow 2.0,正在开发中,将允许在 eager 模式下使用。
@params_as_tensors
def __call__(self, X):
# I want to figure out the shape of X here
print_op = tf.print(tf.shape(X), output_stream=sys.stdout)
with tf.control_dependencies([print_op]):
log_calc = tf.log(X)
# Returns the natural logarithm of the input
return log_calc