教學課程:定型第一個Python 機器學習模型 - Microsoft Docs

文章推薦指數: 80 %
投票人數:10人

請注意,Azure Machine Learning 的概念適用於任何機器學習服務程式碼,而不只是PyTorch。

在src 子資料夾中建立model.py 檔案。

將此程式碼複製到檔案:. 跳到主要內容 已不再支援此瀏覽器。

請升級至MicrosoftEdge,以利用最新功能、安全性更新和技術支援。

下載MicrosoftEdge 其他資訊 目錄 結束焦點模式 閱讀英文 儲存 目錄 閱讀英文 儲存 Twitter LinkedIn Facebook 電子郵件 目錄 教學課程:定型您的第一個機器學習模型(第2個部分,共3個部分) 發行項 06/23/2022 14位參與者 本文內容 適用於:PythonSDKazuremlv1 本教學課程說明如何在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中的資料。

教學課程:使用您自己的資料 注意 如果您想要在此完成教學課程系列,而不是前往下一個步驟,請記得清除您的資源。

本文內容



請為這篇文章評分?