Python 在Tensorboard/中添加箱线图的回调无法在\u batch\u end中使用.numpy()

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),但

我想在Tensorboard中添加一个箱线图,显示训练期间模型返回的最终值。尽管我已经强制执行了渴望执行,但我无法实现这一点,因为我无法访问批处理端上的
方法中的模型输出值

MWE:


你还没问过问题。Keras模型内部并不急切。这就像一个静态函数,您需要有一个自定义的训练循环来获取该值或在批处理中调用predict。第一个会表现得更好。我曾经在tf1.13中使用kwargs在
模型中进行过某种黑客攻击。编译
以传入
获取
a
tf.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'