教學課程:定型第一個Python 機器學習模型 - Microsoft Docs
文章推薦指數: 80 %
如何在Azure Machine Learning 中定型機器學習模型。
這是三個部分快速入門系列的第2 個部分。
跳到主要內容
已不再支援此瀏覽器。
請升級至MicrosoftEdge,以利用最新功能、安全性更新和技術支援。
下載MicrosoftEdge
其他資訊
目錄
結束焦點模式
閱讀英文
儲存
目錄
閱讀英文
儲存
Twitter
LinkedIn
Facebook
電子郵件
WeChat
目錄
教學課程:定型您的第一個機器學習模型(第2個部分,共3個部分)
發行項
04/27/2022
13位參與者
此頁面有所助益嗎?
Yes
No
還有其他意見反應嗎?
系統會將意見反應傳送給Microsoft:按下[提交]按鈕,您的意見反應將用來改善Microsoft產品和服務。
隱私權原則。
送出
謝謝。
本文內容
本教學課程說明如何在AzureMachineLearning中定型機器學習模型。
此教學課程是三個部分教學課程系列的第2個部分。
在系列的第1個部分:執行"Helloworld!"時,您已了解如何使用控制指令碼在雲端中執行作業。
在本教學課程中,您會透過提交可定型機器學習模型的指令碼來進行下一步。
此範例將協助您了解AzureMachineLearning如何在本機偵錯和遠端執行之間,輕鬆地達成一致的行為。
在本教學課程中,您:
建立定型指令碼。
使用Conda來定義AzureMachineLearning環境。
建立控制指令碼。
了解AzureMachineLearning類別(Environment、Run、Metrics)。
提交並執行您的定型指令碼。
在雲端中檢視程式碼輸出。
將計量記錄到AzureMachineLearning。
在雲端中檢視您的計量。
Prerequisites
完成系列的第1個部分。
建立定型指令碼
首先,您會在model.py檔案中定義神經網路架構。
您的所有定型程式碼都會進入src子目錄,包括model.py。
定型程式碼取自PyTorch的此簡介範例。
請注意,AzureMachineLearning的概念適用於任何機器學習服務程式碼,而不只是PyTorch。
在src子資料夾中建立model.py檔案。
將此程式碼複製到檔案:
importtorch.nnasnn
importtorch.nn.functionalasF
classNet(nn.Module):
def__init__(self):
super(Net,self).__init__()
self.conv1=nn.Conv2d(3,6,5)
self.pool=nn.MaxPool2d(2,2)
self.conv2=nn.Conv2d(6,16,5)
self.fc1=nn.Linear(16*5*5,120)
self.fc2=nn.Linear(120,84)
self.fc3=nn.Linear(84,10)
defforward(self,x):
x=self.pool(F.relu(self.conv1(x)))
x=self.pool(F.relu(self.conv2(x)))
x=x.view(-1,16*5*5)
x=F.relu(self.fc1(x))
x=F.relu(self.fc2(x))
x=self.fc3(x)
returnx
在工具列上,選取[儲存]以儲存檔案。
如果想要,請關閉索引標籤。
接下來,也在src子資料夾中定義定型指令碼。
此指令碼會使用PyTorchtorchvision.datasetAPI來下載CIFAR10資料集、設定model.py中定義的網路,以及使用標準SGD和交叉熵損失,針對兩個epoch來進行定型。
在src子資料夾中建立train.py指令碼:
importtorch
importtorch.optimasoptim
importtorchvision
importtorchvision.transformsastransforms
frommodelimportNet
#downloadCIFAR10data
trainset=torchvision.datasets.CIFAR10(
root="../data",
train=True,
download=True,
transform=torchvision.transforms.ToTensor(),
)
trainloader=torch.utils.data.DataLoader(
trainset,batch_size=4,shuffle=True,num_workers=2
)
if__name__=="__main__":
#defineconvolutionalnetwork
net=Net()
#setuppytorchloss/optimizer
criterion=torch.nn.CrossEntropyLoss()
optimizer=optim.SGD(net.parameters(),lr=0.001,momentum=0.9)
#trainthenetwork
forepochinrange(2):
running_loss=0.0
fori,datainenumerate(trainloader,0):
#unpackthedata
inputs,labels=data
#zerotheparametergradients
optimizer.zero_grad()
#forward+backward+optimize
outputs=net(inputs)
loss=criterion(outputs,labels)
loss.backward()
optimizer.step()
#printstatistics
running_loss+=loss.item()
ifi%2000==1999:
loss=running_loss/2000
print(f"epoch={epoch+1},batch={i+1:5}:loss{loss:.2f}")
running_loss=0.0
print("FinishedTraining")
您現在有下列資料夾結構:
本機測試
選取[儲存並在終端機中執行指令碼],直接在計算執行個體上執行train.py指令碼。
指令碼完成後,請選取檔案資料夾上方的[重新整理]。
您會看到名為get-started/data的新資料夾。
展開此資料夾,以檢視下載的資料。
建立Python環境
AzureMachineLearning提供環境概念來代表可重現且已建立版本的Python環境,用於執行實驗。
從本機Conda或pip環境中建立環境很容易。
首先,您將建立具有套件相依性的檔案。
在get-started資料夾中建立名為pytorch-env.yml的新檔案:
name:pytorch-env
channels:
-defaults
-pytorch
dependencies:
-python=3.6.2
-pytorch
-torchvision
在工具列上,選取[儲存]以儲存檔案。
如果想要,請關閉索引標籤。
建立控制項指令碼
下列控制指令碼與您用來提交"Helloworld!"的控制之間的差異在於,您可以新增幾行額外的程式碼來設定環境。
在get-started資料夾中建立名為run-pytorch.py的新Python檔案:
#run-pytorch.py
fromazureml.coreimportWorkspace
fromazureml.coreimportExperiment
fromazureml.coreimportEnvironment
fromazureml.coreimportScriptRunConfig
if__name__=="__main__":
ws=Workspace.from_config()
experiment=Experiment(workspace=ws,name='day1-experiment-train')
config=ScriptRunConfig(source_directory='./src',
script='train.py',
compute_target='cpu-cluster')
#setuppytorchenvironment
env=Environment.from_conda_specification(
name='pytorch-env',
file_path='pytorch-env.yml'
)
config.run_config.environment=env
run=experiment.submit(config)
aml_url=run.get_portal_url()
print(aml_url)
提示
如果您在建立計算叢集時使用不同的名稱,請務必同時調整程式碼compute_target='cpu-cluster'中的名稱。
了解程式碼變更
env=...
參考您在上面建立的相依性檔案。
config.run_config.environment=env
將環境新增至ScriptRunConfig。
提交執行至AzureMachineLearning
選取[儲存並在終端機中執行指令碼]以執行run-pytorch.py指令碼。
您會在開啟的終端機視窗中看到連結。
選取連結以檢視執行。
注意
您可能會看到開頭為載入azureml_run_type_providers時失敗...的一些警告。
您可以忽略這些警告。
使用這些警告底部的連結來檢視您的輸出。
檢視輸出
在開啟的頁面上,您會看到執行狀態。
第一次執行此指令碼時,AzureMachineLearning會從您的PyTorch環境中建立新的Docker映像。
整個執行大約需要10分鐘的時間才能完成。
此映像將會在未來的執行中重複使用,使其執行速度變得更快。
您可以在AzureMachineLearning工作室中檢視Docker組建記錄檔。
選取[輸出+記錄]索引標籤,然後選取20_image_build_log.txt。
當執行的狀態為[已完成]時,請選取[輸出+記錄]。
選取[std_log.txt]以檢視您執行的輸出。
Downloadinghttps://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gzto../data/cifar-10-python.tar.gz
Extracting../data/cifar-10-python.tar.gzto../data
epoch=1,batch=2000:loss2.19
epoch=1,batch=4000:loss1.82
epoch=1,batch=6000:loss1.66
...
epoch=2,batch=8000:loss1.51
epoch=2,batch=10000:loss1.49
epoch=2,batch=12000:loss1.46
FinishedTraining
如果您看到錯誤Yourtotalsnapshotsizeexceedsthelimit,表示data目錄位於ScriptRunConfig所使用的source_directory值中。
選取資料夾結尾的...,然後選取[移動]以將data移至get-started資料夾。
記錄定型計量
現在,您已在AzureMachineLearning中進行模型定型,接著您可以開始追蹤一些效能計量。
目前的定型指令碼會將計量列印到終端機。
AzureMachineLearning提供一種機制來記錄具有更多功能的計量。
藉由加入幾行程式碼,您就能夠將Studio中的計量視覺化,並比較多個執行之間的計量。
修改train.py以包含記錄
修改您的train.py指令碼,使其再多包含兩行程式碼:
importtorch
importtorch.optimasoptim
importtorchvision
importtorchvision.transformsastransforms
frommodelimportNet
fromazureml.coreimportRun
#ADDITIONALCODE:getrunfromthecurrentcontext
run=Run.get_context()
#downloadCIFAR10data
trainset=torchvision.datasets.CIFAR10(
root='./data',
train=True,
download=True,
transform=torchvision.transforms.ToTensor()
)
trainloader=torch.utils.data.DataLoader(
trainset,
batch_size=4,
shuffle=True,
num_workers=2
)
if__name__=="__main__":
#defineconvolutionalnetwork
net=Net()
#setuppytorchloss/optimizer
criterion=torch.nn.CrossEntropyLoss()
optimizer=optim.SGD(net.parameters(),lr=0.001,momentum=0.9)
#trainthenetwork
forepochinrange(2):
running_loss=0.0
fori,datainenumerate(trainloader,0):
#unpackthedata
inputs,labels=data
#zerotheparametergradients
optimizer.zero_grad()
#forward+backward+optimize
outputs=net(inputs)
loss=criterion(outputs,labels)
loss.backward()
optimizer.step()
#printstatistics
running_loss+=loss.item()
ifi%2000==1999:
loss=running_loss/2000
#ADDITIONALCODE:loglossmetrictoAML
run.log('loss',loss)
print(f'epoch={epoch+1},batch={i+1:5}:loss{loss:.2f}')
running_loss=0.0
print('FinishedTraining')
儲存此檔案,然後視需要關閉該索引標籤。
了解額外的兩行程式碼
在train.py中,您可以使用Run.get_context()方法,在定型指令碼本身內存取執行物件,並用其來記錄計量:
#ADDITIONALCODE:getrunfromthecurrentcontext
run=Run.get_context()
...
#ADDITIONALCODE:loglossmetrictoAML
run.log('loss',loss)
AzureMachineLearning中的計量有以下特點:
透過實驗和執行進行整理,讓您可以輕鬆地追蹤和比較計量。
搭配UI,讓您可以在Studio中將定型效能視覺化。
專為擴充而設計,因此您可以在執行數百個實驗後,依然保有這些優點。
更新Conda環境檔案
train.py指令碼只會在azureml.core上採用新的相依性。
更新pytorch-env.yml以反映這種變更:
name:pytorch-env
channels:
-defaults
-pytorch
dependencies:
-python=3.6.2
-pytorch
-torchvision
-pip
-pip:
-azureml-sdk
提交執行之前,請務必儲存此檔案。
提交執行至AzureMachineLearning
選取run-pytorch.py指令碼的索引標籤,然後選取[儲存並在終端機中執行指令碼],以重新執行run-pytorch.py指令碼。
請確定您已先將變更儲存至pytorch-aml-env.yml。
這次當您造訪Studio時,請移至[計量]索引標籤,您現在可以在此查看模型定型損失的即時更新!可能需要1到2分鐘的時間,定型才會開始。
後續步驟
在此課程中,您已從基本的"Helloworld!"指令碼升級為需要特定Python環境才能執行的更實際定型指令碼。
您已了解如何使用策展AzureMachineLearning環境。
最後,您已了解如何透過幾行程式碼,將計量記錄到AzureMachineLearning。
還有其他方法可以建立AzureMachineLearning環境,包括從piprequirements.txt,或從現有的本機Conda環境。
在下一個課程中,您將了解如何將CIFAR10資料集上傳至Azure,以使用AzureMachineLearning中的資料。
教學課程:使用您自己的資料
注意
如果您想要在此完成教學課程系列,而不是前往下一個步驟,請記得清除您的資源。
本文內容
延伸文章資訊
- 1Python機器學習第三版(上) - 博客來
書名:Python機器學習第三版(上),原文名稱:Python Machine Learning (Third Edition),語言:繁體中文,ISBN:9789864345182,頁數:41...
- 2machine-learning: 機器學習:使用Python
這份文件的目的是要提供Python 之機器學習套件scikit-learn (http://scikit-learn.org/) 的中文使用說明以及介紹。一開始的主要目標是詳細說明scikit-...
- 3台灣大學資訊系統訓練班
Python機器學習入門. AI 已經進入到不同產業,不論在電子、金融、資訊、醫療、零售、通訊、交通、物流等領域,您都可能透過機器學習(Machine Learning)解決過去難以 ...
- 4附資源與完整指導!帶你從零開始掌握Python 機器學習
現在是時候使用Python 機器學習標準庫scikit-learn 來實現機器學習算法了。 scikit-learn 流程圖. 下面許多的教程和訓練都是使用iPython (Jupyter) ...
- 5如何從零開始自學python與deep learning
加上時下流行的深度學習模型大都以較親民的程式語言Python開發,故吸引許多人踏進機器學習領域。本篇文章將以筆者的個人經驗出發,分享自己從一個只修過一學期程式設計 ...