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

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

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

      Linux命令+Pytorch框架學習ing

      以前的框架學習,過于花里胡哨,本章開始,從實際應用出發!包含單機多卡使用

      一. Linux命令

      1. 復制文件/文件夾

      cp 源文件地址 目標文件夾地址
      cp -r 源文件夾地址 目標文件夾地址
      

      2. 刪除文件/文件夾

      rm -f 文件地址
      rm -r  文件夾地址
      

      3. 修改或移動 文件/文件夾名

      # 修改
      mv 文件名  新文件名
      mv 文件夾名/ 新文件夾名/
      
      # 移動
      mv 文件名  目標地址/
      mv 文件夾名 目標文件夾地址/    #(目標文件夾已存在)
      

      4 查看磁盤內空間大小

      du -h --max-depth=1
      

      查看當前目錄及當前目錄下一級文件或文件夾各自使用的總空間大小,參考鏈接

      二. Pytorch框架學習

      1. Pytorch中clone(),detach()在反向傳播時的用法

      ? 參考博文:PyTorch中的clone(),detach()及相關擴展

      ? 總結:如果 a=b.clone().操作 , 則反向傳播時梯度從a傳到b可以; 而detach()下a直接脫離原計算圖。

      2. Pycharm字體放大

      任務欄放大:參考博文

      • File --> Settings --> Apperance .

      代碼界面,鼠標滾動縮放:參考博文

      • File —> setting —> Keymap —>在搜*尋框中輸入:increase —> Increase Font Size(雙擊) —> 在彈出的對話框中選擇Add Mouse Shortcut ;
      • 同理,縮小則是搜索 decrease.

      2. 輸出前K個最大值--torch.topk(input, k, dim=None, largest=True, sorted=True)

      ? 參考博文。

      • dim:指定維度,否則是最后一個維度 例如 N1N2-->N1K
      • largest:True,最大;False,最小
      • sorted:返回的K值有序

      ? 輸出:value,index------index代表的value原本的序號

      3. 查看實際運行時調用的cuda版本

      import torch
      print(torch.version.cuda)

      4. 單機多卡 DDP

      這里模型采用的torch1.10,故采用torchrun運行,參考博文

      1. rank
      • 多機多卡:代表某一臺機器
      • 單機多卡:代表某一塊GPU
      1. world_size
      • 多機多卡:代表有幾臺機器
      • 單機多卡:代表有幾塊GPU
      1. local_rank
      • 多機多卡:代表某一塊GPU的編號
      • 單機多卡:代表某一塊GPU的編號

      實操demo

      ? 終端運行
      torchrun --nproc_per_node=2 ddp_demo.py --batchSize 64 --epochs 10
      ? 采用單機雙卡,注意這里,博文中所述--local_rank不是我們設定的,由代碼機器自動獲取,目前我print會出現兩次,應該有方法解決,等下次自己的模型需要再來補充。

      點擊查看代碼
      # ddp_demo.py
      import torch
      import torch.nn as nn
      from torch.optim import SGD
      from torch.autograd import Variable
      from torch.utils.data import Dataset, DataLoader
      from torch.utils.data.distributed import DistributedSampler
      import os
      import argparse
      
      
      # 定義一個隨機數據集
      class RandomDataset(Dataset):
          def __init__(self, dataset_size, image_size=32):
              images = torch.randn(dataset_size, 3, image_size, image_size)
              labels = torch.zeros(dataset_size, dtype=int)
              self.data = list(zip(images, labels))
      
          def __getitem__(self, index):
              return self.data[index]
      
          def __len__(self):
              return len(self.data)
      
      
      # 定義模型
      class Model(nn.Module):
          def __init__(self, num_classes):
              super(Model, self).__init__()
              self.conv2d = nn.Conv2d(3, 16, 3)
              self.fc = nn.Linear(30 * 30 * 16, num_classes)
              self.softmax = nn.Softmax(dim=1)
      
          def forward(self, x):
              batch_size = x.shape[0]
              x = self.conv2d(x)
              x = x.reshape(batch_size, -1)
              x = self.fc(x)
              out = self.softmax(x)
              return out
      
      
      parser = argparse.ArgumentParser()
      parser.add_argument('--gpu_id', type=str, default='0,1')
      parser.add_argument('--batchSize', type=int, default=64)
      parser.add_argument('--epochs', type=int, default=5)
      parser.add_argument('--dataset-size', type=int, default=1024)
      parser.add_argument('--num-classes', type=int, default=10)
      # parser.add_argument('--local_rank', type=int, default=0)
      config = parser.parse_args()
      
      os.environ['CUDA_VISIBLE_DEVICES'] = config.gpu_id
      torch.distributed.init_process_group(backend="nccl")
      
      local_rank = torch.distributed.get_rank()
      torch.cuda.set_device(local_rank)
      device = torch.device("cuda", local_rank)
      
      # 實例化模型、數據集和加載器loader
      model = Model(config.num_classes)
      
      dataset = RandomDataset(config.dataset_size)
      sampler = DistributedSampler(dataset)  # 這個sampler會自動分配數據到各個gpu上
      loader = DataLoader(dataset, batch_size=config.batchSize, sampler=sampler)
      
      # loader = DataLoader(dataset, batch_size=config.batchSize, shuffle=True)
      loss_func = nn.CrossEntropyLoss()
      
      if torch.cuda.is_available():
          model.cuda()
      model = torch.nn.parallel.DistributedDataParallel(model)
      optimizer = SGD(model.parameters(), lr=0.1, momentum=0.9)
      
      # 開始訓練
      for epoch in range(config.epochs):
          for step, (images, labels) in enumerate(loader):
              if torch.cuda.is_available():
                  images = images.cuda()
                  labels = labels.cuda()
              preds = model(images)
              # print(f"data: {images.device}, model: {next(model.parameters()).device}")
              loss = loss_func(preds, labels)
              optimizer.zero_grad()
              loss.backward()
              optimizer.step()
      
              print(f'Step: {step}, Loss: {loss.item()}')
      
          print(f'Epoch {epoch} Finished !')
      

      5. 程序死機--如何關閉

      1. 命令行 xkill --- 選擇窗口直接關閉
      2. ps -ef |grep python 然后kill -9 進程號

      6.torch 復制維度

      import torch
      a = torch.rand(size=(2,3,2))
      
      a = a.repeat(1,2,1) --> 得到(2,6,2)第二個維度會復制全部,這里是完全疊加的一個操作,即后三個是復制前三個數據
      
      a = a.repeat_interleave(2, dim=1) --> 得到(2,6,2)這里的復制是間隔復制,假如初始是 1,2,3  ,復制后為 1,1,2,2,3,3
      

      7.判斷nan值

      import numpy as np
      import torch
      a = torch.rand(size=(2,3,2))
      print(np.isnan(a.numpy()))
      

      8.one-hot 與 單值標簽互轉

      # one-hot -> 數值
      >>> import torch
      >>> onehot
      array([[0., 1., 0., 0.],
             [0., 0., 1., 0.],
             [0., 0., 1., 0.],
             [0., 0., 0., 1.]])
      >>> np.argmax(onehot,1)
      array([1, 2, 2, 3], dtype=int64)
      >>> torch.topk(torch.tensor(onehot), 1)[1].squeeze(1)
      tensor([1, 2, 2, 3])
      
      # 數值-》one-hot
      >>> import numpy as np
      >>> label = [1,2,2,3]
      >>> np.eye(4)[label]
      array([[0., 1., 0., 0.],
             [0., 0., 1., 0.],
             [0., 0., 1., 0.],
             [0., 0., 0., 1.]])
      
      >>> import torch 
      >>> import torch.nn.functional as F
      labels = torch.tensor([0,1,2])
      num_classes = 3
      one_hot_labels = F.one_hot(labels, num_classes)
      
      
      posted @ 2022-03-13 11:03  steven_zhao1001  閱讀(178)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 无码中文字幕av免费放| 高清无码爆乳潮喷在线观看| 久久精品成人免费看| 亚洲成人精品综合在线| 久久久久久久久18禁秘| 国产在线欧美日韩精品一区| 福鼎市| 综合久久婷婷综合久久| 漂亮人妻中文字幕丝袜| 成年女人午夜毛片免费视频| 风流老熟女一区二区三区| 久久99热只有频精品8| awww在线天堂bd资源在线| 亚洲色偷偷偷网站色偷一区| 国产高清一区二区不卡| 人妻少妇精品系列| 91老熟女老人国产老太| 日韩高清亚洲日韩精品一区二区| 泸溪县| 97视频精品全国免费观看| 日韩丝袜欧美人妻制服| 午夜成人性爽爽免费视频| 狠狠躁日日躁夜夜躁欧美老妇| 97精品伊人久久大香线蕉APP| 国产资源精品中文字幕| 国产果冻豆传媒麻婆精东| 亚洲人成网站18禁止无码| 亚洲精品无码日韩国产不卡av| 国产在线无码不卡播放| 中文字幕国产精品日韩| 边添小泬边狠狠躁视频| 日韩女同一区二区三区久久| 亚洲Av综合日韩精品久久久| 国产午夜精品福利免费不| 色爱综合另类图片av| 久久成人 久久鬼色| 国产精品久久无中文字幕| 正在播放国产剧情亂倫| 东京热一精品无码av| 亚洲最大色综合成人av| 免费无码又爽又刺激网站直播|