为什么 Keras Tensorboard 标量图不是线性的(循环)?

Why does Keras Tensorboard scalar graph not linear (loop)?

我正在通过 Keras 使用 TensorBoard。但是标量图搞砸了。就像非线性和循环回到自身一样。有没有办法纠正这个问题?

class LRTensorBoard(TensorBoard):
    def __init__(self, log_dir):
        super().__init__(log_dir=log_dir)
    def on_epoch_end(self, epoch, logs=None):
        logs.update({'lr': K.eval(self.model.optimizer.lr)})
        super().on_epoch_end(epoch, logs)

model = Sequential()
model.add(GRU(16, input_shape=(TimeStep.TIME_STEP + 1, TimeStep.FEATURES), activation='relu', return_sequences=True))
model.add(GRU(16, activation='relu', return_sequences=True))
model.add(GRU(16, activation='relu'))
model.add(Dense(3, activation='softmax'))

tensorboard = TensorBoard(log_dir=logDir, histogram_freq=0, write_graph=True)
tensorboard.set_model(model)

model.compile(loss='categorical_crossentropy', optimizer=optimize, metrics=[categorical_accuracy])
history = model.fit(TimeStep.fodder, TimeStep.target, epochs=100, shuffle=True, batch_size=4064, validation_split=0.3, callbacks=[tensorboard, LRTensorBoard(log_dir=logDir)])

这是因为 TensorBoard 期望所有日志都有不同的目录。例如,如果您有 2 个名为 CNN1 和 CNN2 的模型,那么您应该具有以下结构:

logs/
    CNN1/
    CNN2/

如果您没有这个确切的结构,TensorBoard 会认为两个日志属于同一个训练会话,因此会出现奇怪的曲线...

[编辑] 当我阅读你的代码时,我看到了一个简单的解决方法:当你指定 logdir 时,附加一个带有时间戳的目录作为后缀