PyTorch系列三:邏輯回歸

1.介紹

  • logistic回歸是一種廣義線性回歸打月,因此與多重線性回歸分析有很多相同之處短纵。它們的模型形式基本上相同,都具有 w'x+b僵控,其中w和b是待求參數(shù)香到,其區(qū)別在于他們的因變量不同,多重線性回歸直接將w‘x+b作為因變量,即y =w'x+b悠就,而logistic回歸則通過函數(shù)L將w‘x+b對應(yīng)一個隱狀態(tài)p千绪,p =L(w'x+b),然后根據(jù)p 與1-p的大小決定因變量的值。如果L是logistic函數(shù)梗脾,就是logistic回歸荸型,如果L是多項(xiàng)式函數(shù)就是多項(xiàng)式回歸。
  • logistic回歸的因變量可以是二分類的炸茧,也可以是多分類的瑞妇,但是二分類的更為常用,也更加容易解釋梭冠,多類可以使用softmax方法進(jìn)行處理辕狰。實(shí)際中最為常用的就是二分類的logistic回歸。

2.模型訓(xùn)練

# -*- coding: utf-8 -*-

import torch
from torch import nn, optim
import torch.nn.functional as F
from torch.autograd import Variable
from torch.utils.data import DataLoader
from torchvision import transforms
from torchvision import datasets

import time

# 定義超參數(shù)
batch_size    = 32
num_epoches   = 10
learning_rate = 1e-3

# 下載訓(xùn)練集 MNIST 手寫數(shù)字訓(xùn)練集
train_dataset = datasets.MNIST(root='./data', train=True, transform=transforms.ToTensor(), download=True)
test_dataset  = datasets.MNIST(root='./data', train=False, transform=transforms.ToTensor())

train_loader  = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
test_loader   = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)

class Logstic_Regression(nn.Module):
    """邏輯回歸模型定義"""

    def __init__(self, in_dim, n_class):
        super(Logstic_Regression, self).__init__()
        self.logstic = nn.Linear(in_dim, n_class)

    def forward(self, x):
        # 前向傳播
        output = self.logstic(x)
        return output

# 模型初始化
model = Logstic_Regression(28 * 28, 10)  # 圖片大小是28x28

# 定義loss和optimizer
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=learning_rate)

# 模型訓(xùn)練
for epoch in range(num_epoches):
    print '#' * 45
    print 'Epoch {}'.format(epoch + 1)
    since = time.time()
    running_loss = 0.0
    running_acc  = 0.0
    for i, data in enumerate(train_loader, 1):
        img, label = data
        img = img.view(img.size(0), -1)

        img   = Variable(img)
        label = Variable(label)

        # 前向傳播
        out = model(img)
        loss = criterion(out, label)
        running_loss += loss.item() * label.size(0)
        _, pred = torch.max(out, 1)
        num_correct = (pred == label).sum()
        running_acc += num_correct.item()

        # 后向傳播
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        if i % 300 == 0:
            print '[{}/{}] Loss: {:.6f}, Acc: {:.6f}'.format(
                epoch + 1, num_epoches, running_loss / (batch_size * i),
                running_acc / (batch_size * i))
    print 'Finish {} epoch, Loss: {:.6f}, Acc: {:.6f}'.format(
        epoch + 1, running_loss / (len(train_dataset)), running_acc / (len(
            train_dataset)))

    # 模型評估
    model.eval()
    eval_loss = 0.
    eval_acc  = 0.
    for data in test_loader:
        img, label = data
        img = img.view(img.size(0), -1)

        with torch.no_grad():
            img   = Variable(img)
            label = Variable(label)

        out  = model(img)
        loss = criterion(out, label)
        eval_loss += loss.item() * label.size(0)
        _, pred = torch.max(out, 1)
        num_correct = (pred == label).sum()
        eval_acc += num_correct.item()
    print 'Test Loss: {:.6f}, Acc: {:.6f}'.format(eval_loss / (len(
        test_dataset)), eval_acc / (len(test_dataset)))
    print 'Time:{:.1f} s'.format(time.time() - since)

# 模型保存
torch.save(model.state_dict(), './Logistic_Regression.model')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末控漠,一起剝皮案震驚了整個濱河市蔓倍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盐捷,老刑警劉巖偶翅,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異碉渡,居然都是意外死亡聚谁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門滞诺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來形导,“玉大人,你說我怎么就攤上這事铭段≈栊” “怎么了秦爆?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵序愚,是天一觀的道長。 經(jīng)常有香客問我等限,道長爸吮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任望门,我火速辦了婚禮形娇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘筹误。我一直安慰自己桐早,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著哄酝,像睡著了一般友存。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上陶衅,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天屡立,我揣著相機(jī)與錄音,去河邊找鬼搀军。 笑死膨俐,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的罩句。 我是一名探鬼主播焚刺,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼的止!你這毒婦竟也來了檩坚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤诅福,失蹤者是張志新(化名)和其女友劉穎匾委,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體氓润,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赂乐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了咖气。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挨措。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖崩溪,靈堂內(nèi)的尸體忽然破棺而出浅役,到底是詐尸還是另有隱情,我是刑警寧澤伶唯,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布觉既,位于F島的核電站,受9級特大地震影響乳幸,放射性物質(zhì)發(fā)生泄漏瞪讼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一粹断、第九天 我趴在偏房一處隱蔽的房頂上張望符欠。 院中可真熱鬧,春花似錦瓶埋、人聲如沸希柿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽曾撤。三九已至娄徊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盾戴,已是汗流浹背寄锐。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尖啡,地道東北人橄仆。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像衅斩,于是被迫代替她去往敵國和親盆顾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

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

  • 機(jī)器學(xué)習(xí)是做NLP和計(jì)算機(jī)視覺這類應(yīng)用算法的基礎(chǔ)畏梆,雖然現(xiàn)在深度學(xué)習(xí)模型大行其道您宪,但是懂一些傳統(tǒng)算法的原理和它們之間...
    在河之簡閱讀 20,482評論 4 65
  • 邏輯回歸 邏輯回歸(Logistic regression 或logit regression),即邏輯模型(英語...
    ChZ_CC閱讀 35,661評論 4 45
  • 以西瓜書為主線奠涌,以其他書籍作為參考進(jìn)行補(bǔ)充宪巨,例如《統(tǒng)計(jì)學(xué)習(xí)方法》,《PRML》等 第一章 緒論 1.2 基本術(shù)語 ...
    danielAck閱讀 4,486評論 0 6
  • 歲月如梭溜畅,白駒過隙捏卓,心中焦躁如同火燒,這時候慈格,不要閑著沒事怠晴,亂跟童言無忌的孩子發(fā)飆。雖說浴捆,他們是祖國的花骨朵蒜田,有時...
    土伽丘閱讀 325評論 0 0
  • (和水鬼君詩《端午》而作) 汨羅江水清又純 滋潤三湘眾鄉(xiāng)親 晝夜?jié)L滾流不盡 ...
    張春發(fā)_66a0閱讀 643評論 8 9