Guten Tag,
hat hier schonmal jemand ein neuronales Netz (Objekterkennung auf Bildern) außerhalb des Raspberrys in Python trainiert und anschließend auf einem Raspberry Pi verwendet?
Es ist leider schwierig, da konsistente Informationen zu zu finden. Ich habe gelesen, man müsse das Netzwerk als Frozen intergraph .pb file speichern.
Allerdings finde ich nirgends weitere Infos, WIE man das denn macht.
Ich habe bereits ein Netz über Keras trainiert und konnte seperat die Netzwerkarchitektur und die Gewichtungen (weights) speichern, falls jemand weiß wie ich das pb. file daraus konvertieren kann.
Weiß da jemand was? Oder kennt jemand eine andere Möglichkeit?
Vielen Dank für jegliche Hilfe.
Liebe Grüße
offifee
Trainiertes neuronales Netz auf dem Raspberry verwenden
Wie willst du denn dann auf dem Pi das trainierte NN verwenden, mit welchem Python Package?
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Das ist mir an sich egal. Was bereits mit einem vortrainierten NN geklappt hat (das habe ich direkt als Frozen intergraph .pb file runtergeladen): Dieses NN in Python 3.6 auf dem Raspberry ueber tensorflow zu verwenden. Wenn ich es richtig verstanden habe, gehoeren diese .pb files so wie so zu tensorflow.
Also waere es super zu wissen, wie ich ein in Keras trainiertes Netz entsprechend konvertiere oder zu wissen, wie ich ein NN in tensorflow trainiere und als .pb speichere/exportiere.
Wenn jemand eine andere Gesamtloesung hat, wuerde ich das aber auch probieren.
Also ich würde das so machen:
Auf einem anderen Rechner kann man dann das gespeicherte Model laden und benutzen
Code: Alles auswählen
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# dummy NN
model = Sequential()
model.add(Dense(64, activation = ‘relu’, input_dim = 10))
model.add(Dense(1, activation = ‘sigmoid’))
model.compile(optimizer = ‘adam’, loss = ‘binary_crossentropy’, metrics = [‘accuracy’])
# training
model.fit(X_train, y_train, epochs = 5)
# predicting
y_pred = model.predict(X_test)
y_pred = (y_pred > 0.5)
# saving the model
model.save(“model.h5”)
Code: Alles auswählen
from tensorflow.keras.models import load_model
model = load_model(“model.h5”)
new_prediction = model.predict(new_X_test)
new_prediction = (new_prediction > 0.5)
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Vielen Dank fuer Ihre Antwort!ThomasL hat geschrieben: ↑Freitag 28. Juni 2019, 05:18 Also ich würde das so machen:Auf einem anderen Rechner kann man dann das gespeicherte Model laden und benutzenCode: Alles auswählen
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense # dummy NN model = Sequential() model.add(Dense(64, activation = ‘relu’, input_dim = 10)) model.add(Dense(1, activation = ‘sigmoid’)) model.compile(optimizer = ‘adam’, loss = ‘binary_crossentropy’, metrics = [‘accuracy’]) # training model.fit(X_train, y_train, epochs = 5) # predicting y_pred = model.predict(X_test) y_pred = (y_pred > 0.5) # saving the model model.save(“model.h5”)
Code: Alles auswählen
from tensorflow.keras.models import load_model model = load_model(“model.h5”) new_prediction = model.predict(new_X_test) new_prediction = (new_prediction > 0.5)
Das Problem ist, dass ich dann am Ende wieder ein Keras Modell habe. Ein solches habe ich auch schon erfolgreich trainiert, nur bekomme ich es nicht auf dem Raspberry zum Laufen. Auf dem Raspberry habe ich es bisher nur geschafft, ein .pb (wenn ich es richtig verstehe ein in Tensorflow ohne Keras) trainiertes Netz zu verwenden. Aber eben nur eins, das ich so fertig im passsenden Format runtergeladen habe.
Wissen Sie, wie man ein .h5 Model auf dem Raspberry verwenden oder es in ein .pb konvertieren kann? Ich finde leider keine wirklich hilfreichen Informationen dazu.
Oder funktioniert das schon mit dem zweiten Teil des Codes? Sind in dem .h5 nicht nur die Gewichtungen (Weights) hinterlegt? Ich habe zum Speichern eines Netzwerks in Keras immer nur gelesen, dass man Architektur und Gewichtungen einzelnd speichert, auch wenn das fuer mich wenig Sinn ergeben hat.
Liebe Gruesse
Dann zeig doch mal den Code mit dem du eine .pb Datei erzeugt hast und den Code, mit dem du die .pb Datei auf dem Pi verwendest.
Was spricht dagegen, Tensorflow auf dem Pi zu verwenden? (Darüber habe ich keine Info/Erfahrung)
Von .pb Dateien habe ich auch das erste Mal von dir gehört.
Was spricht dagegen, Tensorflow auf dem Pi zu verwenden? (Darüber habe ich keine Info/Erfahrung)
Von .pb Dateien habe ich auch das erste Mal von dir gehört.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Habe mal etwas Zeit in Google investiert und das hier gefunden:
https://stackoverflow.com/questions/454 ... sorflow-pb
https://stackoverflow.com/questions/454 ... sorflow-pb
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Mit ein paar kleinen Erweiterungen hat Ihr Code zum verwenden des Netzwerks als .h5 tatsaechlich funktioniert! Vielen Dank, da werde ich jetzt drauf aufbauen.
Sie haben mir damit sehr geholfen.
Ich habe jetzt folgendes genutzt:
from tensorflow.keras.models import load_model
model = load_model(“model.h5”)
%hier ein paar Befehle zum Bild einlesen, als img speichern und in die richtige Form bringen
classes=model.predict_classes(img)
print(classes)
Funktioniert super, jetzt muss nur noch verschoenert werden. Also, nochmals vielen Dank!
Sie haben mir damit sehr geholfen.
Ich habe jetzt folgendes genutzt:
from tensorflow.keras.models import load_model
model = load_model(“model.h5”)
%hier ein paar Befehle zum Bild einlesen, als img speichern und in die richtige Form bringen
classes=model.predict_classes(img)
print(classes)
Funktioniert super, jetzt muss nur noch verschoenert werden. Also, nochmals vielen Dank!