最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Pytorch實現(xiàn)ResNet網(wǎng)絡(luò)構(gòu)建及模型訓(xùn)練

 更新時間:2023年04月21日 15:04:20   作者:實力  
這篇文章主要為大家介紹了利用Pytorch實現(xiàn)ResNet網(wǎng)絡(luò)構(gòu)建及模型訓(xùn)練詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

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

ResNet由一系列堆疊的殘差塊組成,其主要作用是通過無限制地增加網(wǎng)絡(luò)深度,從而使其更加強大。在建立ResNet模型之前,讓我們先定義4個層,每個層由多個殘差塊組成。這些層的目的是降低空間尺寸,同時增加通道數(shù)量。

以ResNet50為例,我們可以使用以下代碼來定義ResNet網(wǎng)絡(luò):

class ResNet(nn.Module):
    def __init__(self, num_classes=1000):
        super().__init__()
        self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, bias=False)
        self.bn1 = nn.BatchNorm2d(64)
        self.relu = nn.ReLU(inplace
(續(xù))
即模型需要在輸入層加入一些 normalization 和激活層。
```python
import torch.nn.init as init
class Flatten(nn.Module):
    def __init__(self):
        super().__init__()
    def forward(self, x):
        return x.view(x.size(0), -1)
class ResNet(nn.Module):
    def __init__(self, num_classes=1000):
        super().__init__()
        self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, bias=False)
        self.bn1 = nn.BatchNorm2d(64)
        self.relu = nn.ReLU(inplace=True)
        self.layer1 = nn.Sequential(
            ResidualBlock(64, 256, stride=1),
            *[ResidualBlock(256, 256) for _ in range(1, 3)]
        )
        self.layer2 = nn.Sequential(
            ResidualBlock(256, 512, stride=2),
            *[ResidualBlock(512, 512) for _ in range(1, 4)]
        )
        self.layer3 = nn.Sequential(
            ResidualBlock(512, 1024, stride=2),
            *[ResidualBlock(1024, 1024) for _ in range(1, 6)]
        )
        self.layer4 = nn.Sequential(
            ResidualBlock(1024, 2048, stride=2),
            *[ResidualBlock(2048, 2048) for _ in range(1, 3)]
        )
        self.avgpool = nn.AdaptiveAvgPool2d((1, 1))
        self.flatten = Flatten()
        self.fc = nn.Linear(2048, num_classes)
        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                init.kaiming_normal_(m.weight, mode="fan_out", nonlinearity="relu")
            elif isinstance(m, (nn.BatchNorm2d, nn.GroupNorm)):
                init.constant_(m.weight, 1)
                init.constant_(m.bias, 0)
    def forward(self, x):
        x = self.conv1(x)
        x = self.bn1(x)
        x = self.relu(x)
        x = self.layer1(x)
        x = self.layer2(x)
        x = self.layer3(x)
        x = self.layer4(x)
        x = self.avgpool(x)
        x = self.flatten(x)
        x = self.fc(x)
        return x

改進(jìn)點如下:

  • 我們使用nn.Sequential組件,將多個殘差塊組合成一個功能塊(layer)。這樣可以方便地修改網(wǎng)絡(luò)深度,并將其與其他層分離九更容易上手,例如遷移學(xué)習(xí)中重新訓(xùn)練頂部分類器時。
  • 我們在ResNet的輸出層添加了標(biāo)準(zhǔn)化和激活函數(shù)。它們有助于提高模型的收斂速度并改善性能。
  • 對于nn.Conv2d和批標(biāo)準(zhǔn)化層等神經(jīng)網(wǎng)絡(luò)組件,我們使用了PyTorch中的內(nèi)置初始化函數(shù)。它們會自動為我們設(shè)置好每層的參數(shù)。
  • 我們還添加了一個Flatten層,將4維輸出展平為2維張量,以便通過接下來的全連接層進(jìn)行分類。

訓(xùn)練模型

我們現(xiàn)在已經(jīng)實現(xiàn)了ResNet50模型,接下來我們將解釋如何訓(xùn)練和測試該模型。

首先我們需要定義損失函數(shù)和優(yōu)化器。在這里,我們使用交叉熵?fù)p失函數(shù),以及Adam優(yōu)化器。

import torch.optim as optim
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = ResNet(num_classes=1000).to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

在使用PyTorch進(jìn)行訓(xùn)練時,我們通常會創(chuàng)建一個循環(huán),為每個批次的輸入數(shù)據(jù)計算損失并對模型參數(shù)進(jìn)行更新。以下是該循環(huán)的代碼:

def train(model, optimizer, criterion, train_loader, device):
    model.train()
    train_loss = 0
    correct = 0
    total = 0
    for batch_idx, (inputs, targets) in enumerate(train_loader):
        inputs, targets = inputs.to(device), targets.to(device)
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, targets)
        loss.backward()
        optimizer.step()
        train_loss += loss.item()
        _, predicted = outputs.max(1)
        total += targets.size(0)
        correct += predicted.eq(targets).sum().item()
    acc = 100 * correct / total
    avg_loss = train_loss / len(train_loader)
    return acc, avg_loss

在上面的訓(xùn)練循環(huán)中,我們首先通過model.train()代表進(jìn)入訓(xùn)練模式。然后使用optimizer.zero_grad()清除

以上就是利用Pytorch實現(xiàn)ResNet網(wǎng)絡(luò)構(gòu)建及模型訓(xùn)練的詳細(xì)內(nèi)容,更多關(guān)于Pytorch ResNet構(gòu)建網(wǎng)絡(luò)模型訓(xùn)練的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Django-xadmin+rule對象級權(quán)限的實現(xiàn)方式

    Django-xadmin+rule對象級權(quán)限的實現(xiàn)方式

    今天小編就為大家分享一篇Django-xadmin+rule對象級權(quán)限的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • pandas如何使用列表和字典創(chuàng)建?Series

    pandas如何使用列表和字典創(chuàng)建?Series

    這篇文章主要介紹了pandas如何使用列表和字典創(chuàng)建?Series,pandas 是基于NumPy的一種工具,該工具是為解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的,下文我們就來看看文章是怎樣介紹pandas,需要的朋友也可以參考一下
    2021-12-12
  • torchtext入門教程必看,帶你輕松玩轉(zhuǎn)文本數(shù)據(jù)處理

    torchtext入門教程必看,帶你輕松玩轉(zhuǎn)文本數(shù)據(jù)處理

    這篇文章主要介紹了torchtext入門教程必看,帶你輕松玩轉(zhuǎn)文本數(shù)據(jù)處理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python實現(xiàn)遍歷文件夾圖片并重命名

    python實現(xiàn)遍歷文件夾圖片并重命名

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)遍歷文件夾圖片并重命名,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • python利用文件時間批量重命名照片和視頻

    python利用文件時間批量重命名照片和視頻

    這篇文章主要為大家詳細(xì)介紹了python利用文件時間批量重命名照片和視頻,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • python的列表生成式,生成器和generator對象你了解嗎

    python的列表生成式,生成器和generator對象你了解嗎

    這篇文章主要為大家詳細(xì)介紹了python的列表生成式,生成器和generator對象,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 教你用Python寫一個京東自動下單搶購腳本

    教你用Python寫一個京東自動下單搶購腳本

    很多朋友都有網(wǎng)購搶購限量商品的經(jīng)歷,有時候蹲點搶怎么也搶不到,今天小編帶你們學(xué)習(xí)怎么用Python寫一個京東自動下單搶購腳本,以后再也不用拼手速拼網(wǎng)速啦,快來一起看看吧
    2023-03-03
  • Python 使用 multiprocessing 模塊創(chuàng)建進(jìn)程池的操作方法

    Python 使用 multiprocessing 模塊創(chuàng)建進(jìn)程池的操作方法

    在現(xiàn)代計算任務(wù)中,尤其是處理大量數(shù)據(jù)或計算密集型任務(wù)時,使用并行處理可以顯著提升程序性能,Python的multiprocessing模塊提供了創(chuàng)建進(jìn)程池的功能,通過預(yù)先創(chuàng)建的進(jìn)程來并發(fā)執(zhí)行任務(wù),避免了頻繁的進(jìn)程創(chuàng)建和銷毀,感興趣的朋友一起看看吧
    2024-10-10
  • Python中單線程、多線程和多進(jìn)程的效率對比實驗實例

    Python中單線程、多線程和多進(jìn)程的效率對比實驗實例

    這篇文章主要介紹了Python單線程多線程和多進(jìn)程效率對比,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Python編寫百度貼吧的簡單爬蟲

    Python編寫百度貼吧的簡單爬蟲

    這篇文章主要介紹了Python編寫百度貼吧的簡單爬蟲,簡單實現(xiàn)了下載對應(yīng)頁碼的頁面并存為以當(dāng)前時間命名的html文件,這里分享給大家,拋磚引玉。
    2015-04-04

最新評論

昆山市| 大同县| 兰坪| 盖州市| 昭觉县| 漾濞| 建宁县| 玉山县| 大足县| 荥阳市| 德格县| 宁河县| 云龙县| 康平县| 平顶山市| 青冈县| 夹江县| 清镇市| 会泽县| 满洲里市| 阆中市| 商河县| 民和| 鄂托克前旗| 邳州市| 通海县| 常德市| 巨野县| 丹巴县| 壶关县| 绥棱县| 肇东市| 明光市| 陆川县| 开封市| 泰来县| 镇原县| 兴海县| 清流县| 措勤县| 木兰县|