Python 在Tensorboard/中添加箱线图的回调无法在\u batch\u end中使用.numpy()
我想在Tensorboard中添加一个箱线图,显示训练期间模型返回的最终值。尽管我已经强制执行了渴望执行,但我无法实现这一点,因为我无法访问批处理端上的Python 在Tensorboard/中添加箱线图的回调无法在\u batch\u end中使用.numpy(),python,numpy,tensorflow,keras,Python,Numpy,Tensorflow,Keras,我想在Tensorboard中添加一个箱线图,显示训练期间模型返回的最终值。尽管我已经强制执行了渴望执行,但我无法实现这一点,因为我无法访问批处理端上的方法中的模型输出值 MWE: 你还没问过问题。Keras模型内部并不急切。这就像一个静态函数,您需要有一个自定义的训练循环来获取该值或在批处理中调用predict。第一个会表现得更好。我曾经在tf1.13中使用kwargs在模型中进行过某种黑客攻击。编译以传入获取atf.assign(callback.tensor,model.output),但
方法中的模型输出值
MWE:
你还没问过问题。Keras模型内部并不急切。这就像一个静态函数,您需要有一个自定义的训练循环来获取该值或在批处理中调用predict。第一个会表现得更好。我曾经在tf1.13中使用kwargs在模型中进行过某种黑客攻击。编译以传入获取atf.assign(callback.tensor,model.output)
,但我现在无法做到这一点。
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.backends.backend_agg import FigureCanvasAgg
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Input, Conv2D, GlobalAvgPool2D, Dense
from tensorflow.keras.callbacks import Callback
class CustomCallback(Callback):
def __init__(self):
super().__init__()
self.output_values = []
def on_batch_end(self, batch, logs=None):
self.output_values += [self.model.output.numpy()]
def on_epoch_end(self, epoch, logs=None):
output_values = np.concatenate(self.output_values).flatten()
plt.boxplot(output_values)
canvas = FigureCanvasAgg(plt.gcf())
canvas.draw()
s, (width, height) = canvas.print_to_buffer()
image = np.fromstring(s, np.uint8).reshape((height, width, 4))
tf.summary.image(self.name, image)
model = Sequential([
Input((224, 224, 3)),
Conv2D(32, (3, 3)),
GlobalAvgPool2D(),
Dense(1, activation='softmax')
])
X = np.random.rand(100, 224, 224, 3)
y = np.random.choice([0, 1], 100)
tf.config.experimental_run_functions_eagerly(True)
model.compile(optimizer='Adam', loss='binary_crossentropy')
model.fit(X, y, callbacks=[CustomCallback()])
# AttributeError: 'Tensor' object has no attribute 'numpy'