在训练时实时绘制模型预测

我试图通过查看它对每个批次更新的图上实际 y 值的预测来查看我的模型如何进行加班训练,我用谷歌搜索了它是如何完成的并且非常令人困惑,我让它最接近工作的是这里添加的代码:


def cb(x, y_true):

    def _(batch, logs):

        s,e=batch*batch_size,(batch+1)*batch_size

        y_pred = model.predict(

            x[s:e],

            batch_size=batch_size

        )

        plt.clf()

        plt.plot(y_true[s:e], label='true')

        plt.plot(y_pred, label='pred')

        plt.legend()

        plt.show()

    return _

cb_plot=keras.callbacks.LambdaCallback(on_batch_end=cb(train_X,train_y))

这样做的问题是我每次都需要手动关闭图形才能继续训练,因为它show被阻塞了。我尝试使用block=False并尝试启用交互式使用,ion但这让我进入了一个空的白色无响应图形窗口。任何人都知道这里需要更改什么才能使其正常工作?


顺便说一句,我没有看到 TensorBoard 可以向您展示模型通过训练所做的预测与实际 y 值相比,是否有可能在 tensorboard 中看到它而不是手动实现它?


胡说叔叔
浏览 167回答 2
2回答

大话西游666

尝试使用 matplotlib qt 后端:%matplotlib qt或者如果您正在运行 .py 文件from IPython import get_ipythonget_ipython().run_line_magic('matplotlib', 'qt')然后创建全局axe对象ax = plt.axes() 并最终使用它来绘制您的图:def plot_stuff():   ax.clear()   x = np.linspace(-10, 10, 50)   ax.plot(x, np.sin(x))如果您想绘制预测值,您可以创建一些自定义指标功能,这些功能将简单地返回y_true或y_pred值。并使用TensorBoard回调来绘制它。

浮云间

这对我有用:plt.show(block=False)进而def cb(x, y_true):    def _(batch, logs):        s,e=batch*batch_size,(batch+1)*batch_size        y_pred = model.predict(            x[s:e],            batch_size=batch_size        )        plt.clf()        plt.plot(y_true[s:e], label='true')        plt.plot(y_pred, label='pred')        plt.axis([0, batch_size, -1, 1])        plt.legend()        plt.draw()        plt.pause(0.0001)    return _cb_plot=keras.callbacks.LambdaCallback(on_batch_end=cb(train_X,train_y))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python