<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Pytorch實戰學習(五):多分類問題

      《PyTorch深度學習實踐》完結合集_嗶哩嗶哩_bilibili

      Softmax Classifer

       

      1、二分類問題:糖尿病預測

       

       

      2、多分類問題

      MNIST Dataset:10個標簽,圖像數字(0-9)識別

      ①用sigmoid:輸出每個類別的概率

      但這種情況下,類別之間所存在的互相抑制的關系沒有辦法體現,當一個類別出現的概率較高時,其他類別出現的概率仍然有可能很高。

      換言之,當計算輸出為1的概率之后,再計算輸出為2的概率時,并不是在輸出為非1的條件下進行的,也就是說,所有輸出的概率之和實際上是大于1的。

       

       ②用softmax:輸出每個類別的概率的分布

       

       3、softmax原理

      保證兩點:

      ※每個類別概率都>0------指數函數

      ※所有類別概率相加為1------求和,占比

       

       

       

       

       

       4、Softmax Loss Function

      ①NLLLoss

       

       ②Torch.nn.CrossEntropyLoss()中包含了最后一層的softmax激活

       

       ③交叉熵損失(CrossEntropyLoss)和NLL損失之間的差別

       

       

      5、實例:MNIST Dataset

      ①數據準備

      transform將圖像轉換成圖像張量(CxWxH)(通道x寬x高),取值在[0,1]

      再進行標準化

       

       

      ## 將圖像數據轉換成圖像張量
      transform = transforms.Compose([
          transforms.ToTensor(),
          # 標準化,均值和標準差
          transforms.Normalize((0.1307,), (0.3081,))
          ])

       

      ②模型構建

       

       

      完整代碼

      # -*- coding: utf-8 -*-
      """
      Created on Wed Aug  4 09:08:32 2021
      
      @author: motoh
      """
      
      import torch
      ## 對圖像數據進行處理的包
      from torchvision import transforms
      from torchvision import datasets
      from torch.utils.data import DataLoader
      import torch.nn.functional as F
      import torch.optim as optim
       
      # prepare dataset
       
      batch_size = 64
      ## 將圖像數據轉換成圖像張量
      # 標準化,均值和標準差
      transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))]) 
       
      train_dataset = datasets.MNIST(root='../dataset/mnist/', train=True, download=True, transform=transform)
      train_loader = DataLoader(train_dataset, shuffle=True, batch_size=batch_size)
      test_dataset = datasets.MNIST(root='../dataset/mnist/', train=False, download=True, transform=transform)
      test_loader = DataLoader(test_dataset, shuffle=False, batch_size=batch_size)
       
      
      # design model using class
       
       
      class Net(torch.nn.Module):
          def __init__(self):
              super(Net, self).__init__()
              self.l1 = torch.nn.Linear(784, 512)
              self.l2 = torch.nn.Linear(512, 256)
              self.l3 = torch.nn.Linear(256, 128)
              self.l4 = torch.nn.Linear(128, 64)
              self.l5 = torch.nn.Linear(64, 10)
       
          def forward(self, x):
              #變成矩陣 -1其實就是自動獲取mini_batch,784是1*28*28,圖片的像素數量
              x = x.view(-1, 784) 
              x = F.relu(self.l1(x))
              x = F.relu(self.l2(x))
              x = F.relu(self.l3(x))
              x = F.relu(self.l4(x))
              # 最后一層不做激活,不進行非線性變換
              return self.l5(x)  
       
       
      model = Net()
       
      # construct loss and optimizer
      criterion = torch.nn.CrossEntropyLoss()
      optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)
       
      # training cycle forward, backward, update
       
       
      def train(epoch):
          running_loss = 0.0
          for batch_idx, data in enumerate(train_loader, 0):
              # 獲得一個批次的數據和標簽
              inputs, target = data
              optimizer.zero_grad()
              # 獲得模型預測結果(64, 10)
              outputs = model(inputs)
              # 交叉熵代價函數outputs(64,10),target(64)
              loss = criterion(outputs, target)
              loss.backward()
              optimizer.step()
       
              running_loss += loss.item()
              if batch_idx % 300 == 299:
                  print('[%d, %5d] loss: %.3f' % (epoch+1, batch_idx+1, running_loss/300))
                  running_loss = 0.0
       
       
      def test():
          correct = 0
          total = 0
          ## 不計算梯度
          with torch.no_grad():
              for data in test_loader:
                  images, labels = data
                  outputs = model(images)
                  # dim = 1 列是第0個維度,行是第1個維度,## 每一行最大值的下標
                  _, predicted = torch.max(outputs.data, dim=1) 
                  total += labels.size(0)
                  correct += (predicted == labels).sum().item() # 張量之間的比較運算
          print('accuracy on test set: %d %% ' % (100*correct/total))
       
       
      if __name__ == '__main__':
          for epoch in range(10):
              train(epoch)
              test()

       運行結果

       

      posted @ 2021-08-04 10:17  kuluma  閱讀(1420)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久热久热中文字幕综合激情 | 国产成人8X人网站视频| 国产中文三级全黄| 性无码专区无码| 微山县| 精品国产av一二三四区| 国产999精品2卡3卡4卡| 国产成人精品一区二区三区| 午夜亚洲国产理论片亚洲2020| 国产中文字幕一区二区| 午夜羞羞影院男女爽爽爽| 最新av中文字幕无码专区| 中文字幕亚洲无线码A| 国产在线观看播放av| 国产av一区二区午夜福利| 无码抽搐高潮喷水流白浆| 国产精品v片在线观看不卡| 成在线人免费视频| 男人天堂亚洲天堂女人天堂| 国产精品大全中文字幕| 国产福利微视频一区二区| 国产福利免费在线观看| 91精品91久久久久久| 国产精品国产高清国产专区| 无码成a毛片免费| 好看的国产精品自拍视频| 国产综合久久99久久| 麻豆亚洲精品一区二区| 国产精品国产三级国av| 亚洲国产日韩欧美一区二区三区 | 亚洲AV成人片不卡无码| 亚洲va久久久噜噜噜久久狠狠| 欧美成人影院亚洲综合图| 无码日韩精品一区二区三区免费 | 久久精品国产亚洲av高| 人成午夜免费大片| 欧美人伦禁忌dvd放荡欲情| 国产粉嫩美女一区二区三| 欧美巨大极度另类| 亚洲区小说区图片区qvod| 亚洲国产成人精品女久久|