pytorch-lightning 框架初探

項(xiàng)目地址 https://github.com/PyTorchLightning/pytorch-lightning
以下內(nèi)容整理自項(xiàng)目作者的講解視頻:Converting from PyTorch to PyTorch Lightning (油管視頻需梯自備子)

import torch.nn as nn 
import torch  
import torch.optim as optim
import pytorch_lightning as pl

class Net(pl.LightningModule):

    def __init__(self):
        super().__init__()

    def forward(self,x):
        # 可以結(jié)合training_step函數(shù)肌访,簡(jiǎn)化forward的內(nèi)容
        pass

    def loss_func(self, y_hat, y):
        return F.cross_entropy(y_hat, y)

    def configure_optimizers(self):
        return optim.Adam(self.parameters(), lr=1e-3)
    
    def training_step(self, batch, batch_idx):
        x,y = batch #
        y_hat = self(x)
        # return {'loss':F.cross_entropy(y_hat, y)}
        loss = self.loss_func(y_hat, y)
        return {'loss':loss}
        ################################
        # log = {'train_loss':loss}
        # return {'loss':loss, 'log':log}
        # 這樣就可以在tensorboard中看到train_loss的曲線

    def log_func(self,):
        # do whatever you want, print, file operation, etc.
        pass

    def validation_step(self, batch, batch_idx):
        # !!! val data 不應(yīng)該用shuffle
        x,y = batch #
        y_hat = self(x)
        val_loss = self.loss_func(y_hat, y)

        if batch_idx == 0:
            n = x.size(0)
            self.log_func()

        return {'val_loss':val_loss}

    ##############################################################
    ###  這里定義了dataloader fit里就不用通過(guò)參數(shù)傳入了
    ################################
    def train_dataloader(self):
        loader = torch.utils.data.DataLoader()
        return loader

    def val_dataloader(self):
        loader = torch.utils.data.DataLoader()
        return loader

    ################################
    # 使用tensorboard等 logger,  替代validation_step中l(wèi)og_func這一部分
    ################################
    def validation_epoch_end(self, outputs):

        # 計(jì)算batch的平均損失,這里的outputs就是validation_step返回的
        val_loss = torch.stack([x['val_loss'] for x in outputs]).mean()
        # 也可以傳入其他數(shù)據(jù),如VAE 重建的圖像
        # x_hat = outputs[0]['x_hat']
        # grid = torchvision.utils.make_grid(x_hat)
        # self.logger.experiment 就是 tensorboard SummaryWriter
        self.logger.experiment.add_image('images', grid,0)

        log = {'avg_val_loss':val_loss}
        return {'log':log}
        ################################
        # 如果return的dict中有key='val_loss'會(huì)自動(dòng)出發(fā)保存模型
        # return {'val_loss':val_loss}

    
if __name__ == '__main__':

    # dataloader 可以放到module中

    train_loader = torch.utils.data.DataLoader()
    val_loader= torch.utils.data.DataLoader() # shuffle=False
    net =Net()

    # 快速跑完一個(gè)train batch和一個(gè)dev batch
    # 驗(yàn)證整個(gè)流程沒(méi)錯(cuò)
    trainer = pl.Trainer(fast_dev_run=True) 
    # 完整的訓(xùn)練過(guò)程 Trainer() 即可
    # train_percent_check=0.1  只訓(xùn)練0.1的數(shù)據(jù)
    trainer.fit(net,
                train_dataloader=train_loader,
                val_dataloaders=val_loader
                )

    ################################
    # argparser 的使用

    from argparser import ArgumentParser

    parser = ArgumentParser()
    parser = pl.Trainer.add_argparse_args(parser)
    parser.add_argument('--batch_size', default=32, type=int, help='batch size')
    parser.add_argument('--learning_rate', default=1e-3, type=float)

    args = parser.parse_args()

    net = Net()
    trainer = pl.Trainer.from_argparse_args(args, fast_dev_run=True)
    trainer.fit(net)

    ################################
    # 單GPU訓(xùn)練
    # terminal:  python main.py --gpus 1 --batch_size 256
    # 多GPU訓(xùn)練
    # 默認(rèn)用DP dataparallel 但用DDP更好 distributed DP
    # terminal:  python main.py --gpus 2 --distributed_backend ddp 

    ################################
    # 16 bit 訓(xùn)練  pytorch 1.6 內(nèi)建 apex
    # 可能需要修改一定的代碼亲怠,比如說(shuō)Loss函數(shù)   
    # from F.binary_cross_entropy  to  
    # F.binary_cross_entropy_with_logits(y_hat,y,reduction='sum')

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市态兴,隨后出現(xiàn)的幾起案子幸斥,更是在濱河造成了極大的恐慌弧满,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吧享,死亡現(xiàn)場(chǎng)離奇詭異魏割,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)钢颂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門钞它,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事遭垛∧嵬埃” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵锯仪,是天一觀的道長(zhǎng)泵督。 經(jīng)常有香客問(wèn)我,道長(zhǎng)庶喜,這世上最難降的妖魔是什么小腊? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮溃卡,結(jié)果婚禮上溢豆,老公的妹妹穿的比我還像新娘蜒简。我一直安慰自己瘸羡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布搓茬。 她就那樣靜靜地躺著犹赖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卷仑。 梳的紋絲不亂的頭發(fā)上峻村,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音锡凝,去河邊找鬼粘昨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛窜锯,可吹牛的內(nèi)容都是我干的张肾。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼锚扎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼吞瞪!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起驾孔,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤芍秆,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后翠勉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妖啥,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年对碌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了迹栓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖克伊,靈堂內(nèi)的尸體忽然破棺而出酥郭,到底是詐尸還是另有隱情,我是刑警寧澤愿吹,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布不从,位于F島的核電站,受9級(jí)特大地震影響犁跪,放射性物質(zhì)發(fā)生泄漏椿息。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一坷衍、第九天 我趴在偏房一處隱蔽的房頂上張望寝优。 院中可真熱鬧,春花似錦枫耳、人聲如沸乏矾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)钻心。三九已至,卻和暖如春铅协,著一層夾襖步出監(jiān)牢的瞬間捷沸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工狐史, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痒给,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓骏全,卻偏偏與公主長(zhǎng)得像苍柏,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吟温,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349