同时运行 model.fit() 和 TensorBoard?

Posted

技术标签:

【中文标题】同时运行 model.fit() 和 TensorBoard?【英文标题】:Running model.fit() and TensorBoard at the same time? 【发布时间】:2020-04-14 09:27:40 【问题描述】:

关于同时运行 model.fit() 和 tensorboard,我有一个有趣的(对我而言)问题。

我在网上做了一些关于“线程”、“处理”、“多处理”的研究,尝试了一些例子,但无法解决我的问题。

我想同时运行 TensorBoard 和 model.fit(),例如:

from threading import Thread
import subprocess

def startTensorboard(log_dir):
    # Tried both
    os.system('tensorboard --logdir '+ log_dir)
    # subprocess.call(['tensorboard', '--logdir', log_dir])

tensorboard = tf.keras.callbacks.TensorBoard(log_dir='logs', histogram_freq=0,
                          write_graph=True, write_images=False)

Thread(target = startTensorboard('logs')).start()

Thread(target = model.fit_generator(
                self.train_data_gen,
                steps_per_epoch=self.STEPS_PER_EPOCH,
                validation_data = self.test_data_gen,
                validation_steps = self.VALID_STEPS_PER_EPOCH,
                epochs=self.epoch,
                callbacks=[tensorboard])).start()

这可能吗?当我运行此代码时,TensorBoard 正在运行,但 model.fit() 不起作用。

【问题讨论】:

【参考方案1】:

以下是一个工作示例,我认为它可以满足您的需求。我正在使用来自multiprocessing 模块的Process。请注意,当您调用fit 函数时,在您为Process 设置为target 的函数内部定义模型似乎很重要,如this post 中所示。我尝试在函数调用之外定义模型,它会初始化模型,但是训练会无限期地挂起。

当我在笔记本电脑上运行它时,tensorboard 需要一点时间才能启动,但通常到训练达到 70 epoch 时,tensorboard 已经启动,它会继续运行,直到你用 Ctrl+C 杀死它。

import os
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from multiprocessing import Process


def startTensorboard(logdir):
    # Start tensorboard with system call
    os.system("tensorboard --logdir ".format(logdir))


def fitModel():
    # Create your model
    model = Sequential()
    model.add(Dense(32, activation='relu', input_dim=100))
    model.add(Dense(1, activation='sigmoid'))
    model.compile(optimizer='rmsprop',
                  loss='binary_crossentropy',
                  metrics=['accuracy'])

    # Some mock training data
    data = np.random.random((1000, 100))
    labels = np.random.randint(2, size=(1000, 1))

    # Run the fit function
    model.fit(data, labels, epochs=100, batch_size=32)


if __name__ == '__main__':
    # Run both processes simultaneously
    Process(target=startTensorboard, args=("logs",)).start()
    Process(target=fitModel).start()

【讨论】:

以上是关于同时运行 model.fit() 和 TensorBoard?的主要内容,如果未能解决你的问题,请参考以下文章

运行 model.fit() 时的 tf.keras (RNN) 层问题

Python Tensorflow - 多次运行 model.fit 而不重新实例化模型

如何在 CNN-LSTM 模型上应用 model.fit() 函数?

如何修改 model.fit 设置?

model.fit(X,y) 和 model.fit(train_X, train_y) 有啥区别

model.predict() 和 model.fit() 做啥?