Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

11

28.02.2007, 22:21

ok ich hab einfach mal das hier gemacht

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
        //Gewichte

        float Weight = 0.0f;
        //for (unsigned short i = 0; i < Weights.size(); i++)

            //for (unsigned short j = 0; j < Weights[i].size(); j++)

                for (unsigned short k = 0; k < Weights[1][0].size(); k++)
                {
                    Weight = Weights[1][0][k];
                    Stream->write((char*)&Weight, sizeof(float));
                }


und in der ladefunktion äquivalent.

Der fehler kommt auch (aber nur ab und zu, das beschriebene zufallsprinzip, bei einer einzigen zeile is die chance das er es schafft natürlich größer)

Chase

Alter Hase

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

12

28.02.2007, 22:29

Ich nehme an flush steht da jetzt drunter ? ;)

Als naechstes versuch mal den std::vector durch ein array zu ersetzen, du musst halt stueckchenweise rumprobieren.
"Have you tried turning it off and on again?"

13

28.02.2007, 22:34

was soll stream denn fürn Type sein und gibt es nen Grund das es nen Pointer ist?!
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

14

28.02.2007, 22:35

Naja es wird sich nix ändern wenn ich es durch nen array ersetze, dafür hab ich ja extra schon vorher aus dem vektor in eine zwischenvariable kopiert.

Das Flush hab ich direkt unter die Zeile gesetzt, aber auch mal noch später (danach wird noch was geschrieben), alles ohne erfolg

Stream ist vom typ ifstream (beim laden) und ofstream (beim speichern), eigentlich hat es keinen Grund das es ein Pointer ist, nein.

Chase

Alter Hase

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

15

28.02.2007, 22:54

Wie erzeugst du denn die Variable Weights vor dem Laden ? Mit vorgegebener Groesse ?

C-/C++-Quelltext

1
2
vector<vector<vector<float>>>Weights(15,vector<vector<float>>(15,vector<float>(15,0.0f)));
// haesslicher code
"Have you tried turning it off and on again?"

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

16

28.02.2007, 22:58

Nein dynamisch per parameterübergabe:



C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
//Gewichte anlegen (auch schon für Biasneurone)

    for (unsigned short i = 1; i < Layers; i++)
    {
               Weights.push_back(std::vector<std::vector<float> >());

        //für jedes Neuron der vorangegangenen Schicht sowie das BiasNeuron

        for (unsigned short j = 0; j < Neurons[i]; j++)
        {
            Weights[i].push_back(std::vector<float>());
            for (unsigned short k = 0; k < Neurons[i - 1] + 1; k++)
                Weights[i][j].push_back(0.0f);
        }
    }
Aber ich habe die Klasse bereits intensivst verwendet, ich lege meine Hand dafür ins Feuer das Weights genau so funktioniert wie ich es will, nur das speichern/laden will nicht.

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

17

28.02.2007, 23:36

Ok, so lässt sich der Fehler reproduzieren:

(Konsolenanwendung)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <fstream>
#include <time.h>
#include <iostream>
#include <conio.h>
//#include <vector>


int main(void)
{
    const unsigned long Tries = 1000000l;

    std::ofstream OStr("asdf");

    //Zufallszähler initialisieren

    srand((unsigned)time(0));

    float Value = 0.0f;
    for (unsigned long i = 0; i < Tries; i++)
    {
        Value = (static_cast<float>(rand() / static_cast<float>(RAND_MAX)));
        OStr.write((char*)&Value, sizeof(float));
        if (OStr.fail())
        {
            std::cout << "Fehler beim Schreiben: " << OStr.exceptions() << " beim " << i << ". Versuch.\n";
            break;
        }
    }

    OStr.flush();//dürfte direkt vor close egtl keinen Unterschied machen denke ich

    OStr.close();


    std::ifstream IStr("asdf");

    for (unsigned long i = 0; i < Tries; i++)
    {
        IStr.read((char*)&Value, sizeof(float));
        if (IStr.fail())
        {
            std::cout << "Fehler beim Lesen: " << IStr.exceptions() << " beim " << i << ". Versuch.\n";
            break;
        }
    }

    IStr.close();
    getch();


    return 0;
}


Bei mir gibt es Fehler beim Lesen.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

18

28.02.2007, 23:50

Öffne die Datei doch mal binär.

Lesen:
ifstream myFile("data.bin", ios::in | ios::binary);

Schreiben:
ofstream myFile("data.bin", ios::out | ios::binary);

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

19

28.02.2007, 23:53

woa geht danke!!!!

Werbeanzeige