我正在try 开发一个小功能,它可以动态绘制TensorFlow模型训练过程中的损失或精度.我基本上绘制了每个时期的每个批处理结束时的精度历史(代码仍然需要一些修正,但目前它可以正常工作).
我有一个小问题,因为我在jupyter笔记本电脑单元中运行以下代码.我有想要的行为,有一个动态发展的情节.然而,在训练结束时,由于某种原因,最终的情节被重复了,我不知道为什么会这样.
from IPython.display import display, clear_output
import tensorflow as tf
from tensorflow.keras.models import Sequential
import numpy as np
import matplotlib.pyplot as plt
class CustomCallback(tf.keras.callbacks.Callback):
def on_train_begin(self, logs=None):
self.epoch = 0 # Initialize the epoch counter
self.accuracies = []
self.fig, self.ax = plt.subplots()
self.line, = self.ax.plot([], [])
self.ax.set_xlim(0, 30)
self.ax.set_ylim(0, 1)
self.displayed = False
display(self.fig)
def on_epoch_begin(self, epoch, logs=None):
self.epoch = epoch # Update the current epoch at the beginning of each epoch
def on_train_batch_end(self, batch, logs=None):
accuracy = logs['accuracy']
self.accuracies.append(accuracy)
self.line.set_data(range(1, len(self.accuracies) + 1), self.accuracies)
self.ax.relim()
self.ax.autoscale_view()
clear_output(wait=True)
display(self.fig)
custom_callback = CustomCallback()
model = Sequential()
model.add(tf.keras.layers.Dense(units=16, activation='relu'))
model.add(tf.keras.layers.Dropout(rate=0.35))
model.add(tf.keras.layers.Dense(units=1, activation='tanh'))
model.compile(optimizer=tf.keras.optimizers.Adam(), loss="binary_crossentropy", metrics=["accuracy"])
X = np.random.randn(10**2, 10**4)
y = np.random.randint(2, size=10**2)
abc = model.fit(X, y, epochs=7, batch_size=32, validation_split=0.025, verbose=False, callbacks=[custom_callback])