WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Probleme mit NaN bei der Implementierung

 

GeManu

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2015, 17:09     Titel: Probleme mit NaN bei der Implementierung
  Antworten mit Zitat      
Hallo Leute!

Hoffe ich bin hier richtig; ihr seit meine letzte Hoffnung, da ich nicht weiter komme.

Ich schreibe im Moment an meiner Bachelorarbeit, wobei mein Thema die Optimierung der Inpainting Maske bei Bildkompression anhand linearer Diffusion ist. Das heißt konkret, dass ich gleichzeitig versuche möglichst wenig Pixel in der Maske zu speichern und trotzdem eine möglichst gute Rekonstruktionsqualität zu bekommen.
Das alles mache ich durch das Gradientenabstiegsverfahren.

Zum Problem: ich bin mir ziemlich sicher, dass die Theorie dahinter stimmt und habe sie auch implementiert. Für die ersten Schritte der Optimierung funktioniert das ganze, nur ab einem gewissen Punkt bekomme ich NaN Werte, weil ich, und das ist meine Annahme, innerhalb der Rechnungen irgendwann den Maximalwert von Double überschreite und/oder den Minimalwert unterschreite.

Ich weiß einfach nicht wie ich das vermeiden kann und hab schon einiges ausprobiert ohne weiter zu kommen, hoffe ihr könnt mir helfen da mein Tutor leider die nächste Woche unerreichbar ist. Außerdem wüsste ich nicht wovon die NaN Werte sonst kommen könnten.


Optimierung von der Maske:
Code:
for i=1:50
    U = linearDiffusion(params,c,u);
    u = U(:,params.iterations);
    du_dc = 1;
    for j=1:params.iterations-1    
        A = 1 - tau * c - params.D' * (params.D * (tau * (1-c)));
        B = - tau * U(:,j) + tau * (params.D' *(params.D * U(:,j))) + tau * params.g;
        du_dc = A' .* du_dc + B';
    end
    dL_du = (u - params.g)';
    grad = du_dc .* (A' .* dL_du) + B' .* dL_du;
    c = c - alpha * grad';
    c = (abs(c) - tau * 0.5) .* sign(c);

end


Die Diffusion:

Code:
g = params.g;
D = params.D;
for i=1:params.iterations
    grad = c .* (u-g) + (1-c) .* (D' * (D*u));
    u = u - params.tau * grad;
    U(:,i) = u;
   
end


LG Gerd


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 06.08.2015, 17:17     Titel:
  Antworten mit Zitat      
was wird denn nan? ich wüde mal den debugger reinsetzen und gucken was da passiert wenn das nan wird. rechtklick auf die debug marke und dann conditon setzen
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
GeManu

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2015, 17:26     Titel:
  Antworten mit Zitat      
Den Debugger hab ich schon laufen lassen. Undzwar kommt NaN das erste Mal in der Diffusion vor. zB von den 1000 Schritten laufen die erste 230 normal, im 231 Schritt kommt dann an einer oder Mehreren Stellen des u Vektors NaN vor. Schaut man sich die Werte davor an sind die sehr groß (e^200).
Irgendwann ist dann der ganze Vektor NaN, dadurch auch die Werte die den u Vektor verwenden.
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 06.08.2015, 17:52     Titel:
  Antworten mit Zitat      
wie groß der maximalwert werden darf kannst du mit realmax einsehen.
sollte irgendwo bei e^308 sein. wenn du erstmal nan drin hast gehen die natürlich auch nicht von alleine wieder weg.

warum deine werte so groß werden kann ich auf den ersten blick an deinem code nicht erkennen. das ist ja so auch nicht lauffähig
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
GeManu

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2015, 10:29     Titel:
  Antworten mit Zitat      
Habe ich auch schon nachgeschaut, aber kann mir wie gesagt nicht vorstellen woran es sonst liegen könnte. Debuggt hab ich schon mehrfach, jedoch ohne brauchbares Ergebnis.

Hab im Anhang mal meinen Ausführbaren Code gehangen Smile

Bil. Opt..zip
 Beschreibung:

Download
 Dateiname:  Bil. Opt..zip
 Dateigröße:  109.64 KB
 Heruntergeladen:  368 mal
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 07.08.2015, 11:09     Titel:
  Antworten mit Zitat      
so dadurch das das irgend eine komische mac ordnerstruktur ist kann ich das nicht öffnen und ich hab die letzten 30 min damit verbracht den ordner wieder zu löschen. wobei ich mir nicht sicher bin wie ich das geschafft hab.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
GeManu

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2015, 11:17     Titel:
  Antworten mit Zitat      
Oh Sorry! Ist aber seltsam da ich bei meinem Win Rechner nie Probleme hab wenn ich das so rüberschicke
 
GeManu

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2015, 12:47     Titel:
  Antworten mit Zitat      
So müsste das hoffentlich ohne Probleme funktionieren Smile

https://drive.google.com/folderview.....9RS0pYNkk&usp=sharing
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.