Pytorch學(xué)習(xí)記錄-Pytorch可視化

Pytorch學(xué)習(xí)記錄-Pytorch可視化

在很早很早以前(至少一個(gè)半月)印衔,我做過幾節(jié)關(guān)于tensorboard的學(xué)習(xí)記錄靴跛。

http://www.reibang.com/p/23205a7921cd
http://www.reibang.com/p/6235c1ecde67
http://www.reibang.com/p/2b24454b0629
http://www.reibang.com/p/0080047e5456

遲遲沒有轉(zhuǎn)到Pytorch的原因也是tensorflow的可視化做的好,不過現(xiàn)在Pytorch也支持了,在教程里有,學(xué)習(xí)一個(gè)巨柒。
在本教程中,使用簡單的神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)MNIST分類器柠衍,并使用TensorBoard可視化訓(xùn)練過程洋满。在訓(xùn)練階段,我們通過scalar_summary繪制損失和準(zhǔn)確度函數(shù)珍坊,并通過image_summary可視化訓(xùn)練圖像牺勾。此外,我們使用histogram_summary可視化神經(jīng)網(wǎng)絡(luò)參數(shù)的權(quán)重和梯度值阵漏。

1. 引入所需庫

老一套了驻民,只是增加了logger,logger是用于記錄模型

import tensorflow as tf
import numpy as np
import scipy.misc

try:
    from StringIO import StringIO  # Python 2.7
except ImportError:
    from io import BytesIO  # Python 3.x


class Logger(object):
    def __init__(self, log_dir):
        self.writer = tf.summary.FileWriter(log_dir)

    def scalar_summary(self, tag, value, step):
        summary = tf.Summary(value=[tf.Summary.Value(tag=tag, simple_value=value)])
        self.writer.add_summary(summary, step)

    def image_summary(self, tag, images, step):
        # 記錄圖列表
        img_summaries = []
        for i, img in enumerate(images):
            try:
                s = StringIO()
            except:
                s = BytesIO()
            scipy.misc.toimage(img).save(s, format='png')
            img_sum = tf.Summary.Image(encoded_image_string=s.getvalue(),
                                       height=img.shape[0],
                                       width=img.shape[1])
            img_summaries.append(tf.Summary.Value(tag='%s/%d' % (tag, i), image=img_sum))

        summary = tf.Summary(value=img_summaries)
        self.writer.add_summary(summary, step)

    def histo_summary(self, tag, values, step, bins=1000):
        counts, bin_edges = np.histogram(values, bins=bins)
        hist = tf.HistogramProto()
        hist.min = float(np.min(values))
        hist.max = float(np.max(values))
        hist.num = int(np.prod(values.shape))
        hist.sum = float(np.sum(values))
        hist.sum_squares = float(np.sum(values ** 2))

        # Drop the start of the first bin
        bin_edges = bin_edges[1:]

        # Add bin edges and counts
        for edge in bin_edges:
            hist.bucket_limit.append(edge)
        for c in counts:
            hist.bucket.append(c)

        # Create and write Summary
        summary = tf.Summary(value=[tf.Summary.Value(tag=tag, histo=hist)])
        self.writer.add_summary(summary, step)
        self.writer.flush()

2. 訓(xùn)練模型

import torch
import torch.nn as nn
import torchvision
from torchvision import transforms
from logger import Logger

# Device configuration
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

# MNIST dataset
dataset = torchvision.datasets.MNIST(root='./data',
                                     train=True,
                                     transform=transforms.ToTensor(),
                                     download=True)

# Data loader
data_loader = torch.utils.data.DataLoader(dataset=dataset,
                                          batch_size=100,
                                          shuffle=True)


# Fully connected neural network with one hidden layer
class NeuralNet(nn.Module):
    def __init__(self, input_size=784, hidden_size=500, num_classes=10):
        super(NeuralNet, self).__init__()
        self.fc1 = nn.Linear(input_size, hidden_size)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(hidden_size, num_classes)

    def forward(self, x):
        out = self.fc1(x)
        out = self.relu(out)
        out = self.fc2(out)
        return out


model = NeuralNet().to(device)

logger = Logger('./logs')

# Loss and optimizer
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.00001)

data_iter = iter(data_loader)
iter_per_epoch = len(data_loader)
total_step = 50000

# Start training
for step in range(total_step):

    # Reset the data_iter
    if (step + 1) % iter_per_epoch == 0:
        data_iter = iter(data_loader)

    # Fetch images and labels
    images, labels = next(data_iter)
    images, labels = images.view(images.size(0), -1).to(device), labels.to(device)

    # Forward pass
    outputs = model(images)
    loss = criterion(outputs, labels)

    # Backward and optimize
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    # Compute accuracy
    _, argmax = torch.max(outputs, 1)
    accuracy = (labels == argmax.squeeze()).float().mean()

    if (step + 1) % 100 == 0:
        print('Step [{}/{}], Loss: {:.4f}, Acc: {:.2f}'
              .format(step + 1, total_step, loss.item(), accuracy.item()))

        # ================================================================== #
        #                        Tensorboard Logging                         #
        # ================================================================== #

        # 1. Log scalar values (scalar summary)
        info = {'loss': loss.item(), 'accuracy': accuracy.item()}

        for tag, value in info.items():
            logger.scalar_summary(tag, value, step + 1)

        # 2. Log values and gradients of the parameters (histogram summary)
        for tag, value in model.named_parameters():
            tag = tag.replace('.', '/')
            logger.histo_summary(tag, value.data.cpu().numpy(), step + 1)
            logger.histo_summary(tag + '/grad', value.grad.data.cpu().numpy(), step + 1)

        # 3. Log training images (image summary)
        info = {'images': images.view(-1, 28, 28)[:10].cpu().numpy()}

        for tag, images in info.items():
            logger.image_summary(tag, images, step + 1)

本來按照教程是可以的履怯,但是好像哪里出了問題回还,我再看看。
放棄了叹洲,換成TensorboardX柠硕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市运提,隨后出現(xiàn)的幾起案子蝗柔,更是在濱河造成了極大的恐慌,老刑警劉巖民泵,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件癣丧,死亡現(xiàn)場離奇詭異,居然都是意外死亡栈妆,警方通過查閱死者的電腦和手機(jī)胁编,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來签钩,“玉大人,你說我怎么就攤上這事坏快∏﹂荩” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵莽鸿,是天一觀的道長昧旨。 經(jīng)常有香客問我拾给,道長,這世上最難降的妖魔是什么兔沃? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任蒋得,我火速辦了婚禮,結(jié)果婚禮上乒疏,老公的妹妹穿的比我還像新娘额衙。我一直安慰自己,他們只是感情好怕吴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布窍侧。 她就那樣靜靜地躺著,像睡著了一般转绷。 火紅的嫁衣襯著肌膚如雪伟件。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天议经,我揣著相機(jī)與錄音斧账,去河邊找鬼。 笑死煞肾,一個(gè)胖子當(dāng)著我的面吹牛咧织,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播扯旷,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拯爽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了钧忽?” 一聲冷哼從身側(cè)響起毯炮,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎耸黑,沒想到半個(gè)月后桃煎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡大刊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年为迈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缺菌。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡葫辐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伴郁,到底是詐尸還是另有隱情耿战,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布焊傅,位于F島的核電站剂陡,受9級(jí)特大地震影響狈涮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鸭栖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一歌馍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晕鹊,春花似錦松却、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至公荧,卻和暖如春带射,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背循狰。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來泰國打工窟社, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绪钥。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓灿里,卻偏偏與公主長得像,于是被迫代替她去往敵國和親程腹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子匣吊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 請(qǐng)給我多點(diǎn)時(shí)間 也許在下一秒 你就會(huì)在那個(gè) 熟悉的街角出現(xiàn) 仍然白衣飄飄 帶著一點(diǎn)玫瑰清香 緩緩從我身旁走過 沒有...
    方成學(xué)長閱讀 160評(píng)論 0 2
  • 機(jī)會(huì)是留給勇于開始并堅(jiān)持的人 事件:糾結(jié)什么時(shí)候報(bào)考科目二的補(bǔ)考,糾結(jié)今天或者是最近的周末要不要去練車寸潦。 分析:我...
    依米Sunshine閱讀 280評(píng)論 0 0
  • 雨要下未下,空氣里滿是潮濕斩箫,潮濕可以被看見吏砂,它們是一顆顆圓圓的小水珠漂浮在空氣里。 我不太喜歡這種天氣乘客,不如雨水下...
    李饗閱讀 318評(píng)論 0 1
  • 在每一次不曾起舞的日子里 或是沉默不語 或是發(fā)呆凝望天際 或是在空蕩的房間來回踱步 沒有聲音沒有影子 只有寂寂的呼...
    小倩星閱讀 1,324評(píng)論 26 53