Bonjour, je suis toujours sur ma bibliothèque de réseaux de neurones sur ESP32.
Je cherche à faire de l'allocation dynamique de mémoire pour le jeu de données. Le jeu de données doit être un tableau de struct dont la taille est inconnue à la compilation. Elle peut être déclarée par l'utilisateur.
La struct a cette définition
typedef struct { /* The dataset */
float* In; /* Array of input data */
float Out; /* Output value */
} DATA;
'In' est un vecteur dont la taille n'est pas connue à la compilation, mais qui est fournie lors de la déclaration du réseau, avant de déclarer le jeu de données.
L'utilisateur déclare d'abord le réseau et ses paramètres, parmi lesquels se trouve la taille du vecteur.
Ensuite, il déclare son jeu de données et alloue la mémoire. J'aimerais créer une méthode qui alloue la mémoire.
DATA dataset[4];
Net.createDataset (dataset, 4);
Ensuite, il restera à renseigner le dataset, par exemple comme ceci :
dataset[0].In[0] = 1;
dataset[0].In[1] = 1;
dataset[0].Out = 1;
dataset[1].In[0] = 1;
dataset[1].In[1] = 0;
dataset[1].Out = 1;
dataset[2].In[0] = 0;
dataset[2].In[1] = 1;
dataset[2].Out = 1;
dataset[3].In[0] = 0;
dataset[3].In[1] = 0;
dataset[3].Out = 0;
Pouvez-vous m'aider pour l'écriture de la méthode createDataset ?
J'essaye, mais ça ne marche pas :
void MLP::createDataset (DATA* dataset, int nData)
{
dataset = (DATA*) calloc(nData, sizeof(DATA));
for (int i = 0; i < nData; i++) {
dataset[i]->In = (float*) calloc(_units[0], sizeof(float));
}
}
_units[0] contient la taille du vecteur In.
Le compilateur me dit :
Arduino : 1.8.9 (Windows 10), Carte : "ESP32 Dev Module, Disabled, Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS), 240MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 921600, None"
sketch\MLP.cpp: In member function 'void MLP::createDataset(DATA*, int)':
MLP.cpp:189:15: error: base operand of '->' has non-pointer type 'DATA'
dataset->In = (float*) calloc(_units[0], sizeof(float));
- ^*
exit status 1
base operand of '->' has non-pointer type 'DATA'[/quote]
Comment faire ? Merci de votre aide