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

Chatgpt論文筆記——GPT1詳細(xì)解讀與可運(yùn)行的代碼

這篇具有很好參考價(jià)值的文章主要介紹了Chatgpt論文筆記——GPT1詳細(xì)解讀與可運(yùn)行的代碼。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言

論文:https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf
時(shí)間:2018年6月
貢獻(xiàn):

提出了大規(guī)模數(shù)據(jù)上無(wú)監(jiān)督預(yù)訓(xùn)練然后在目標(biāo)任務(wù)上有監(jiān)督finetune的范式。

具體實(shí)現(xiàn)

當(dāng)時(shí)由于NLP領(lǐng)域不存在像圖像領(lǐng)域中ImageNet那樣百萬(wàn)級(jí)別標(biāo)注的數(shù)據(jù)(并且圖像的像素包含了比句子更豐富的信息,百萬(wàn)級(jí)別的圖像標(biāo)注數(shù)據(jù)相當(dāng)于千萬(wàn)級(jí)別的句子標(biāo)注數(shù)據(jù)),所以當(dāng)時(shí)NLP的發(fā)展比較緩慢。本文相當(dāng)于開(kāi)疆拓土采用了在大規(guī)模數(shù)據(jù)上進(jìn)行無(wú)監(jiān)督預(yù)訓(xùn)練然后再目標(biāo)任務(wù)上進(jìn)行有監(jiān)督finetune的嘗試。
最后實(shí)驗(yàn)的效果是在12個(gè)NLP任務(wù)上,9個(gè)取得了超過(guò)SOTA的效果:
Chatgpt論文筆記——GPT1詳細(xì)解讀與可運(yùn)行的代碼

模型結(jié)構(gòu)

GPT的模型結(jié)構(gòu)核心組建是transformer的decoder模塊,為什么用transformer而不用經(jīng)典的RNN或者LSTM,GRU之類(lèi)呢?因?yàn)樽髡咴谡撐闹姓f(shuō)到,相比于RNN,transformer學(xué)到的特征更加的穩(wěn)健一些,這個(gè)可能還是跟transformer里面的self attention有關(guān),它更加的結(jié)構(gòu)化并且可以學(xué)習(xí)了token和token之間的關(guān)系,對(duì)句子的理解更加的深刻。
完整的GPT1模型結(jié)構(gòu)也比較簡(jiǎn)單:
Chatgpt論文筆記——GPT1詳細(xì)解讀與可運(yùn)行的代碼
整體采用了12個(gè)transformer的decoder模塊構(gòu)成,其實(shí)這里說(shuō)的decoder給我造成了很多誤解,我記得transformer的decoder部分長(zhǎng)這樣:
Chatgpt論文筆記——GPT1詳細(xì)解讀與可運(yùn)行的代碼
但是看GPT論文的結(jié)構(gòu)又是transformer的encoder的樣子:
Chatgpt論文筆記——GPT1詳細(xì)解讀與可運(yùn)行的代碼
所以一直沒(méi)明白為啥說(shuō)用的是decoder,仔細(xì)看了下別人實(shí)現(xiàn)的代碼才發(fā)現(xiàn)了,主要是GPT僅僅用了單向的transformer,也就是mask multi head self attention,也就是transformer的decoder模塊的這部分:
Chatgpt論文筆記——GPT1詳細(xì)解讀與可運(yùn)行的代碼
但是整個(gè)結(jié)構(gòu)還是還是encoder一樣的,只是MHA這個(gè)地方用了mask所以說(shuō)成了用了decoder部分。
至于為什么用帶Mask的MHA呢?

GPT中因?yàn)橐瓿烧Z(yǔ)言模型的訓(xùn)練,也就要求Pre-Training預(yù)測(cè)下一個(gè)詞的時(shí)候只能夠看見(jiàn)當(dāng)前以及之前的詞,這也是GPT放棄原本Transformer的雙向結(jié)構(gòu)轉(zhuǎn)而采用單向結(jié)構(gòu)的原因。

代碼

沒(méi)有代碼是不完整的,直接上模型結(jié)構(gòu)的代碼

import torch
import torch.nn as nn


class ScaledDotProductAttention(nn.Module):
    def __init__(self, d_k, attn_pdrop):
        super(ScaledDotProductAttention, self).__init__()
        self.d_k = d_k

        self.dropout = nn.Dropout(attn_pdrop)

    def forward(self, q, k, v, attn_mask):
        # |q| : (batch_size, n_heads, q_len, d_k)
        # |k| : (batch_size, n_heads, k_len, d_k)
        # |v| : (batch_size, n_heads, v_len, d_v)
        # |attn_mask| : (batch_size, n_heads, q_len, k_len)

        attn_score = torch.matmul(q, k.transpose(-1, -2)) / (self.d_k ** 0.5)
        attn_score.masked_fill_(attn_mask, -1e9)
        # |attn_scroe| : (batch_size, n_heads, q_len, k_len)

        attn_weights = nn.Softmax(dim=-1)(attn_score)
        attn_weights = self.dropout(attn_weights)
        # |attn_weights| : (batch_size, n_heads, q_len, k_len)

        output = torch.matmul(attn_weights, v)
        # |output| : (batch_size, n_heads, q_len, d_v)

        return output, attn_weights


class MultiHeadAttention(nn.Module):
    def __init__(self, d_model, n_heads, attn_pdrop):
        super(MultiHeadAttention, self).__init__()
        self.n_heads = n_heads
        self.d_k = self.d_v = d_model // n_heads

        self.WQ = nn.Linear(d_model, d_model)
        self.WK = nn.Linear(d_model, d_model)
        self.WV = nn.Linear(d_model, d_model)
        self.scaled_dot_product_attn = ScaledDotProductAttention(self.d_k, attn_pdrop)
        self.linear = nn.Linear(n_heads * self.d_v, d_model)

    def forward(self, Q, K, V, attn_mask):
        # |Q| : (batch_size, q_len(=seq_len), d_model)
        # |K| : (batch_size, k_len(=seq_len), d_model)
        # |V| : (batch_size, v_len(=seq_len), d_model)
        # |attn_mask| : (batch_size, q_len, k_len)
        batch_size = Q.size(0)

        q_heads = self.WQ(Q).view(batch_size, -1, self.n_heads, self.d_k).transpose(1, 2)
        k_heads = self.WK(K).view(batch_size, -1, self.n_heads, self.d_k).transpose(1, 2)
        v_heads = self.WV(V).view(batch_size, -1, self.n_heads, self.d_v).transpose(1, 2)
        # |q_heads| : (batch_size, n_heads, q_len, d_k), |k_heads| : (batch_size, n_heads, k_len, d_k), |v_heads| : (batch_size, n_heads, v_len, d_v)

        attn_mask = attn_mask.unsqueeze(1).repeat(1, self.n_heads, 1, 1)
        # |attn_mask| : (batch_size, n_heads, q_len, k_len)
        attn, attn_weights = self.scaled_dot_product_attn(q_heads, k_heads, v_heads, attn_mask)
        # |attn| : (batch_size, n_heads, q_len, d_v)
        # |attn_weights| : (batch_size, n_heads, q_len, k_len)

        attn = attn.transpose(1, 2).contiguous().view(batch_size, -1, self.n_heads * self.d_v)
        # |attn| : (batch_size, q_len, n_heads * d_v)
        outputs = self.linear(attn)
        # |outputs| : (batch_size, q_len, d_model)

        return outputs, attn_weights


class PositionWiseFeedForwardNetwork(nn.Module):
    def __init__(self, d_model, d_ff):
        super(PositionWiseFeedForwardNetwork, self).__init__()

        self.linear1 = nn.Linear(d_model, d_ff)
        self.linear2 = nn.Linear(d_ff, d_model)
        self.gelu = nn.GELU()

        nn.init.normal_(self.linear1.weight, std=0.02)
        nn.init.normal_(self.linear2.weight, std=0.02)

    def forward(self, inputs):
        # |inputs| : (batch_size, seq_len, d_model)

        outputs = self.gelu(self.linear1(inputs))
        # |outputs| : (batch_size, seq_len, d_ff)
        outputs = self.linear2(outputs)
        # |outputs| : (batch_size, seq_len, d_model)

        return outputs


class DecoderLayer(nn.Module):
    def __init__(self, d_model, n_heads, d_ff, attn_pdrop, resid_pdrop):
        super(DecoderLayer, self).__init__()

        self.mha = MultiHeadAttention(d_model, n_heads, attn_pdrop)
        self.dropout1 = nn.Dropout(resid_pdrop)
        self.layernorm1 = nn.LayerNorm(d_model, eps=1e-5)

        self.ffn = PositionWiseFeedForwardNetwork(d_model, d_ff)
        self.dropout2 = nn.Dropout(resid_pdrop)
        self.layernorm2 = nn.LayerNorm(d_model, eps=1e-5)

    def forward(self, inputs, attn_mask):
        # |inputs| : (batch_size, seq_len, d_model)
        # |attn_mask| : (batch_size, seq_len, seq_len)

        attn_outputs, attn_weights = self.mha(inputs, inputs, inputs, attn_mask)
        attn_outputs = self.dropout1(attn_outputs)
        attn_outputs = self.layernorm1(inputs + attn_outputs)
        # |attn_outputs| : (batch_size, seq_len, d_model)
        # |attn_weights| : (batch_size, n_heads, q_len(=seq_len), k_len(=seq_len))

        ffn_outputs = self.ffn(attn_outputs)
        ffn_outputs = self.dropout2(ffn_outputs)
        ffn_outputs = self.layernorm2(attn_outputs + ffn_outputs)
        # |ffn_outputs| : (batch_size, seq_len, d_model)

        return ffn_outputs, attn_weights


class TransformerDecoder(nn.Module):
    def __init__(self, vocab_size, seq_len, d_model, n_layers, n_heads, d_ff, embd_pdrop, attn_pdrop, resid_pdrop,
                 pad_id):
        super(TransformerDecoder, self).__init__()
        self.pad_id = pad_id

        # layers
        self.embedding = nn.Embedding(vocab_size, d_model)
        self.dropout = nn.Dropout(embd_pdrop)
        self.pos_embedding = nn.Embedding(seq_len + 1, d_model)
        self.layers = nn.ModuleList(
            [DecoderLayer(d_model, n_heads, d_ff, attn_pdrop, resid_pdrop) for _ in range(n_layers)])

        nn.init.normal_(self.embedding.weight, std=0.02)

    def forward(self, inputs):
        # |inputs| : (batch_size, seq_len)
        positions = torch.arange(inputs.size(1), device=inputs.device, dtype=inputs.dtype).repeat(inputs.size(0), 1) + 1
        position_pad_mask = inputs.eq(self.pad_id)
        positions.masked_fill_(position_pad_mask, 0)
        # |positions| : (batch_size, seq_len)

        outputs = self.dropout(self.embedding(inputs)) + self.pos_embedding(positions)
        # |outputs| : (batch_size, seq_len, d_model)

        attn_pad_mask = self.get_attention_padding_mask(inputs, inputs, self.pad_id)
        # |attn_pad_mask| : (batch_size, seq_len, seq_len)
        subsequent_mask = self.get_attention_subsequent_mask(inputs).to(device=attn_pad_mask.device)
        # |subsequent_mask| : (batch_size, seq_len, seq_len)
        attn_mask = torch.gt((attn_pad_mask.to(dtype=subsequent_mask.dtype) + subsequent_mask), 0)
        # |attn_mask| : (batch_size, seq_len, seq_len)

        attention_weights = []
        for layer in self.layers:
            outputs, attn_weights = layer(outputs, attn_mask)
            # |outputs| : (batch_size, seq_len, d_model)
            # |attn_weights| : (batch_size, n_heads, seq_len, seq_len)
            attention_weights.append(attn_weights)

        return outputs, attention_weights

    def get_attention_padding_mask(self, q, k, pad_id):
        attn_pad_mask = k.eq(pad_id).unsqueeze(1).repeat(1, q.size(1), 1)
        # |attn_pad_mask| : (batch_size, q_len, k_len)

        return attn_pad_mask

    def get_attention_subsequent_mask(self, q):
        bs, q_len = q.size()
        subsequent_mask = torch.ones(bs, q_len, q_len).triu(diagonal=1)
        # |subsequent_mask| : (batch_size, q_len, q_len)

        return subsequent_mask


class GPT(nn.Module):
    def __init__(self,
                 vocab_size,
                 seq_len=512,
                 d_model=768,
                 n_layers=12,
                 n_heads=12,
                 d_ff=3072,
                 embd_pdrop=0.1,
                 attn_pdrop=0.1,
                 resid_pdrop=0.1,
                 pad_id=0):
        super(GPT, self).__init__()

        self.decoder = TransformerDecoder(vocab_size, seq_len, d_model, n_layers, n_heads, d_ff,
                                          embd_pdrop, attn_pdrop, resid_pdrop, pad_id)

    def forward(self, inputs):
        # |inputs| : (batch_size, seq_len)

        outputs, attention_weights = self.decoder(inputs)
        # |outputs| : (batch_size, seq_len, d_model)
        # |attention_weights| : [(batch_size, n_heads, seq_len, seq_len)] * n_layers

        return outputs, attention_weights



if __name__ == '__main__':
    model = GPT(vocab_size=10000)
    print(model)
    input = torch.ones(16, 128).long()
    out = model(input)
    print(out[0].shape)

看著很長(zhǎng),其實(shí)代碼很簡(jiǎn)單,就是翻譯這張圖:
Chatgpt論文筆記——GPT1詳細(xì)解讀與可運(yùn)行的代碼
首先GPT這個(gè)類(lèi)就是定義了12層transformer的decoder構(gòu)成的:
Chatgpt論文筆記——GPT1詳細(xì)解讀與可運(yùn)行的代碼
vocab_size是詞典的大小,就比如說(shuō)英文一共有10w個(gè)單詞,那么vocab_size就是10w。用來(lái)配合nn.embedding
模塊把單詞抽成embedding。
然后每個(gè)decoder里面就是對(duì)著圖寫(xiě)代碼了,其中比較核心的就是兩個(gè)mask:
Chatgpt論文筆記——GPT1詳細(xì)解讀與可運(yùn)行的代碼文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-503115.html

  • 第一個(gè)mask很好理解,因?yàn)榫渥拥拈L(zhǎng)度不一樣,比如【good morning】和【nice to meet you】,一個(gè)長(zhǎng)度是2一個(gè)是4,這樣兩個(gè)句子沒(méi)辦法組成訓(xùn)練數(shù)據(jù),所以一般會(huì)把短的padding一下成【good morning pad pad】這樣就長(zhǎng)度一樣可以組成訓(xùn)練數(shù)據(jù)了,圖上第一個(gè)pad mask就是用于【good morning pad pad】這個(gè)里面那些是pad的部分,然后不參與self attention的計(jì)算。
  • 第二個(gè)mask就是之前我困惑的地方為啥叫decoder,decoder用的是帶mask的MHA,這個(gè)mask就是圖上的第二個(gè)框,他把某個(gè)單詞后的單詞都進(jìn)行的mask。舉個(gè)例子,還是【nice to meet you】,對(duì)于nice單詞它的mask就是【0,1,1,1】,對(duì)于meet單詞,它的mask就是【0,0,0,1】,這樣從左往右相當(dāng)于去了全1矩陣的上三角的1,所以這里的mask用pytorch的triu實(shí)現(xiàn)的:
    subsequent_mask = torch.ones(bs, q_len, q_len).triu(diagonal=1)

到了這里,關(guān)于Chatgpt論文筆記——GPT1詳細(xì)解讀與可運(yùn)行的代碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Visual ChatGPT原理解讀——大模型論文閱讀筆記四

    Visual ChatGPT原理解讀——大模型論文閱讀筆記四

    論文:https://arxiv.org/abs/2303.04671 代碼:https://github.com/microsoft/TaskMatrix 如圖所示,用戶上傳一張黃花的圖像并輸入一個(gè)復(fù)雜的語(yǔ)言指令“請(qǐng)根據(jù)該圖像的預(yù)測(cè)深度生成一朵紅花,然后逐步使其像卡通一樣”。 在交互管理器的幫助下,Visual ChatGPT 開(kāi)始了相關(guān)視覺(jué)基礎(chǔ)模型的執(zhí)行

    2024年02月09日
    瀏覽(19)
  • 建議收藏:超詳細(xì)ChatGPT(GPT 4.0)論文潤(rùn)色指南+最全提示詞/咒語(yǔ)

    建議收藏:超詳細(xì)ChatGPT(GPT 4.0)論文潤(rùn)色指南+最全提示詞/咒語(yǔ)

    在這篇文章中,我將分享如何利用ChatGPT 4.0輔助論文寫(xiě)作的技巧,并根據(jù)網(wǎng)上的資料和最新的研究補(bǔ)充更多好用的咒語(yǔ)技巧。 本篇文章持續(xù)更新,祝大家寫(xiě)作順利,如果對(duì)你有幫助,歡迎轉(zhuǎn)發(fā)、推薦、分享! 溫馨提示: 如果嚴(yán)肅對(duì)待這件事,請(qǐng)用GPT-4,別用GPT-3.5! 咒語(yǔ)心法

    2023年04月09日
    瀏覽(53)
  • 升級(jí)篇:超詳細(xì)ChatGPT(GPT 4.0)論文潤(rùn)色指南+最全提示詞/咒語(yǔ)

    升級(jí)篇:超詳細(xì)ChatGPT(GPT 4.0)論文潤(rùn)色指南+最全提示詞/咒語(yǔ)

    在這篇文章中,我將分享如何利用ChatGPT 4.0輔助論文寫(xiě)作的技巧,并根據(jù)網(wǎng)上的資料和最新的研究補(bǔ)充更多好用的咒語(yǔ)技巧。 本篇文章持續(xù)更新,祝大家寫(xiě)作順利,如果對(duì)你有幫助,歡迎轉(zhuǎn)發(fā)、推薦、分享! 溫馨提示: 如果嚴(yán)肅對(duì)待這件事,請(qǐng)用GPT-4,別用GPT-3.5! 咒語(yǔ)心法

    2023年04月09日
    瀏覽(28)
  • 【論文筆記】——從transformer、bert、GPT-1、2、3到ChatGPT

    【論文筆記】——從transformer、bert、GPT-1、2、3到ChatGPT

    18年有bert和gpt這兩個(gè)語(yǔ)言模型,分別源自transformer的編碼器和解碼器,都是無(wú)監(jiān)督方式訓(xùn)練的 GPT-1用的是無(wú)監(jiān)督預(yù)訓(xùn)練+有監(jiān)督微調(diào) GPT-2用的是純無(wú)監(jiān)督預(yù)訓(xùn)練。提升了網(wǎng)絡(luò)層數(shù)和訓(xùn)練數(shù)據(jù)量 GPT-3沿用了GPT-2的純無(wú)監(jiān)督預(yù)訓(xùn)練,但是數(shù)據(jù)大了好幾個(gè)量級(jí) InstructGPT在GPT-3上用來(lái)自人

    2024年02月09日
    瀏覽(18)
  • 【YOLO系列】YOLOv3論文超詳細(xì)解讀(翻譯 +學(xué)習(xí)筆記)

    【YOLO系列】YOLOv3論文超詳細(xì)解讀(翻譯 +學(xué)習(xí)筆記)

    YOLOv3(《Yolov3:An incremental improvement》)是Joseph Redmon大佬關(guān)于YOLO系列的最后一篇,由于他反對(duì)將YOLO用于軍事和隱私窺探,2020年2月宣布停止更新YOLO。 ?YOLOv3在YOLOv2的基礎(chǔ)上改良了網(wǎng)絡(luò)的主干,利用多尺度特征圖進(jìn)行檢測(cè),改進(jìn)了多個(gè)獨(dú)立的Logistic regression分類(lèi)器來(lái)取代softmax來(lái)

    2024年02月07日
    瀏覽(32)
  • 【YOLO系列】YOLOv7論文超詳細(xì)解讀(翻譯 +學(xué)習(xí)筆記)

    【YOLO系列】YOLOv7論文超詳細(xì)解讀(翻譯 +學(xué)習(xí)筆記)

    終于讀到傳說(shuō)中的YOLOv7了~???? 這篇是在美團(tuán)的v6出來(lái)不到一個(gè)月就高調(diào)登場(chǎng),作者還是我們熟悉的AB大神(對(duì),就是v4那個(gè)),讀起來(lái)又是“熟悉”的感覺(jué)(貫穿了我的整個(gè)五一假期(╯-_-)╯╧╧)。 其實(shí)關(guān)于YOLOv7的網(wǎng)絡(luò)結(jié)構(gòu)還有很多細(xì)節(jié)值得深入研究,以及代碼

    2024年02月02日
    瀏覽(28)
  • 【YOLO系列】YOLOv1論文超詳細(xì)解讀(翻譯 +學(xué)習(xí)筆記)

    【YOLO系列】YOLOv1論文超詳細(xì)解讀(翻譯 +學(xué)習(xí)筆記)

    從這篇開(kāi)始,我們將進(jìn)入YOLO的學(xué)習(xí)。YOLO是目前比較流行的目標(biāo)檢測(cè)算法,速度快且結(jié)構(gòu)簡(jiǎn)單,其他的目標(biāo)檢測(cè)算法如RCNN系列,以后有時(shí)間的話再介紹。 本文主要介紹的是YOLOV1,這是由以Joseph Redmon為首的大佬們于2015年提出的一種新的目標(biāo)檢測(cè)算法。它與之前的目標(biāo)檢測(cè)算法

    2024年02月04日
    瀏覽(47)
  • 【YOLO系列】YOLOv2論文超詳細(xì)解讀(翻譯 +學(xué)習(xí)筆記)

    【YOLO系列】YOLOv2論文超詳細(xì)解讀(翻譯 +學(xué)習(xí)筆記)

    時(shí)隔一年,YOLOv2隆重登場(chǎng),新的YOLO版本論文叫《YOLO9000: Better, Faster, Stronger》,作者 Joseph Redmon 和 Ali Farhadi 在 YOLOv1 的基礎(chǔ)上,進(jìn)行了大量改進(jìn),提出了 YOLOv2 和 YOLO9000,重點(diǎn)解決YOLOv1召回率和定位精度方面的不足。 論文原文:[1612.08242] YOLO9000: Better, Faster, Stronger (arxiv.org) 項(xiàng)

    2023年04月08日
    瀏覽(32)
  • 經(jīng)典神經(jīng)網(wǎng)絡(luò)論文超詳細(xì)解讀(六)——DenseNet學(xué)習(xí)筆記(翻譯+精讀+代碼復(fù)現(xiàn))

    經(jīng)典神經(jīng)網(wǎng)絡(luò)論文超詳細(xì)解讀(六)——DenseNet學(xué)習(xí)筆記(翻譯+精讀+代碼復(fù)現(xiàn))

    上一篇我們介紹了ResNet:經(jīng)典神經(jīng)網(wǎng)絡(luò)論文超詳細(xì)解讀(五)——ResNet(殘差網(wǎng)絡(luò))學(xué)習(xí)筆記(翻譯+精讀+代碼復(fù)現(xiàn)) ResNet通過(guò)短路連接,可以訓(xùn)練出更深的CNN模型,從而實(shí)現(xiàn)更高的準(zhǔn)確度。今天我們要介紹的是 DenseNet(《Densely connected convolutional networks》) 模型,它的基本

    2024年02月03日
    瀏覽(62)
  • 經(jīng)典神經(jīng)網(wǎng)絡(luò)論文超詳細(xì)解讀(八)——ResNeXt學(xué)習(xí)筆記(翻譯+精讀+代碼復(fù)現(xiàn))

    經(jīng)典神經(jīng)網(wǎng)絡(luò)論文超詳細(xì)解讀(八)——ResNeXt學(xué)習(xí)筆記(翻譯+精讀+代碼復(fù)現(xiàn))

    今天我們一起來(lái)學(xué)習(xí)何愷明大神的又一經(jīng)典之作:? ResNeXt(《Aggregated Residual Transformations for Deep Neural Networks》) 。這個(gè)網(wǎng)絡(luò)可以被解釋為 VGG、ResNet?和 Inception 的結(jié)合體,它通過(guò)重復(fù)多個(gè)block(如在 VGG 中)塊組成,每個(gè)block塊聚合了多種轉(zhuǎn)換(如 Inception),同時(shí)考慮到跨層

    2024年02月03日
    瀏覽(30)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包