为什么 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 时,附加一个带有时间戳的目录作为后缀
我正在通过 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 时,附加一个带有时间戳的目录作为后缀