SwinTransformer代码中出现的代码知识的学习
參考大佬
B站大佬:霹靂吧啦Wz視頻:12.2 使用Pytorch搭建Swin-Transformer網絡
講解鏈接:https://www.bilibili.com/video/BV1yg411K7Yc?spm_id_from=333.999.0.0
他的github:https://github.com/WZMIAOMIAO/deep-learning-for-image-processing
swin_transformer用于做圖像分類的任務鏈接:
https://github.com/Ydjiao/deep-learning-for-image-processing/tree/master/pytorch_classification/swin_transformer
官方代碼不支持多尺度訓練
官方代碼中用于圖像檢測的代碼是支持多尺度訓練的
Python圖像處理PIL各模塊詳細介紹
參考:Python圖像處理PIL各模塊詳細介紹
torch.meshgrid()函數解析
參考:torch.meshgrid()函數解析
torch.meshgrid()的功能是生成網格,可以用于生成坐標。函數輸入兩個數據類型相同的一維張量,兩個輸出張量的行數為第一個輸入張量的元素個數,列數為第二個輸入張量的元素個數,當兩個輸入張量數據類型不同或維度不是一維時會報錯。
其中第一個輸出張量填充第一個輸入張量中的元素,各行元素相同;第二個輸出張量填充第二個輸入張量中的元素各列元素相同。
pytorch源碼分析之torch.utils.data.Dataset類
參考:pytorch源碼分析之torch.utils.data.Dataset類和torch.utils.data.DataLoader類
torch.utils.data.Dataset是代表自定義數據集方法的抽象類,你可以自己定義你的數據類繼承這個抽象類,非常簡單,只需要定義__len__和__getitem__這兩個方法就可以。
通過繼承torch.utils.data.Dataset的這個抽象類,我們可以定義好我們需要的數據類。當我們通過迭代的方式來取得每一個數據,但是這樣很難實現取batch,shuffle或者多線程讀取數據,所以pytorch還提供了一個簡單的方法來做這件事情,通過torch.utils.data.DataLoader類來定義一個新的迭代器,用來將自定義的數據讀取接口的輸出或者PyTorch已有的數據讀取接口的輸入按照batch size封裝成Tensor,后續只需要再包裝成Variable即可作為模型的輸入。
總之,通過torch.utils.data.Dataset和torch.utils.data.DataLoader這兩個類,使數據的讀取變得非常簡單,快捷。
Python-zip()函數
參考:Python-zip()函數
python zip操作
需要注意的是zip(*可迭代對象)這個方法,直接輸出的話,是一個zip對象<zip object at 0x000000001806C788>,可以進行for循環查看,直接輸出是一個一個的元素。
torch.stack()
參考:torch.stack()的官方解釋,詳解以及例子
假如數據都是二維矩陣(平面),它可以把這些一個個平面按第三維(例如:時間序列)壓成一個三維的立方體,而立方體的長度就是時間序列長度。
官方解釋:沿著一個新維度對輸入張量序列進行連接。 序列中所有的張量都應該為相同形狀。
淺顯說法:把多個2維的張量湊成一個3維的張量;多個3維的湊成一個4維的張量…以此類推,也就是在增加新的維度進行堆疊。
torch.as_tensor()
參考:pytorch每日一學14(torch.as_tensor())將其它類型轉化為tensor
os.path.isdir()函數
參考:os.path.isdir()函數的作用和用法-判斷是否為目錄
os.path.isfile()函數
參考:os.path.isdir()函數的作用和用法-判斷是否為目錄
import os print(os.path.isdir(r'F:\0000技術相關\Numpy學習'))#True print(os.path.isfile(r'F:\0000技術相關\Numpy學習\numpy的淺拷貝和深拷貝.py'))##Trueos.listdir(path)
參考:Python中os.listdir() 函數用法及實例
listdir()語法格式:os.listdir(path)
描述:返回指定路徑下的文件和文件夾列表。
path = '../pytorch學習_覃秉豐課程' filename = os.listdir(path) print(filename)輸出:
['1.tensor屬性介紹.py', '10.模型保存.py', '10.載入模型.py', '2.數據生成.py', '3.1.基本操作.py', '3.2基本操作.py', '4.數據的索引.py', '5.自動求導.py', '6.線性回歸.py', '7.非線性回歸.py', '8.mnist數據識別簡單程序.py', '8.mnist數據識別簡單程序_交叉熵損失函數.py', '8.mnist數據識別簡單程序_使用Adam優化器.py', '8.mnist數據識別簡單程序無注釋版.py', '9.mnist數據識別簡單程序_LSTM.py', '9.mnist數據識別簡單程序_交叉熵損失函數_Dropout.py', '9.mnist數據識別簡單程序_交叉熵損失函數_不用Dropout.py', '9.mnist數據識別簡單程序_交叉熵損失函數_使用L2正則化.py', '9.mnist數據識別簡單程序_卷積神經網絡CNN.py', 'MNIST', 'model', '交叉熵損失函數程序修改.txt', '使用pytorch對貓狗圖片分類', '相關網絡代碼的修改及結果比較.xls']os.path.splitext(path)
參考:[Python] os.path.splitext(“path”):分離文件名與擴展名
os.path.splitext("path"):分離文件名與擴展名
功能:
輸入為"文件路徑",輸出為文件名和擴展名的元組(文件名,擴展名)。
最重要的功能是獲得文件的擴展名,從而識別文件的格式。
語法:
import osFileName,ExtensionName = os.path.splitext("path")# 當只需要ExtensionName的時候可以這樣寫: _,ExtensionName = os.path.splitext("path")示例:
import os filenamelist = ['E:\\swin_transformer\\flower_photos\\daisy\\9611923744_013b29e4da_n.jpg', 'E:\\swin_transformer\\flower_photos\\daisy\\9922116524_ab4a2533fe_n.jpg', 'E:\\swin_transformer\\flower_photos\\daisy\\99306615_739eb94b9e_m.jpg'] for term in filenamelist:FileName, ExtensionName = os.path.splitext(term)print('FileName:',FileName)print('ExtensionName:',ExtensionName)print('-'*25)輸出:
FileName: E:\swin_transformer\flower_photos\daisy\9611923744_013b29e4da_n ExtensionName: .jpg ------------------------- FileName: E:\swin_transformer\flower_photos\daisy\9922116524_ab4a2533fe_n ExtensionName: .jpg ------------------------- FileName: E:\swin_transformer\flower_photos\daisy\99306615_739eb94b9e_m ExtensionName: .jpg -------------------------random中sample()函數的用法
參考:py001- random中sample()函數的用法
sample(list, k)返回一個長度為k新列表,新列表存放list所產生k個隨機唯一的元素
函數用法實例:
import randomlist = [1, 2, 3] print(random.sample(list ,2))list = ["china","python","sky"] print(random.sample(list ,2))list = range(1, 10000) print(random.sample(list ,5))輸出: [1, 2] ['python', 'sky'] [6912, 1869, 5991, 721, 3388]總結
以上是生活随笔為你收集整理的SwinTransformer代码中出现的代码知识的学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Numpy-浅拷贝和深拷贝
- 下一篇: 学习《送东阳马生序》