當前位置:
首頁 > 最新 > 深度學習實驗流程及PyTorch提供的解決方案

深度學習實驗流程及PyTorch提供的解決方案

【導讀】近日,專知小組博士生huaiwen創作了一系列PyTorch實戰教程,致力於介紹如何用PyTorch實踐你的科研想法。今天推出其創作的第一篇《深度學習實驗流程及PyTorch提供的解決方案》。在研究深度學習的過程中,當你腦中突然迸發出一個靈感,你是否發現沒有趁手的工具可以快速實現你的想法?看完本文之後,你可能會多出一個選擇。本文簡要的分析了研究深度學習問題時常見的工作流, 並介紹了怎麼使用PyTorch來快速構建你的實驗。如果本文能為您的科研道路提供一絲便捷,我們將不勝榮幸。

常見的Research workflow

某一天, 你坐在實驗室的椅子上, 突然:

你腦子裡迸發出一個idea你看了關於某一theory的文章, 想試試: 要是把xx也加進去會怎麼樣你老闆突然給你一張紙, 然後說: 那個誰, 來把這個東西實現一下於是, 你設計實驗流程, 並為這一idea挑選了合適的數據集和運行環境, 然後你廢寢忘食的實現模型, 經過長時間的訓練和測試, 你發現:這idea不work --> 那算了 or 再調調這idea很work --> 可以paper了我們可以把上述流程用下圖表示:

實際上, 常見的流程由下面幾項組成起來:

Pytorch 給出的解決方案

對於載入數據, Pytorch提出了多種解決辦法

對於構建模型, Pytorch也提供了三種方案

net= torch.nn.Sequential(

torch.nn.Linear(1,10),

torch.nn.ReLU(),

torch.nn.Linear(10,1)

)

print(net)

"""

Sequential (

(0): Linear (1 -> 10)

(1): ReLU ()

(2): Linear (10 -> 1)

)

"""

集成torch.nn.Module 深度定製

classNet(torch.nn.Module):

def__init__(self,n_feature,n_hidden,n_output):

super(Net,self).__init__()

self.hidden = torch.nn.Linear(n_feature,n_hidden)

self.predict = torch.nn.Linear(n_hidden,n_output)

defforward(self,x):

x = F.relu(self.hidden(x))

x =self.predict(x)

returnx

net = Net(1,10,1)

print(net)

"""

Net (

(hidden): Linear (1 -> 10)

(predict): Linear (10 -> 1)

)

"""

對於訓練過程的Pytorch實現

# 創建數據載入器

loader = Data.DataLoader(

dataset=torch_dataset,# TensorDataset類型數據集

batch_size=BATCH_SIZE,# mini batch size

shuffle=True,# 設置隨機洗牌

num_workers=2,# 載入數據的進程個數

)

forepochinrange(3):# 訓練3輪

forstep,(batch_x,batch_y)inenumerate(loader):# 每一步

# 在這裡寫訓練代碼...

print("Epoch: ",epoch)

對於保存和載入模型Pytorch提供兩種方案

# 保存和載入整個模型, 包括: 網路結構, 模型參數等

torch.save(resnet,"model.pkl")

model = torch.load("model.pkl")

torch.save(resnet.state_dict(),"params.pkl")

resnet.load_state_dict(torch.load("params.pkl"))

對於GPU支持

你可以直接調用Tensor的.cuda() 直接將Tensor的數據遷移到GPU的顯存上, 當然, 你也可以用.cpu() 隨時將數據移回內存

對於Loss函數, 以及自定義Loss

在Pytorch的包torch.nn里, 不僅包含常用且經典的Loss函數, 還會實時跟進新的Loss 包括: CosineEmbeddingLoss, TripletMarginLoss等.

如果你的idea非常新穎, Pytorch提供了三種自定義Loss的方式

然後

loss_instance= MyLoss(...)

loss =loss_instance(a,b,c)

importtorch

fromtorch.autogradimportFunction

fromtorch.autogradimportVariable

classMyLoss(Function):

defforward(input_tensor):

# 具體實現

result = ......

returntorch.Tensor(result)

defbackward(grad_output):

# 如果你只是需要在loss中應用這個操作的時候,這裡直接return輸入就可以了

# 如果你需要在nn中用到這個,需要寫明具體的反向傳播操作

returngrad_output

這樣做,你能夠用常用的numpy和scipy函數來組成你的Loss

這裡就不細講了,未來會有內容專門介紹這一部分。

對於優化演算法以及調節學習率

Pytorch集成了常見的優化演算法, 包括SGD, Adam, SparseAdam, AdagradRMSprop, Rprop等等.

希望第一篇《深度學習實驗流程及PyTorch提供的解決方案》,大家會喜歡,後續會推出系列實戰教程,敬請期待。

-END-

專 · 知

人工智慧領域主題知識資料查看獲取【專知薈萃】人工智慧領域26個主題知識資料全集(入門/進階/論文/綜述/視頻/專家等)


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 實驗 的精彩文章:

實驗室,決定了AI公司的另一面
實驗二小校長蘆詠莉:寒假,給孩子一份有「推薦指數」的書單

TAG:實驗 |