成人av在线资源一区,亚洲av日韩av一区,欧美丰满熟妇乱XXXXX图片,狠狠做五月深爱婷婷伊人,桔子av一区二区三区,四虎国产精品永久在线网址,国产尤物精品人妻在线,中文字幕av一区二区三区欲色
    您正在使用IE低版瀏覽器,為了您的雷峰網賬號安全和更好的產品體驗,強烈建議使用更快更安全的瀏覽器
    此為臨時鏈接,僅用于文章預覽,將在時失效
    人工智能開發者 正文
    發私信給AI研習社
    發送

    0

    PyTorch 的預訓練,是時候學習一下了

    本文作者: AI研習社 編輯:賈智龍 2017-05-02 18:10
    導語:PyTorch又簡潔又快,你試過么?

    前言

    最近使用 PyTorch 感覺妙不可言,有種當初使用 Keras 的快感,而且速度還不慢。各種設計直接簡潔,方便研究,比 tensorflow 的臃腫好多了。今天讓我們來談談 PyTorch 的預訓練,主要是自己寫代碼的經驗以及論壇 PyTorch Forums上的一些回答的總結整理。

    直接加載預訓練模型

    如果我們使用的模型和原模型完全一樣,那么我們可以直接加載別人訓練好的模型:

    my_resnet = MyResNet(*args, **kwargs)
    my_resnet.load_state_dict(torch.load("my_resnet.pth"))

    當然這樣的加載方法是基于 PyTorch 推薦的存儲模型的方法:

    torch.save(my_resnet.state_dict(), "my_resnet.pth")

    還有第二種加載方法:

    my_resnet = torch.load("my_resnet.pth")

    加載部分預訓練模型

    其實大多數時候我們需要根據我們的任務調節我們的模型,所以很難保證模型和公開的模型完全一樣,但是預訓練模型的參數確實有助于提高訓練的準確率,為了結合二者的優點,就需要我們加載部分預訓練模型。

    pretrained_dict = model_zoo.load_url(model_urls['resnet152'])

    model_dict = model.state_dict()

    # 將pretrained_dict里不屬于model_dict的鍵剔除掉

    pretrained_dict = {k: v for k, v in pretrained_dict.items() if k in model_dict}

    # 更新現有的model_dict

    model_dict.update(pretrained_dict)

    # 加載我們真正需要的state_dict

    model.load_state_dict(model_dict)

    因為需要剔除原模型中不匹配的鍵,也就是層的名字,所以我們的新模型改變了的層需要和原模型對應層的名字不一樣,比如:resnet 最后一層的名字是 fc(PyTorch 中),那么我們修改過的 resnet 的最后一層就不能取這個名字,可以叫 fc_

    微改基礎模型預訓練

    對于改動比較大的模型,我們可能需要自己實現一下再加載別人的預訓練參數。但是,對于一些基本模型 PyTorch 中已經有了,而且我只想進行一些小的改動那么怎么辦呢?難道我又去實現一遍嗎?當然不是。

    我們首先看看怎么進行微改模型。

    微改基礎模型

    PyTorch 中的 torchvision 里已經有很多常用的模型了,可以直接調用:

    • AlexNet

    • VGG

    • ResNet

    • SqueezeNet

    • DenseNet

    import torchvision.models as models

    resnet18 = models.resnet18()

    alexnet = models.alexnet()

    squeezenet = models.squeezenet1_0()

    densenet = models.densenet_161()

    但是對于我們的任務而言有些層并不是直接能用,需要我們微微改一下,比如,resnet 最后的全連接層是分 1000 類,而我們只有 21 類;又比如,resnet 第一層卷積接收的通道是 3, 我們可能輸入圖片的通道是 4,那么可以通過以下方法修改:

    resnet.conv1 = nn.Conv2d(4, 64, kernel_size=7, stride=2, padding=3, bias=False)

    resnet.fc = nn.Linear(2048, 21)

    簡單預訓練

    模型已經改完了,接下來我們就進行簡單預訓練吧。
    我們先從 torchvision 中調用基本模型,加載預訓練模型,然后,重點來了,將其中的層直接替換為我們需要的層即可

    resnet = torchvision.models.resnet152(pretrained=True)

    # 原本為1000類,改為10類

    resnet.fc = torch.nn.Linear(2048, 10)

    其中使用了 pretrained 參數,會直接加載預訓練模型,內部實現和前文提到的加載預訓練的方法一樣。因為是先加載的預訓練參數,相當于模型中已經有參數了,所以替換掉最后一層即可。OK!

    雷鋒網按:本文作者ycszen,文章原載于作者的知乎專欄


    實戰特訓:遠場語音交互技術  

    智能音箱這么火,聽聲智科技CTO教你深入解析AI設備語音交互關鍵技術!

    課程鏈接:http://www.mooc.ai/course/80

    加入AI慕課學院人工智能學習交流QQ群:624413030,與AI同行一起交流成長

    雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知

    PyTorch 的預訓練,是時候學習一下了

    分享:
    相關文章

    編輯

    聚焦數據科學,連接 AI 開發者。更多精彩內容,請訪問:yanxishe.com
    當月熱門文章
    最新文章
    請填寫申請人資料
    姓名
    電話
    郵箱
    微信號
    作品鏈接
    個人簡介
    為了您的賬戶安全,請驗證郵箱
    您的郵箱還未驗證,完成可獲20積分喲!
    請驗證您的郵箱
    立即驗證
    完善賬號信息
    您的賬號已經綁定,現在您可以設置密碼以方便用郵箱登錄
    立即設置 以后再說