Ich habe mehrere Male Modelle mit ML Studio classic erstellt und bereitgestellt. Dieses Mal las ich das offizielle Dokument, weil ich es neu lernen wollte, aber ich verstand es nicht gut und ging hin und her. Ich habe es geschafft, also werde ich einen Artikel schreiben, damit ich ihn nicht vergesse. Da ich für diejenigen schreibe, die es zum ersten Mal verwenden, habe ich die Details weggelassen. Bitte verzeihen Sie mir.
ist.
Da Python unterwegs verwendet wird, schreiben Sie die Umgebung und die importierte.
Name |
---|
urllib |
azure-storage-blob |
Beginnen wir mit den diesmal verwendeten Daten. Ich möchte wissen, ob ich mich weiterbilden konnte, daher verwende ich Daten, die zu eintönig sind. Schreiben Sie die Trainingsdaten, Testdaten und Umgestaltungsdaten unten.
train1.csv
id,target
1,1
2,1
3,1
4,1
5,1
remodel0.csv
id,target
1,0
2,0
3,0
4,0
5,0
Erwarten Sie im erstellten Modell ein Modell, das immer 1 zurückgibt, unabhängig davon, wie viele Sie eingeben. Selbst wenn Sie die Testdaten eingeben, sollte alles als 1 zurückgegeben werden. Erwarten Sie, dass 0 zurückgegeben wird, indem Sie erfahren, dass alles 0 ist.
Es ist überhaupt kein gutes Modell, daher werde ich es nur zum Testen verwenden.
Nun erstellen wir ein Modell. Nachdem Sie sich bei ML Studio angemeldet haben, wählen Sie "EXPERIMENTS" und klicken Sie unten auf dem Bildschirm auf "NEW".
Klicken Sie dann auf "Leeres Experiment". Jetzt können Sie ein Vorhersagemodell erstellen.
Lassen Sie uns tatsächlich ein Modell machen. Suchen Sie einfach in diesem Suchfenster nach dem gewünschten Block und fügen Sie ihn hinzu.
Diesmal handelt es sich (vorerst) um einen binären Begriff. Platzieren Sie also das Feld, das durch Suchen mit zwei Klassen erstellt wurde. Dieses Mal habe ich "Two-Class Boosted Decision Tree" verwendet. Suchen Sie auf die gleiche Weise nach anderen Blöcken und ordnen Sie sie wie im Bild gezeigt an.
Als nächstes setzen Sie jeden Block. Klicken Sie auf den Block Einstellungselemente werden auf der rechten Seite angezeigt. Parameter können im Algorithmusblock eingestellt werden. Dieses Mal können Sie es so lassen, wie es ist.
Als nächstes wird Daten importiert. Geben Sie hier die Daten an, die zum Lernen verwendet werden sollen. Beschreiben Sie Ihren Blob-Benutzernamen, Ihren Schlüssel und Ihren Dateipfad. Das Format dieser Daten ist csv, aber da die Datei einen Header hat, überprüfen wir "Datei hat Headerzeile".
Endlich das Zugmodell. Hier geben wir den Spaltennamen des zu lernenden Ziels an. Dieses Mal möchte ich "Ziel" lernen, also fülle ich "Ziel" mit "Spaltenauswahl starten" aus.
Wenn Sie fertig sind, verbinden wir die Blöcke mit einer Linie. Bitte beachten Sie, dass das Zugmodell nicht durch Linien auf der linken und rechten Seite verbunden werden kann. Wenn Sie es wie folgt anordnen können, klicken Sie unten auf dem Bildschirm auf "RUN", um es auszuführen.
Wenn alle Kontrollkästchen aktiviert sind, sind Sie fertig. Wenn Sie in der Mitte anhalten, muss etwas nicht stimmen. Der Name der Blob-Datei kann unterschiedlich sein (Erfahrungsgeschichte)
Machen Sie ein Vorhersageexperiment. Lassen Sie uns nun etwas machen, das eine Antwort zurückgibt, wenn Sie Daten mit dem zuvor erstellten Modell werfen. Klicken Sie unter "SET UP WEB SERVICE" neben "RUN" auf "Predictiv Web Service". Dann bewegt sich die Box und sieht aus wie die folgende. Bringen Sie "Daten exportieren" aus dem Suchfenster und schreiben Sie den Benutzernamen des Blobs usw. Das Testergebnis wird in den hier geschriebenen Pfad ausgegeben.
Lass uns nochmal laufen.
Wenn es wie zuvor überprüft wird, ist es abgeschlossen. Klicken Sie auf "WEBSERVICE VERWENDEN", wenn Sie fertig sind. Nach einer Weile ändert sich der Bildschirm und API-SCHLÜSSEL usw. werden angezeigt. Wenn Sie auf "ANFRAGE / ANTWORT" klicken, wird die API angezeigt, die Sie voraussichtlich verwenden werden. Auf dieser Seite können Sie auch einen einfachen Test durchführen. Lassen Sie uns tatsächlich auf die blaue TEST-Schaltfläche klicken und 3 in id und 1 in target eingeben, um zu experimentieren. Nach einer Weile wird das Ergebnis am Ende der Seite zurückgegeben. Der Spaltenname, der Spaltentyp und der Wert werden in einer Liste zurückgegeben.
return
Result: {"Results":{"output1":{"type":"table","value":{"ColumnNames":["id","target","Scored Labels","Scored Probabilities"],"ColumnTypes":["Int32","Int32","Int32","Double"],"Values":[["3","1","1","0.142857149243355"]]}}}}
Da "Scored Labels" das Ergebnis ist, wird in diesem Fall 1 zurückgegeben, was wie erwartet ist.
Klicken Sie nun auf "Neueste anzeigen", um zum vorherigen Bildschirm zurückzukehren.
Gehen Sie dann zur Registerkarte "Trainingsexperiment" und fügen Sie "Web-Service-Eingabe" und "Web-Service-Ausgabe" zu "RUN" hinzu.
Klicken Sie dann unten unter "WEB-SERVICE EINRICHTEN" auf "Webdienst bereitstellen".
Die Bereitstellung ist jetzt abgeschlossen. Sie benötigen den API-Schlüssel und die API-URL später. Der API-Schlüssel wird auf dem Bildschirm angezeigt. Die URL finden Sie, indem Sie auf "BATCH EXECTION" klicken. Die URL der zu verwendenden API steht vor "? Api-version ...", dh die URL endet mit "job". Ich bin hier gestolpert.
Lass uns neu lernen. Das Umlernen selbst wurde mit Python durchgeführt. C # ist ebenfalls ein Beispiel, funktioniert jedoch möglicherweise nur, wenn Sie es an einigen Stellen ändern. (Das war bei Python3.7 der Fall.)
Erstens das Programm, das Sie tatsächlich verwenden.
retrain.py
# python 3.7 also ändere urllib2
import urllib
import urllib.request
import json
import time
from azure.storage.blob import *
def printHttpError(httpError):
print(f"The request failed with status code: {str(httpError.code)}")
print(json.loads(httpError.read()))
return
def processResults(result):
results = result["Results"]
for outputName in results:
result_blob_location = results[outputName]
sas_token = result_blob_location["SasBlobToken"]
base_url = result_blob_location["BaseLocation"]
relative_url = result_blob_location["RelativeLocation"]
print(f"The results for {outputName} are available at the following Azure Storage location:")
print(f"BaseLocation: {base_url}")
print(f"RelativeLocation: {relative_url}")
print(f"SasBlobToken: {sas_token}")
return
def uploadFileToBlob(input_file, input_blob_name, storage_container_name, storage_account_name, storage_account_key):
#Es scheint, dass es keinen BlobService gibt, also ändern Sie ihn
blob_service = BlockBlobService(account_name=storage_account_name, account_key=storage_account_key)
print("Uploading the input to blob storage...")
blob_service.create_blob_from_path(storage_container_name, input_blob_name, input_file)
def invokeBatchExecutionService():
storage_account_name = "Blob-Benutzername"
storage_account_key = "Blob-Taste"
storage_container_name = "Name des Blob-Containers"
connection_string = f"DefaultEndpointsProtocol=https;AccountName={storage_account_name};AccountKey={storage_account_key}"
api_key = "API-Schlüssel neu lernen"
url = "API-URL"
uploadFileToBlob("Dateipfad zum Hochladen",
"Dateipfad nach dem Hochladen",
storage_container_name, storage_account_name, storage_account_key)
payload = {
"Inputs": {
"input1": {
"ConnectionString": connection_string,
"RelativeLocation": f"/{storage_container_name}/Dateipfad des zu überarbeitenden Blobs"
},
},
"Outputs": {
"output1": {
"ConnectionString": connection_string,
"RelativeLocation": f"/{storage_container_name}/Blob-Dateipfad zum Umgestalten der Ergebnisse.ilearner"
},
},
"GlobalParameters": {
}
}
body = str.encode(json.dumps(payload))
headers = { "Content-Type":"application/json", "Authorization":("Bearer " + api_key)}
print("Submitting the job...")
req = urllib.request.Request(url + "?api-version=2.0", body, headers)
response = urllib.request.urlopen(req)
result = response.read()
job_id = result[1:-1]
# job_Ich war wütend, weil der Ausweis nicht str war, also habe ich ihn konvertiert
job_id=job_id.decode('utf-8')
print(f"Job ID: {job_id}")
print("Starting the job...")
headers = {"Authorization":("Bearer " + api_key)}
req = urllib.request.Request(f"{url}/{job_id}/start?api-version=2.0", headers=headers, method="POST")
response = urllib.request.urlopen(req)
url2 = url + "/" + job_id + "?api-version=2.0"
while True:
print("Checking the job status...")
req = urllib.request.Request(url2, headers = { "Authorization":("Bearer " + api_key) })
response = urllib.request.urlopen(req)
result = json.loads(response.read())
status = result["StatusCode"]
if (status == 0 or status == "NotStarted"):
print(f"Job: {job_id} not yet started...")
elif (status == 1 or status == "Running"):
print(f"Job: {job_id} running...")
elif (status == 2 or status == "Failed"):
print(f"Job: {job_id} failed!")
print("Error details: " + result["Details"])
break
elif (status == 3 or status == "Cancelled"):
print(f"Job: {job_id} cancelled!")
break
elif (status == 4 or status == "Finished"):
print(f"Job: {job_id} finished!")
processResults(result)
break
time.sleep(1) # wait one second
return
invokeBatchExecutionService()
Es ist fast das gleiche wie das Beispiel, aber einige Änderungen wurden vorgenommen. (Ich habe es in den Kommentaren geschrieben.) Bitte schreiben Sie die URL, den Schlüssel, den Pfad usw. entsprechend der jeweiligen Umgebung neu. Bereiten Sie dann die Daten vor und führen Sie sie aus.
console
>python remodel.py
Uploading the input to blob storage...
Submitting the job...
Job ID: ID
Starting the job...
Checking the job status...
JobID not yet started...
Checking the job status...
JobID running...
Checking the job status...
JobID running...
Checking the job status...
JobID running...
Checking the job status...
JobID running...
Checking the job status...
JobID running...
Checking the job status...
JobID running...
Checking the job status...
JobID running...
Checking the job status...
JobID finished!
The results for output1 are available at the following Azure Storage location:
BaseLocation: URL
RelativeLocation: PATH
SasBlobToken: KEY
Sie sollten das Ergebnis wie oben erhalten. Die folgenden drei werden später verwendet.
Nun, ich habe den Umbau durchgeführt, aber er wurde noch nicht reflektiert. Öffnen Sie in diesem Bildschirm "New Web Services Experience". Wenn zu diesem Zeitpunkt "[Predictive Exp.]" Nach dem Modellnamen oben auf der Seite nicht hinzugefügt wird, klicken Sie auf "Experiment erstellt am ... [Predictive Exp.]", Um es zu verschieben.
Ich denke, es ist in Ordnung, das vorhandene zu überschreiben, aber die meiste Zeit werde ich es behalten. Erstellen Sie also einen neuen Endpunkt. Drücken Sie die linke Taste auf diesem Bildschirm ... (Ich fürchte, die Pfeile sind unordentlich.) Klicken Sie auf "+ NEU" und speichern Sie den Endpunkt unter dem Namen, den Sie verwenden möchten.
Wenn Sie auf den erstellten Endpunktnamen klicken, gelangen Sie zu einem Bildschirm wie dem oben genannten. Öffnen Sie daher die Registerkarte "Verbrauchen".
Wenn Sie es öffnen, werden verschiedene KEYs und URLs angezeigt. Dieses Mal werden wir "Primärschlüssel" und "Patch" verwenden. ``
Verwenden Sie sie, um den folgenden Code auszuführen.
update.py
import urllib
import urllib.request
import json
data = {
"Resources": [
{
"Name": "Modellname",
"Location":
{
"BaseLocation": "Ergebnis URL",
"RelativeLocation": "Ergebnispfad",
"SasBlobToken": "Ergebnis SCHLÜSSEL"
}
}
]
}
body = str.encode(json.dumps(data))
url = "Patch-Wert"
api_key = "Primärschlüsselwert" # Replace this with the API key for the web service
headers = {'Content-Type':'application/json', 'Authorization':('Bearer '+ api_key)}
req = urllib.request.Request(url, body, headers)
req.get_method = lambda: 'PATCH'
response = urllib.request.urlopen(req)
result = response.read()
print(result)
Es ist so. Wenn Sie die API-Hilfe unter Patch auf der vorherigen Seite öffnen, gibt es ein Beispiel. Ich denke, Sie sollten es so schreiben, wie es ist. Lass es uns laufen.
b''
wird zurückgegeben.
Das war's?
Aber das scheint in Ordnung zu sein.
Stellen Sie dies schließlich bereit.
Das Bereitstellungsverfahren ist
Lassen Sie uns testen, indem Sie die Registerkarte "Test" oben auf der Seite öffnen. Möglicherweise müssen Sie neu laden. id = 3, target = 1. Es scheint, dass es richtig 0 ist. War gut…
Ich habe es geschafft, das umgeschulte Modell bereitzustellen. Verringert sich die Genauigkeit des von Ihnen verwendeten Modells? Wenn Sie dies glauben, lernen Sie das Modell neu und verwenden Sie es weiter!
Recommended Posts