動手學深度學習pytorch(第一天逼泣、第二天)

1.線性回歸

線性回歸輸出是?個連續(xù)值,因此適?用于回歸問題嗜憔。

基本要素

①模型定義

②模型訓練

(1)訓練數(shù)據(jù):在機器?學習術語?里里吉捶,該數(shù)據(jù)集 被稱為訓練數(shù)據(jù)集(training data set)或訓練集(training set),?一棟房屋被稱為?一個樣本 (sample)币励,其真實售出價格叫作標簽(label)食呻,?用來預測標簽的兩個因素叫作特征(feature)。 特征?用來表征樣本的特點仅胞。

(2)損失函數(shù):平方損失

(3)優(yōu)化算法:小批量量隨機梯度下降(mini-batch stochastic gradient descent)在深度 學習中被廣泛使用昔头。它的算法很簡單:先選取一組模型參數(shù)的初始值揭斧,如隨機選取;接下來對參數(shù)進?行行 多次迭代,使每次迭代都可能降低損失函數(shù)的值盅视。在每次迭代中闹击,先隨機均勻采樣?個由固定數(shù)?目訓練 數(shù)據(jù)樣本所組成的?小批量量(mini-batch) 成艘,然后求?批量中數(shù)據(jù)樣本的平均損失有關模型參數(shù)的導數(shù) (梯度)淆两,最后?用此結果與預先設定的?個正數(shù)的乘積作為模型參數(shù)在本次迭代的減?量秋冰。

③模型預測:模型訓練完成后,我們將模型參數(shù) 在優(yōu)化算法停?止時的值分別記作 埃撵。注意暂刘,這?里里 我們得到的并不一定是最?化損失函數(shù)的最優(yōu)解 鸳惯,而是對最優(yōu)解的?個近似。

pytorch實現(xiàn):

1.生成數(shù)據(jù)集

import torch

from torch import nn

import numpy as np

torch.manual_seed(1)

print(torch.__version__)

torch.set_default_tensor_type('torch.FloatTensor’)

num_inputs = 2

num_examples = 1000

true_w = [2, -3.4]

true_b = 4.2

features = torch.tensor(np.random.normal(0, 1, (num_examples, num_inputs)), dtype=torch.float)

labels = true_w[0] * features[:, 0] + true_w[1] * features[:, 1] + true_b

labels += torch.tensor(np.random.normal(0, 0.01, size=labels.size()), dtype=torch.float)

其中features是訓練數(shù)據(jù)特征绪商,labels是標簽格郁。:

2.讀取數(shù)據(jù):PyTorch提供了?data包來讀取數(shù)據(jù)例书。由于data常用作變量名刻炒,我們將導入的data模塊?用Data代替坟奥。在每?次迭代中,我們將隨機讀取包含10個數(shù)據(jù)樣本的?批量晒喷。

import torch.utils.data as Data

batch_size = 10

# ?將訓練數(shù)據(jù)的特征和標簽組合

dataset = Data.TensorDataset(features, labels)

# ?隨機讀取?批量

data_iter = Data.DataLoader(

????dataset=dataset,????????????# torch TensorDataset format

????batch_size=batch_size,??????# mini batch size

????shuffle=True,???????????????# whether shuffle the data or not

????num_workers=2,??????????????# read data in multithreading

)

#讀取并打印第?個?批量數(shù)據(jù)樣本

for X, y in data_iter:

????print(X, '\n', y)

????break

3.定義模型:?先凉敲,導? torch.nn 模塊寺旺。實際上爷抓,“nn”是neural networks(神經(jīng)?絡)的縮寫。顧名思義阻塑,該模 塊定義了?量神經(jīng)?絡的層蓝撇。 之前我們已經(jīng)?過了 autograd , ? nn 就是利? autograd 來定義模 型叮姑。 nn 的核?數(shù)據(jù)結構是 Module 唉地,它是?個抽象概念,既可以表示神經(jīng)?絡中的某個層(layer)传透, 也可以表示?個包含很多層的神經(jīng)?絡耘沼。在實際使?中,最常?見的做法是繼承 nn.Module 朱盐,撰寫?? 的?絡/層群嗤。?個 nn.Module 實例應該包含?些層以及返回輸出的前向傳播(forward)?法。下?先 來看看如何? nn.Module 實現(xiàn)?個線性回歸模型兵琳。

class LinearNet(nn.Module):

?? ?def __init__(self, n_feature):

?? ?super(LinearNet, self).__init__()

?? ?self.linear = nn.Linear(n_feature, 1)

?? ?# forward 定義前向傳播

?? ?def forward(self, x):

?? ?y = self.linear(x)

?? ?return y

net = LinearNet(num_inputs)?

print(net) # 使?print可以打印出?絡的結構

可以? nn.Sequential 來更加?便地搭建?絡, Sequential是?個有序的容器钱烟,?絡層將按照在傳? Sequential 的順序依次被添加到計算圖中曙博。

# ways to init a multilayer network

# method one

net = nn.Sequential(

????nn.Linear(num_inputs, 1)

????# other layers can be added here

????)

# method two

net = nn.Sequential()

net.add_module('linear', nn.Linear(num_inputs, 1))

# net.add_module ......

# method three

from collections import OrderedDict

net = nn.Sequential(OrderedDict([

??????????('linear', nn.Linear(num_inputs, 1))

??????????# ......

????????]))

print(net)

print(net[0])

可以通過net.parameters()來查看模型所有的可學習參數(shù),此函數(shù)將返回?個?成器逝她。

for param in net.par

????print(param)

注意: torch.nn 僅?持輸??個batch的樣本不?持單個樣本輸?, 如果只有單個樣本, 可使 ? input.unsqueeze(0) 來添加?維徽惋。

4.初始化

使? net 前踢京,我們需要初始化模型參數(shù),如線性回歸模型中的權重和偏差。PyTorch在 init 模塊中 提供了多種參數(shù)初始化?法逻杖。這?的 init 是 initializer 的縮寫形式滨攻。我們通過 init.normal_ 將權重參數(shù)每個元素初始化為隨機采樣于均值為0、標準差為0.01的正態(tài)分布澡为。偏差會初始化為零。

from torch.nn import init

init.normal_(net[0].weight, mean=0.0, std=0.01)

init.constant_(net[0].bias, val=0.0) ?# 也可以直接修改bias的data: net[0].bias.data.fill_(0)

5.損失函數(shù)

PyTorch在nn模塊中提供了各種損失函數(shù),這些損失函數(shù)可看作是?種特殊的層谋旦,PyTorch也將這些損失函數(shù) nn.Module 的?類。我們現(xiàn)在使?它提供的均?誤差損失作為模型的損失函數(shù)甲捏。

loss = nn.MSELoss()

6.優(yōu)化算法

?須??實現(xiàn)?批量隨機梯度下降算法。 torch.optim 模塊提供了很多常?的優(yōu)化算法 ?如SGD、Adam和RMSProp等。下?我們創(chuàng)建?個?于優(yōu)化 net 所有參數(shù)的優(yōu)化器實例,并指定學 習率為0.03的?批量隨機梯度下降(SGD)為優(yōu)化算法。

import torch.optim as optim

optimizer = optim.SGD(net.parameters(), lr=0.03)???# built-in random gradient descent function

print(optimizer)??# function prototype: `torch.optim.SGD(params, lr=, momentum=0, dampening=0, weight_decay=0, nesterov=False)`

7.訓練

num_epochs = 3

for epoch in range(1, num_epochs + 1):

????for X, y in data_iter:

????????output = net(X)

????????l = loss(output, y.view(-1, 1))

????????optimizer.zero_grad() # reset gradient, equal to net.zero_grad()

????????l.backward()

????????optimizer.step()

????print('epoch %d, loss: %f' % (epoch, l.item()))

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末作喘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子贰锁,更是在濱河造成了極大的恐慌物咳,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晴弃,死亡現(xiàn)場離奇詭異际邻,居然都是意外死亡缨恒,警方通過查閱死者的電腦和手機血巍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門禀崖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叶雹,“玉大人沾瓦,你說我怎么就攤上這事。” “怎么了耙考?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵诵次,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任珠插,我火速辦了婚禮顾患,結果婚禮上犁河,老公的妹妹穿的比我還像新娘画恰。我一直安慰自己考润,他們只是感情好,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死烫扼,一個胖子當著我的面吹牛,可吹牛的內容都是我干的悟狱。 我是一名探鬼主播卑吭,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了认境?” 一聲冷哼從身側響起硼身,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤罚斗,失蹤者是張志新(化名)和其女友劉穎徙鱼,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體针姿,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡袱吆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了距淫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绞绒。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖榕暇,靈堂內的尸體忽然破棺而出蓬衡,到底是詐尸還是另有隱情,我是刑警寧澤彤枢,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布狰晚,位于F島的核電站,受9級特大地震影響缴啡,放射性物質發(fā)生泄漏壁晒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一业栅、第九天 我趴在偏房一處隱蔽的房頂上張望秒咐。 院中可真熱鬧,春花似錦碘裕、人聲如沸携取。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽歹茶。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惊豺,已是汗流浹背燎孟。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留尸昧,地道東北人揩页。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像烹俗,于是被迫代替她去往敵國和親爆侣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內容