Kaggle樹葉分類Leaves Classify總結
if __name__ == '__main__':
# 啟動 visdom
visdom = Visdom()
# 建立一個 (0, 0) 作為起點, window id 作為 'train_loss' ,標題為 train loss 的視窗
visdom.line(Y=[0], X=[0], win='train_loss', opts=dict(title='train loss'))
# 建立一個 (0, 0) 作為起點, window id 作為 'accuracy' ,標題為 accuracy 的視窗
visdom.line(Y=[0], X=[0], win='accuracy', opts=dict(title='accuracy', legend=['train accuracy', 'valid accuracy']))
######################################################################
# 不使用遷移學習,
isPreTrained = False
net = resnest50(pretrain=isPreTrained)
if isPreTrained:
net.load_state_dict(torch.load('ModelPath'))
# 凍結所有層的梯度計算
for name, parameter in net.named_parameters():
parameter.requires_grad = False
# 重定義全連線層後 requires_grad 自動為 True
net.fc = nn.Linear(net.fc.in_features, nClass)
######################################################################
trainTransform = transforms.Compose([
# 隨機拉伸並裁切 224x224 大小的圖片
transforms.RandomResizedCrop(size=224, scale=[0.64, 1.0], ratio=[1.0, 1.0]),
# 隨機水平翻轉
transforms.RandomHorizontalFlip(p=0.5),
# 隨機垂直翻轉
transforms.RandomVerticalFlip(p=0.5),
# # 隨機銳化
# transforms.RandomAdjustSharpness(sharpness_factor=10),
# # 隨機曝光
# transforms.RandomSolarize(threshold=0.3),
# # 隨機更改亮度,對比度和飽和度
# transforms.ColorJitter(brightness=0.4, contrast=0.4, saturation=0.4),
# 隨機應用下列 transform
transforms.RandomApply([
transforms.RandomRotation([-45,45], fill=[255, 255, 255]),
# 仿射變換
transforms.RandomAffine(degrees=[-30,30], translate=[0, 0.2], scale=[0.8, 1], fill=[255, 255, 255]),
]),
transforms.ToTensor(),
# 標準化影像的每個通道
transforms.Normalize([0.485, 0.456, 0.406],[0.229, 0.224, 0.225]),
transforms.RandomErasing(),
])
validTestTransform = transforms.Compose([
transforms.Resize(256),
# 從影像中心裁切 224x224 大小的圖片
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406],[0.229, 0.224, 0.225])
])
######################################################################
# 建立自己的訓練集,驗證集和測試集
trainData = CLeavesData(filePath + 'train.csv', filePath, mode='train', transform=trainTransform)
validData = CLeavesData(filePath + 'train.csv', filePath, mode='valid', transform=validTestTransform)
testData = CLeavesData(filePath + 'test.csv', filePath, mode='test', transform=validTestTransform)
# 將訓練集進行 CutMix 處理
trainAData = CutMix(dataset=trainData, num_class=176, beta=1.0, prob=0.5, num_mix=2)
trainDataLoader = DataLoader(
dataset=trainAData,
batch_size=batchSize,
shuffle=False, # 外匯跟單gendan5.com 是否隨機打亂順序
num_workers=3, # CPU 核心分配數
# 固定 CPU 核心分配則在切換讀取訓練集和驗證集二者之間多執行緒不用重新分配核心,節省訓練時間
persistent_workers=True, # 固定處理資料集的 CPU 核心
)
validDataLoader = DataLoader(
dataset=validData,
batch_size=batchSize,
shuffle=False,
num_workers=3,
persistent_workers=True,
)
testDataLoader =DataLoader(
dataset=testData,
batch_size=batchSize,
shuffle=False,
num_workers=6,
)
######################################################################
learningRate = 1e-4
numEpochs = 100
weightDecay = 1e-3
# 開始訓練
train(net, trainDataLoader, validDataLoader, numEpochs, learningRate, weightDecay, d2l.try_gpu())
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2784154/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 影像分類:來自13個Kaggle專案的經驗總結
- 樹鏈剖分總結
- IT開發工作分類【總結】
- 一類子樹問題的總結
- 樹結構總結
- 動態規劃分類題目總結動態規劃
- phpRedis函式使用總結【分類詳細】PHPRedis函式
- Swift 專案總結 02 常用分類方法Swift
- java面試題總結-詳細分類Java面試題
- 分類——決策樹模型模型
- 樸素貝葉斯分類
- SVM分類器演算法總結&應用演算法
- 裝置樹總結
- 概率分類之樸素貝葉斯分類(垃圾郵件分類python實現)Python
- 常見形式 Web API 的簡單分類總結WebAPI
- 線段樹(毒瘤)總結
- 線段樹模板總結
- 分庫分表總結
- 萬字總結Keras深度學習中文文字分類Keras深度學習文字分類
- 樸素貝葉斯分類-實戰篇-如何進行文字分類文字分類
- 樸素貝葉斯/SVM文字分類文字分類
- [資料結構] 劃分樹資料結構
- 決策樹學習總結
- 遞迴樹形查詢所有分類遞迴
- 不平衡資料的分類評價指標總結指標
- 機器學習總結(2)—分類中的代數模型機器學習模型
- Sum of Left Leaves
- 二分總結
- 分類演算法-樸素貝葉斯演算法
- 樸素貝葉斯實現文件分類
- 使用貝葉斯進行新聞分類
- 指南:不平衡分類的成本敏感決策樹(附程式碼&連結)
- 常用Java集合類總結Java
- drf檢視類總結
- JUC鎖種類總結
- 今日總結深入String類
- 譜聚類原理總結聚類
- URLConnection類,HttpURLConnection類的使用和總結HTTP