训练时实时绘制模型预测

时间:2019-02-22 10:59:09

标签: python tensorflow keras

我试图通过查看模型对每批更新的图上的实际y值的预测来查看我的模型如何进行加班训练,我用Google搜索了它的完成方式和非常令人困惑的地方,最接近它的是在此处添加代码:

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中看到它而不是手动实现它?

谢谢!

2 个答案:

答案 0 :(得分:0)

尝试通过以下方式使用matplotlib qt后端:

%matplotlib qt

或者如果您正在运行.py文件

from IPython import get_ipython
get_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_truey_pred值。并使用TensorBoard回调对其进行绘制。

答案 1 :(得分:0)

这对我有用:

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