国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

《動手學深度學習》——線性神經(jīng)網(wǎng)絡(luò)

這篇具有很好參考價值的文章主要介紹了《動手學深度學習》——線性神經(jīng)網(wǎng)絡(luò)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

參考資料:

  • 《動手學深度學習》

3.1 線性回歸

3.1.1 線性回歸的基本元素

樣本: n n n 表示樣本數(shù), x ( i ) = [ x 1 ( i ) , x 2 ( i ) , ? ? , x d ( i ) ] x^{(i)}=[x^{(i)}_1,x^{(i)}_2,\cdots,x^{(i)}_d] x(i)=[x1(i)?,x2(i)?,?,xd(i)?] 表示第 i i i 個樣本。

預(yù)測: y ^ = w T x + b \hat{y}=w^Tx+b y^?=wTx+b 表示單個樣本的預(yù)測值, y ^ = X w + b \hat{y}=Xw+b y^?=Xw+b 表示所有樣本的預(yù)測值。

損失函數(shù):
L ( w , b ) = ∑ i = 1 n 1 2 ( y ^ ( i ) ? y ( i ) ) L(w,b)=\sum\limits_{i=1}^{n}\frac12\Big(\hat{y}^{(i)}-y^{(i)}\Big) L(w,b)=i=1n?21?(y^?(i)?y(i))

隨機梯度下降:在每次迭代中,我們首先隨機抽樣一個小批量 B \mathcal{B} B , 它是由固定數(shù)量的訓(xùn)練樣本組成的。然后按照如下方式更新參數(shù):
( w , b ) ← ( w , b ) ? η ∣ B ∣ ∑ i ∈ B ? ( w , b ) l ( i ) ( w , b ) (\mathbf{w},b) \leftarrow (\mathbf{w},b) - \frac{\eta}{|\mathcal{B}|} \sum\limits_{i \in \mathcal{B}} \partial_{(\mathbf{w},b)} l^{(i)}(\mathbf{w},b) (w,b)(w,b)?Bη?iB??(w,b)?l(i)(w,b)
其中, η \eta η 為學習率,是一個超參數(shù)。

3.1.2 矢量化加速

盡可能使用效率較高的線性代數(shù)庫。

3.1.3 正態(tài)分布與平方損失

假設(shè)觀測存在噪聲 ? \epsilon ?
y = w ? x + b + ? , y = \mathbf{w}^\top \mathbf{x} + b + \epsilon, y=w?x+b+?,
? ~ N ( 0 , σ 2 ) \epsilon \sim N(0, \sigma^2) ?N(0,σ2)。

此時有條件概率為:
P ( y ∣ x ) = 1 2 π σ 2 exp ? ( ? 1 2 σ 2 ( y ? w ? x ? b ) 2 ) P(y \mid \mathbf{x}) = \frac{1}{\sqrt{2 \pi \sigma^2}} \exp\left(-\frac{1}{2 \sigma^2} (y - \mathbf{w}^\top \mathbf{x} - b)^2\right) P(yx)=2πσ2 ?1?exp(?2σ21?(y?w?x?b)2)
于是似然函數(shù)為:
L ( w , b ) = ∏ i = 1 n p ( y ( i ) ∣ x ( i ) ) L(w,b) = \prod\limits_{i=1}^{n} p(y^{(i)}|\mathbf{x}^{(i)}) L(w,b)=i=1n?p(y(i)x(i))
取對數(shù)再加負號,得:
? l ( w , b ) = ∑ i = 1 n ( 1 2 log ? ( 2 π σ 2 ) + 1 2 σ 2 ( y ( i ) ? w ? x ( i ) ? b ) 2 ) . -l(w,b) = \sum\limits_{i=1}^n \bigg(\frac{1}{2} \log(2 \pi \sigma^2) + \frac{1}{2 \sigma^2} \left(y^{(i)} - \mathbf{w}^\top \mathbf{x}^{(i)} - b\right)^2\bigg). ?l(w,b)=i=1n?(21?log(2πσ2)+2σ21?(y(i)?w?x(i)?b)2).
由于 π , σ \pi,\sigma π,σ 均為常數(shù),故由上式可知,對線性模型的最小化均方誤差等價于極大似然估計。

3.1.4 從線性回歸到深度網(wǎng)絡(luò)

《動手學深度學習》——線性神經(jīng)網(wǎng)絡(luò),動手學深度學習,深度學習,神經(jīng)網(wǎng)絡(luò),人工智能

3.2 線性回歸的從零開始實現(xiàn)

3.2.1 生成數(shù)據(jù)集

假定我們要生成一個包含 1000 個樣本的數(shù)據(jù)集,每個樣本包含從標準正態(tài)分布中采樣的 2 個特征,樣本的標簽為:
y = X w + b + ? \mathbf{y}= \mathbf{X} \mathbf{w} + b + \mathbf\epsilon y=Xw+b+?
其中, w = [ 2 , ? 3.4 ] ? \mathbf{w} = [2, -3.4]^\top w=[2,?3.4]? b = 4.2 b = 4.2 b=4.2 , ? \epsilon ? 服從均值為 0 ,標準差為 0.01 的正態(tài)分布。

def synthetic_data(w, b, num_examples):  #@save
    """生成y=Xw+b+噪聲"""
    X = torch.normal(0, 1, (num_examples, len(w)))
    y = torch.matmul(X, w) + b
    y += torch.normal(0, 0.01, y.shape)
    # 如果沒有y.reshape,那么y將只有一個維度
    return X, y.reshape((-1, 1))

3.2.2 讀取數(shù)據(jù)集

由于隨機梯度下降法要求我們每次從樣本中隨機抽取一部分樣本,所以我們可以定義 data_iter 用于樣本的抽?。?/p>

def data_iter(batch_size, features, labels):
    num_examples = len(features)
    indices = list(range(num_examples))
    # 這些樣本是隨機讀取的,沒有特定的順序
    random.shuffle(indices)
    # 在一輪訓(xùn)練中要用到所有的樣本
    for i in range(0, num_examples, batch_size):
        batch_indices = torch.tensor(
            indices[i: min(i + batch_size, num_examples)])
        # 每次參數(shù)更新只用到一小部分樣本
        yield features[batch_indices], labels[batch_indices]

上面的代碼僅用于理解抽取樣本的過程,實際實現(xiàn)時可以使用內(nèi)置的迭代器。

3.2.3 初始化參數(shù)

w = torch.normal(0, 0.01, size=(2,1), requires_grad=True)
b = torch.zeros(1, requires_grad=True)

3.2.4 定義模型

def linreg(X, w, b):
    """線性回歸模型"""
    return torch.matmul(X, w) + b

3.2.5 定義損失函數(shù)

def squared_loss(y_hat, y):
    """均方損失"""
    # 這里的y.reshape其實是沒有必要的,因為labels在前面已經(jīng)reshape過了
    return (y_hat - y.reshape(y_hat.shape)) ** 2 / 2

3.2.6 定義優(yōu)化算法

def sgd(params, lr, batch_size):
    """小批量隨機梯度下降"""
    # 表示下一個代碼塊不需要進行梯度計算
    with torch.no_grad():
        for param in params:
            param -= lr * param.grad / batch_size
            # 清空梯度
            param.grad.zero_()

3.2.7 訓(xùn)練

lr = 0.03
num_epochs = 3
net = linreg
loss = squared_loss
for epoch in range(num_epochs):
    for X, y in data_iter(batch_size, features, labels):
        l = loss(net(X, w, b), y)  # X和y的小批量損失
        # 因為l形狀是(batch_size,1),而不是一個標量。l中的所有元素被加到一起,
        # 并以此計算關(guān)于[w,b]的梯度
        l.sum().backward()
        sgd([w, b], lr, batch_size)  # 使用參數(shù)的梯度更新參數(shù)
    with torch.no_grad():
        train_l = loss(net(features, w, b), labels)
        print(f'epoch {epoch + 1}, loss {float(train_l.mean()):f}')

3.3 線性回歸的簡潔實現(xiàn)

3.3.1 生成數(shù)據(jù)

這部分和 3.2.1 相同。

3.3.2 讀取數(shù)據(jù)集

from torch.utils import data

我們可以直接使用 data 中的 API 來進行樣本抽樣:

def load_array(data_arrays, batch_size, is_train=True):
    """構(gòu)造一個PyTorch數(shù)據(jù)迭代器"""
    # TensorDataset相當于把所有tensor打包,傳入的tensor的第0維必須相同
    # *的作用是“解壓”參數(shù)列表
    dataset = data.TensorDataset(*data_arrays)
    return data.DataLoader(dataset, batch_size, shuffle=is_train)
batch_size = 10
data_iter = load_array((features, labels), batch_size)
# 訪問數(shù)據(jù)
for input,label in data_iter:
    print(input,label)

3.3.3 定義模型

# nn是神經(jīng)網(wǎng)絡(luò)的縮寫
from torch import nn

net = nn.Sequential(nn.Linear(2, 1))

上面的代碼中,Sequential 可以將多個層串聯(lián)在一起;Linear 實現(xiàn)了全連接層,其參數(shù) 2,1 指定了輸入的形狀和輸出的形狀。

3.3.4 初始化模型參數(shù)

# net[0]表示選中網(wǎng)絡(luò)中的第0層
net[0].weight.data.normal_(0, 0.01)
net[0].bias.data.fill_(0)

3.3.5 定義損失函數(shù)

# 返回所有樣本損失的均值
loss = nn.MSELoss()

3.3.6 定義優(yōu)化算法

# SGD的輸入為參數(shù)和超參數(shù)
trainer = torch.optim.SGD(net.parameters(), lr=0.03)

3.3.7 訓(xùn)練

num_epochs = 3
for epoch in range(num_epochs):
    for X, y in data_iter:
        l = loss(net(X) ,y)
        trainer.zero_grad()
        l.backward()
        # 使用優(yōu)化器對參數(shù)進行更新
        trainer.step()
    l = loss(net(features), labels)
    print(f'epoch {epoch + 1}, loss {l:f}')

3.4 softmax回歸

3.4.1 分類問題

一般將不同的類別用獨熱編碼表示。

3.4.2 網(wǎng)絡(luò)架構(gòu)

假設(shè)每個樣本有 4 個特征和 3 種可能的類別,則 softmax 回歸的網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示:

《動手學深度學習》——線性神經(jīng)網(wǎng)絡(luò),動手學深度學習,深度學習,神經(jīng)網(wǎng)絡(luò),人工智能

3.4.3 全連接層的參數(shù)開銷

一般而言全連接層有 d d d 個輸入和 q q q 個輸出,則其參數(shù)開銷為 O ( d p ) O(dp) O(dp)

3.4.4 softmax運算

對于分類問題,我們想得到的是輸入屬于每一種類別的概率,所以我們要對輸出進行一定的處理,使之滿足概率基本公理:
y ^ = s o f t m a x ( o ) 其中 y ^ j = exp ? ( o j ) ∑ k exp ? ( o k ) \hat{\mathbf{y}} = \mathrm{softmax}(\mathbf{o})\quad \text{其中}\quad \hat{y}_j = \frac{\exp(o_j)}{\sum\limits_k \exp(o_k)} y^?=softmax(o)其中y^?j?=k?exp(ok?)exp(oj?)?
顯然, y ^ \hat{\mathbf{y}} y^? 的每個分量恒正且和為 1 1 1 ,且 softmax 不會改變 o \mathbf{o} o 之間的大小順序。

3.4.5 小批量樣本的矢量化

KaTeX parse error: Expected 'EOF', got '&' at position 13: \mathbf{O} &?= \mathbf{X} \m…

3.4.6 損失函數(shù)

softmax 回歸的似然函數(shù)為:
L ( θ ) = ∏ i = 1 n P ( y ( i ) ∣ x ( i ) ) L(\theta)=\prod\limits_{i=1}^n P(\mathbf{y}^{(i)} \mid \mathbf{x}^{(i)}) L(θ)=i=1n?P(y(i)x(i))
取負對數(shù),得:
? log ? L ( θ ) = ∑ i = 1 n ? log ? P ( y ( i ) ∣ x ( i ) ) = ∑ i = 1 n ∑ j = 1 q ? y j log ? y ^ j \begin{align} -\log L(\theta)&=\sum\limits_{i=1}^n -\log P(\mathbf{y}^{(i)} \mid \mathbf{x}^{(i)})\notag\\ &=\sum\limits_{i=1}^n\sum\limits_{j=1}^q-y_j\log \hat{y}_j \end{align} ?logL(θ)?=i=1n??logP(y(i)x(i))=i=1n?j=1q??yj?logy^?j???

解釋以下上面的式子:因為樣本的標簽是一個長度為 q q q 的獨熱編碼,所以里面的求和實際上就是求由輸入推出其標簽的條件的概率的負對數(shù),這與 ? log ? P ( y ( i ) ∣ x ( i ) ) -\log P(\mathbf{y}^{(i)} \mid \mathbf{x}^{(i)}) ?logP(y(i)x(i)) 是等價的。

稱:
l ( y , y ^ ) = ∑ j = 1 q ? y j log ? y ^ j l(\mathbf{y}, \hat{\mathbf{y}})=\sum\limits_{j=1}^q-y_j\log \hat{y}_j l(y,y^?)=j=1q??yj?logy^?j?
交叉熵損失(cross-entropy loss)。
l ( y , y ^ ) = ? ∑ j = 1 q y j log ? exp ? ( o j ) ∑ k = 1 q exp ? ( o k ) = ∑ j = 1 q y j log ? ∑ k = 1 q exp ? ( o k ) ? ∑ j = 1 q y j o j = log ? ∑ k = 1 q exp ? ( o k ) ? ∑ j = 1 q y j o j ? o j l ( y , y ^ ) = exp ? ( o j ) ∑ k = 1 q exp ? ( o k ) ? y j = s o f t m a x ( o ) j ? y j \begin{aligned} l(\mathbf{y}, \hat{\mathbf{y}}) &= - \sum_{j=1}^q y_j \log \frac{\exp(o_j)}{\sum_{k=1}^q \exp(o_k)}\notag \\ &= \sum_{j=1}^q y_j \log \sum_{k=1}^q \exp(o_k) - \sum_{j=1}^q y_j o_j\notag\\ &= \log \sum_{k=1}^q \exp(o_k) - \sum_{j=1}^q y_j o_j\notag\\ \partial_{o_j} l(\mathbf{y}, \hat{\mathbf{y}}) &= \frac{\exp(o_j)}{\sum_{k=1}^q \exp(o_k)} - y_j = \mathrm{softmax}(\mathbf{o})_j - y_j\notag \end{aligned} l(y,y^?)?oj??l(y,y^?)?=?j=1q?yj?logk=1q?exp(ok?)exp(oj?)?=j=1q?yj?logk=1q?exp(ok?)?j=1q?yj?oj?=logk=1q?exp(ok?)?j=1q?yj?oj?=k=1q?exp(ok?)exp(oj?)??yj?=softmax(o)j??yj??
可以看出,梯度是觀測值 y y y 和估計值 y ^ \hat{y} y^? 之間的差異,這使梯度計算在實踐中變得容易很多。

3.5 圖像分類數(shù)據(jù)集

3.5.2 讀取小批量數(shù)據(jù)

batch_size = 256

def get_dataloader_workers():
    """使用4個進程來讀取數(shù)據(jù)"""
    return 4

train_iter = data.DataLoader(mnist_train, batch_size, shuffle=True,
                             num_workers=get_dataloader_workers())

3.6 softmax回歸的從零開始實現(xiàn)

3.6.1 初始化模型參數(shù)

輸入是 28*28 的圖像,可以看作長度為 784 的向量;輸出為屬于 10 個可能的類別的概率,故 W W W 應(yīng)為 784*10 的矩陣, b b b 為 1*10 的行向量:

num_inputs = 784
num_outputs = 10

W = torch.normal(0, 0.01, size=(num_inputs, num_outputs), requires_grad=True)
b = torch.zeros(num_outputs, requires_grad=True)

3.6.2 定義softmax操作

實現(xiàn)softmax由三個步驟組成:

  1. 對每個項求冪;
  2. 對每一行求和(小批量中每個樣本是一行),得到每個樣本的規(guī)范化常數(shù);
  3. 將每一行除以其規(guī)范化常數(shù),確保結(jié)果的和為1。

對應(yīng)的代碼為:

def softmax(X):
    X_exp = torch.exp(X)
    # 確保求和之后張量的維度不變
    partition = X_exp.sum(1, keepdim=True)
    return X_exp / partition  # 這里應(yīng)用了廣播機制

3.6.3 定義模型

def net(X):
    return softmax(torch.matmul(X.reshape((-1, W.shape[0])), W) + b)

這里的輸入為什么只是一張圖像呢?

3.6.4 定義損失函數(shù)

def cross_entropy(y_hat, y):
    return - torch.log(y_hat[range(len(y_hat)), y])

cross_entropy(y_hat, y)

其中,y 為標簽列表,代表樣例的類別編號,如 [0,1,3] 。

3.6.5 分類精度

精度(accuracy)= 正確預(yù)測數(shù)量 / 總預(yù)測數(shù)量

def accuracy(y_hat, y):
    """計算預(yù)測正確的數(shù)量"""
    if len(y_hat.shape) > 1 and y_hat.shape[1] > 1:
        y_hat = y_hat.argmax(axis=1)
    cmp = y_hat.type(y.dtype) == y
    return float(cmp.type(y.dtype).sum())

上面的代碼表示:如果 y_hat 是矩陣,那么假定第二個維度存儲每個類的預(yù)測分數(shù)。 我們使用 argmax 獲得每行中最大元素的索引來獲得預(yù)測類別。 然后我們將預(yù)測類別與真實 y 元素進行比較。 由于等式運算符 “==” 對數(shù)據(jù)類型很敏感, 因此我們將 y_hat 的數(shù)據(jù)類型轉(zhuǎn)換為與 y 的數(shù)據(jù)類型一致。 結(jié)果是一個包含0(錯)和1(對)的張量。 最后,我們求和會得到正確預(yù)測的數(shù)量。

3.7 softmax回歸的簡潔實現(xiàn)

3.7.1 初始化模型參數(shù)

# PyTorch不會隱式地調(diào)整輸入的形狀。因此,
# 我們在線性層前定義了展平層(flatten),來調(diào)整網(wǎng)絡(luò)輸入的形狀
net = nn.Sequential(nn.Flatten(), nn.Linear(784, 10))

def init_weights(m):
    if type(m) == nn.Linear:
        nn.init.normal_(m.weight, std=0.01)

# apply會對net里的每一層執(zhí)行init_weights函數(shù)
# 所以init_weights函數(shù)里的m是用來限定只初始化Linear層參數(shù)的
net.apply(init_weights);

3.7.2 定義損失函數(shù)

CorssEntropyLoss 的輸入為 o \mathbf{o} o (未經(jīng)過 softmax)和標簽列表,輸出為交叉熵。也就是說,我們在計算損失的時候不需要將輸出通過 softmax 轉(zhuǎn)化為概率,這是因為 softmax 中的指數(shù)運算非常容易溢出。

# none表示不合并結(jié)果,即loss為一個列表,元素為每個樣本的交叉熵
# 這里之所以選擇none,是因為后面既要用到損失的總和,又要用到損失的均值
loss = nn.CrossEntropyLoss(reduction='none')

3.7.3 優(yōu)化算法

trainer = torch.optim.SGD(net.parameters(), lr=0.1)

3.7.4 訓(xùn)練

# 累加器類
class Accumulator:
    """在n個變量上累加"""
    def __init__(self, n):
        self.data = [0.0] * n
	
    # 將參數(shù)列表逐個加到累加器里
    def add(self, *args):
        self.data = [a + float(b) for a, b in zip(self.data, args)]

    def reset(self):
        self.data = [0.0] * len(self.data)

    def __getitem__(self, idx):
        return self.data[idx]
def train_epoch_ch3(net, train_iter, loss, updater):
    """訓(xùn)練模型一個迭代周期(定義見第3章)"""
    # 將模型設(shè)置為訓(xùn)練模式
    if isinstance(net, torch.nn.Module):
        net.train()
    # 訓(xùn)練損失總和、訓(xùn)練準確度總和、樣本數(shù)
    metric = Accumulator(3)
    for X, y in train_iter:
        # 計算梯度并更新參數(shù)
        y_hat = net(X)
        l = loss(y_hat, y)
        if isinstance(updater, torch.optim.Optimizer):
            # 使用PyTorch內(nèi)置的優(yōu)化器和損失函數(shù)
            updater.zero_grad()
            l.mean().backward()
            updater.step()
        metric.add(float(l.sum()), accuracy(y_hat, y), y.numel())
    # 返回訓(xùn)練損失和訓(xùn)練精度
    return metric[0] / metric[2], metric[1] / metric[2]
def evaluate_accuracy(net, data_iter):  #@save
    """計算在指定數(shù)據(jù)集上模型的精度"""
    if isinstance(net, torch.nn.Module):
        net.eval()  # 將模型設(shè)置為評估模式
    metric = Accumulator(2)  # 正確預(yù)測數(shù)、預(yù)測總數(shù)
    with torch.no_grad():
        for X, y in data_iter:
            # 這里的accuracy出自3.6.5
            metric.add(accuracy(net(X), y), y.numel())
    return metric[0] / metric[1]
def train_ch3(net, train_iter, test_iter, loss, num_epochs, updater):
    """訓(xùn)練模型(定義見第3章)"""
    animator = Animator(xlabel='epoch', xlim=[1, num_epochs], ylim=[0.3, 0.9],
                        legend=['train loss', 'train acc', 'test acc'])
    for epoch in range(num_epochs):
        # 訓(xùn)練一輪
        train_metrics = train_epoch_ch3(net, train_iter, loss, updater)
        # 在測試集上測試精度
        test_acc = evaluate_accuracy(net, test_iter)
        animator.add(epoch + 1, train_metrics + (test_acc,))
    train_loss, train_acc = train_metrics
    # 這條代碼的意思是:如果train_loss<0.5則繼續(xù)執(zhí)行,否則報錯,報錯內(nèi)容為"train_loss"
    assert train_loss < 0.5, train_loss
    assert train_acc <= 1 and train_acc > 0.7, train_acc
    assert test_acc <= 1 and test_acc > 0.7, test_acc
num_epochs = 10
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)

3.7.5 預(yù)測

使用 y_hat.argmax(axis=1) 即可。文章來源地址http://www.zghlxwxcb.cn/news/detail-522498.html

到了這里,關(guān)于《動手學深度學習》——線性神經(jīng)網(wǎng)絡(luò)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【動手學深度學習】現(xiàn)代卷積神經(jīng)網(wǎng)絡(luò)匯總

    【動手學深度學習】現(xiàn)代卷積神經(jīng)網(wǎng)絡(luò)匯總

    本文為作者閱讀學習李沐老師《動手學深度學習》一書的階段性讀書總結(jié),原書地址為:Dive into Deep Learning。 網(wǎng)絡(luò)結(jié)構(gòu) 實現(xiàn)代碼 網(wǎng)絡(luò)特征 最早發(fā)布的卷積神經(jīng)網(wǎng)絡(luò)之一。 每個卷積塊中的基本單元是一個卷積層、一個sigmoid激活函數(shù)和平均匯聚層。 網(wǎng)絡(luò)結(jié)構(gòu) 實現(xiàn)代碼 網(wǎng)絡(luò)特

    2024年02月07日
    瀏覽(18)
  • 自己動手實現(xiàn)一個深度學習算法——三、神經(jīng)網(wǎng)絡(luò)的學習

    自己動手實現(xiàn)一個深度學習算法——三、神經(jīng)網(wǎng)絡(luò)的學習

    這里所說的“學習”是指從訓(xùn)練數(shù)據(jù)中自動獲取最優(yōu)權(quán)重參數(shù)的過程 。為了使神經(jīng)網(wǎng)絡(luò)能進行學習,將導(dǎo)入 損失函數(shù) 這一指標。而學習的目的就是以該損失函數(shù)為基準,找出能使它的值達到最小的權(quán)重參數(shù)。為了找出盡可能小的損失函數(shù)的值,利用了 函數(shù)斜率的梯度法 。

    2024年02月05日
    瀏覽(26)
  • 動手學深度學習—卷積神經(jīng)網(wǎng)絡(luò)(原理解釋+代碼詳解)

    動手學深度學習—卷積神經(jīng)網(wǎng)絡(luò)(原理解釋+代碼詳解)

    多層感知機對圖像處理是百萬維度,模型不可實現(xiàn)。 如果要在圖片中找到某個物體,尋找方法應(yīng)該和物體位置無關(guān)。 適合 計算機視覺 的神經(jīng)網(wǎng)絡(luò)架構(gòu): 平移不變性 :不管檢測對象出現(xiàn)在圖像中的哪個位置,神經(jīng)網(wǎng)絡(luò)前幾層應(yīng)該對相同圖像區(qū)域有相似的反應(yīng)。 局部性 :神

    2024年02月14日
    瀏覽(23)
  • 《動手學深度學習》學習筆記 第9章 現(xiàn)代循環(huán)神經(jīng)網(wǎng)絡(luò)

    《動手學深度學習》學習筆記 第9章 現(xiàn)代循環(huán)神經(jīng)網(wǎng)絡(luò)

    書籍鏈接: 動手學深度學習 筆記是從第四章開始,前面三章為基礎(chǔ)知識,有需要的可以自己去看看 關(guān)于本系列筆記: 書里為了讓讀者更好的理解,有大篇幅的描述性的文字,內(nèi)容很多,筆記只保留主要內(nèi)容,同時也是對之前知識的查漏補缺 《動手學深度學習》學習筆記 第

    2024年01月18日
    瀏覽(34)
  • 《動手學深度學習 Pytorch版》 9.4 雙向循環(huán)神經(jīng)網(wǎng)絡(luò)

    《動手學深度學習 Pytorch版》 9.4 雙向循環(huán)神經(jīng)網(wǎng)絡(luò)

    之前的序列學習中假設(shè)的目標是在給定觀測的情況下對下一個輸出進行建模,然而也存在需要后文預(yù)測前文的情況。 數(shù)學推導(dǎo)太復(fù)雜了,略。 雙向循環(huán)神經(jīng)網(wǎng)絡(luò)(bidirectional RNNs)添加了反向傳遞信息的隱藏層,以便更靈活地處理此類信息。 前向和反向隱狀態(tài)的更新如下:

    2024年02月07日
    瀏覽(21)
  • 深度學習——第7章 項目實戰(zhàn):自己動手寫一個神經(jīng)網(wǎng)絡(luò)模型

    深度學習——第7章 項目實戰(zhàn):自己動手寫一個神經(jīng)網(wǎng)絡(luò)模型

    7.1 導(dǎo)入數(shù)據(jù)集 7.2 定義神經(jīng)網(wǎng)絡(luò)輸入層、隱藏層、輸出層神經(jīng)元個數(shù) 7.3 網(wǎng)絡(luò)參數(shù)W和b初始化 7.4 正向傳播過程 7.5 損失函數(shù) 7.6 反向傳播過程 7.7 網(wǎng)絡(luò)參數(shù)更新 7.8 搭建整個神經(jīng)網(wǎng)絡(luò)模型 7.9 模型訓(xùn)練 7.10 模型預(yù)測 7.11 隱藏層神經(jīng)元個數(shù)對分類效果的影響 上一課主要介紹了最簡

    2024年01月16日
    瀏覽(22)
  • 【AI】《動手學-深度學習-PyTorch版》筆記(十八):卷積神經(jīng)網(wǎng)絡(luò)模型

    【AI】《動手學-深度學習-PyTorch版》筆記(十八):卷積神經(jīng)網(wǎng)絡(luò)模型

    發(fā)布時間:1989年 模型目的:識別手寫數(shù)字 1.3.1 相關(guān)函數(shù)原型 1)nn.Conv2d:卷積層

    2024年02月13日
    瀏覽(90)
  • 十 動手學深度學習v2 ——卷積神經(jīng)網(wǎng)絡(luò)之NiN + GoogLeNet

    十 動手學深度學習v2 ——卷積神經(jīng)網(wǎng)絡(luò)之NiN + GoogLeNet

    NiN塊使用卷積層加兩個1x1卷積層 后者對每個像素增加了非線性性 NiN使用全局平均池化層來替代VGG和AlexNet中的全連接層 不容易過擬合,更少的參數(shù)個數(shù) Inception塊由四條并行路徑組成。 前三條路徑使用窗口大小為1x1、3x3和5x5的卷積層,從不同空間大小中提取信息。 中間的兩條

    2024年02月09日
    瀏覽(93)
  • 【AI】《動手學-深度學習-PyTorch版》筆記(十七):卷積神經(jīng)網(wǎng)絡(luò)入門

    我們在前面學習的多層感知機中,已經(jīng)認識了全鏈接層,缺點很明顯,在稍微大點的網(wǎng)絡(luò)模型中,參數(shù)成指數(shù)級別增長。參數(shù)量很快就達到數(shù)十億,這樣的量級幾乎無法計算。為此科學家們想出一個減少參數(shù)的方法:卷積。 從全鏈接層到卷積的推論,使用如下兩個原則: 平

    2024年02月13日
    瀏覽(59)
  • 16 PyTorch 神經(jīng)網(wǎng)絡(luò)基礎(chǔ)【李沐動手學深度學習v2】

    16 PyTorch 神經(jīng)網(wǎng)絡(luò)基礎(chǔ)【李沐動手學深度學習v2】

    在構(gòu)造自定義塊之前,我們先回顧一下多層感知機的代碼。 下面的代碼生成一個網(wǎng)絡(luò),其中包含一個具有256個單元和ReLU激活函數(shù)的全連接隱藏層, 然后是一個具有10個隱藏單元且不帶激活函數(shù)的全連接輸出層。 層和塊 構(gòu)造單層神經(jīng)網(wǎng)咯:線性層+RELU+線性層 生成2x20(2是批量

    2024年03月10日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包