Laden eines bestehenden Modells

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Bebbi
User
Beiträge: 144
Registriert: Dienstag 21. April 2020, 19:21

Hallo zusammen

Ich habe ein Problem und kann nicht auf ein zuvor durchgeführtes und gespeichertes Modell zurückgreifen.

Zu Beginn meiner Arbeit habe ich ein Verzeichnis angelegt wo sämtliche Daten abgelegt werden:

Code: Alles auswählen

# create Colab Notebooks directory for the proejct work
Project_Work = '/content/drive/MyDrive/Colab Project_Work'
if not os.path.exists(Project_Work): os.makedirs(Project_Work)

 # create data sub-directory inside the Colab Notebooks for the project directory
data_directory = '/content/drive/MyDrive/Colab Project_Work/data'
if not os.path.exists(data_directory): os.makedirs(data_directory)
    
 # create models sub-directory inside the Colab Notebooks for the project directory
visuals_directory = '/content/drive/MyDrive/Colab Project_Work/visuals'
if not os.path.exists(visuals_directory): os.makedirs(visuals_directory)

 # create models sub-directory inside the Colab Notebooks for the project directory
models_directory = '/content/drive/MyDrive/Colab Project_Work/models'
if not os.path.exists(models_directory): os.makedirs(models_directory)
    
# create models sub-directory inside the Colab Notebooks for the project directory
statistics_directory = '/content/drive/MyDrive/Colab Project_Work/statistics'
if not os.path.exists(statistics_directory): os.makedirs(statistics_directory)

Zum Schluss möchte ich ein beliebiges Model laden und mir dieses wieder anzeigen lassen. In diesem Fall heisst die zu ladende Datei train_model.pth

Ich habe dies mit folgendem Code versucht:

Code: Alles auswählen

# init the pre-trained model architecture
lstm_model_trained = train_model().to(device)

# set the pre-trained model name we aim to load
lstm_model_name_trained = '/content/drive/MyDrive/Colab Project_Work/models.pth'

# read pretrained model from the remote location
lstm_model_trained_bytes = urllib.request.urlopen(trade_model)

# load tensor from io.BytesIO object
lstm_model_trained_buffer = io.BytesIO(lstm_model_trained_bytes.read())

# load the pre-trained model paramaters 
lstm_model_trained.load_state_dict(torch.load(lstm_model_trained_buffer, map_location=lambda storage, loc: storage))
Erhalte dabei aber immer folgende Fehlermeldung:

Code: Alles auswählen

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-139-ee76b3700613> in <module>()
      1 # init the pre-trained model architecture
----> 2 lstm_model_trained = train_model().to(device)
      3 
      4 # set the pre-trained model name we aim to load
      5 lstm_model_name_trained = '/content/drive/MyDrive/Colab Project_Work/models.pth'

NameError: name 'train_model' is not defined
Dies obwohl die Datei train_model.pth im entsprechenden Verzeichnis abgelegt wurde und entsprechend auch exisitert. Wo habe ich etwas übersehen?

Besten Dank
Benutzeravatar
sparrow
User
Beiträge: 4536
Registriert: Freitag 17. April 2009, 10:28

Bei der Bennung von Variablen solltest du dich an PEP-8 halten.
Die Art, wie du if-Abfragen formatierst halte ich für schwierig. Schreibe nicht mehrere Befehle in eine Zeile. Das kannst du dir auch alles sparen, wenn du das pathlib Modul verwendest.

Der Name der Datei hat nichts mit der Fehlermeldung zu tun. Du versuchst auf etwas mit dem Namen "train_model" zuzugreifen. Und dieser Name ist im Programm nicht definiert.
Benutzeravatar
__blackjack__
User
Beiträge: 14032
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ich würde noch mal den Vorschlag zu `pathlib` bekräftigen. Aber selbst wenn man `os.path()` verwendet, sollte man a) nicht das Basisverzeichnis fünf mal im Quelltext stehen haben, sondern nur einmal. b) ist es überflüssig das Basisverzeichnis extra zu erstellen wenn man `makedirs()` verwendet. Und c) braucht es auch bei `makedirs()` die ``if``-Abfragen nicht, weil das die Funktion bereits selbst übernehmen kann → `exist_ok`-Argument.

Die Kommentare sind alle überflüssig weil die nur beschreiben was da offensichtlich bereits als Code steht. Das erhöht die Gefahr das man bei Änderungen die Kommentare nicht entsprechend mit ändert und falsche Kommentare sind noch schlechter als redundante oder nicht vorhandene Kommentare, weil man dann als Leser nicht weiss was richtig ist, der Kommentar, oder der Code.

Ungetestet:

Code: Alles auswählen

from pathlib import Path

...

    project_work_path = Path("/content/drive/MyDrive/Colab Project_Work")
    for directory_name in ["data", "visuals", "models", "statistics"]:
        (project_work_path / directory_name).mkdir(parents=True, exist_ok=True)
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Bebbi
User
Beiträge: 144
Registriert: Dienstag 21. April 2020, 19:21

Danke Euch, hatte wieder einmal Tomaten auf den Augen, was leider in letzter Zeit zu häufig vorkommt.
Antworten