pytorch 如何使用tensorboard實時查看曲線---- tensorboardX簡介


用慣了tensorflow的小伙伴肯定都用過tensorboard工具吧。雖然Facebook也推出了visdom,但是在一次不小心誤觸clear之后,我放棄了這個工具(頁面的一個clear按鈕我本來是想按save的……它們倆一左一右,腦子一熱按錯了,點擊之后clear之后不知道怎么找回曲線數據,真的崩潰)clear按鈕示例

 

說回pytorch使用tensorboard吧……

  1. 首先是安裝。
    pip install tensorboardX

    這東西雖然是給pytorch用的,但是其實還是走的tensorboard那一套東西,所以你的環境里還需要有tensorflow。(cpu、gpu版本不限,隨手裝一個就好了)

  2. 調用
    from tensorboardX import SummaryWriter

    使用的就是SummaryWriter這個類。簡單的使用可以直接使用SummaryWriter實例

    # before train
    log_writer = SummaryWriter('log_file_path')
    
    # in training
    log_writer.add_scalar('Train/Loss', loss.data[0], niter) 
    # in pytorch1.0 loss.data[0] should be loss.item()

    如果你不僅僅是需要記錄一個loss這么簡單,也可以對SummaryWriter做一個封裝。

    class Tacotron2Logger(SummaryWriter):
        def __init__(self, logdir):
            super(Tacotron2Logger, self).__init__(logdir)
    
        def log_training(self, reduced_loss, grad_norm, learning_rate, duration,
                         iteration):
                self.add_scalar("training.loss", reduced_loss, iteration)
                self.add_scalar("grad.norm", grad_norm, iteration)
                self.add_scalar("learning.rate", learning_rate, iteration)
                self.add_scalar("duration", duration, iteration)
    
        def log_validation(self, reduced_loss, model, y, y_pred, iteration):
            self.add_scalar("validation.loss", reduced_loss, iteration)
            _, mel_outputs, gate_outputs, alignments = y_pred
            mel_targets, gate_targets = y
    
            # plot distribution of parameters
            for tag, value in model.named_parameters():
                tag = tag.replace('.', '/')
                self.add_histogram(tag, value.data.cpu().numpy(), iteration)
    
            # plot alignment, mel target and predicted, gate target and predicted
            idx = random.randint(0, alignments.size(0) - 1)
            self.add_image(
                "alignment",
                plot_alignment_to_numpy(alignments[idx].data.cpu().numpy().T),
                iteration)
            self.add_image(
                "mel_target",
                plot_spectrogram_to_numpy(mel_targets[idx].data.cpu().numpy()),
                iteration)
            self.add_image(
                "mel_predicted",
                plot_spectrogram_to_numpy(mel_outputs[idx].data.cpu().numpy()),
                iteration)
            self.add_image(
                "gate",
                plot_gate_outputs_to_numpy(
                    gate_targets[idx].data.cpu().numpy(),
                    F.sigmoid(gate_outputs[idx]).data.cpu().numpy()),
                iteration)
    View Code

    這段代碼是從NVIDIA tacotron2中摘取過來的。使用和前面一樣,只不過把類名改一下就是了,調用的時候,按照你自己定義的類函數去調用就好了。基本功能還是都在的,畫圖畫曲線什么的。沒有visdom花里胡哨就是了。

    log_writer = Tacotron2Logger('log_file_path')
    
    log_writer.log_training(self, reduced_loss, grad_norm, learning_rate, duration, iteration)

    這樣封裝后,就不會在train的代碼里很凌亂了。

  3. 網頁查看,這個就回到tensorboard一樣的操作了。
    tensorboard --logdir=./log_file_path --port=8765
    # log_file_path 是初始化log_writer時候的那個參數地址。
    # 這里端口號可以隨意改,默認是6006。

     

  4. 然后命令行會告訴你在瀏覽器輸入 ip:8765進行查看,這個和tensorboard一樣了就。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM