mirror of
https://github.com/augustin64/projet-tipe
synced 2025-02-02 19:39:39 +01:00
Compare commits
7 Commits
3672d07dff
...
47a475a370
Author | SHA1 | Date | |
---|---|---|---|
47a475a370 | |||
49a2299c1c | |||
3ac318dd2c | |||
9474734a8f | |||
693dee581e | |||
fd36226600 | |||
e44cecbe8d |
2
.gitignore
vendored
2
.gitignore
vendored
@ -13,6 +13,8 @@ build/*
|
|||||||
# src/cnn/export.c
|
# src/cnn/export.c
|
||||||
fichier.json
|
fichier.json
|
||||||
test-img-vis-kernel/*
|
test-img-vis-kernel/*
|
||||||
|
# Valgrind core
|
||||||
|
vgcore.*
|
||||||
|
|
||||||
## VSCode config
|
## VSCode config
|
||||||
.vscode
|
.vscode
|
||||||
|
13
Makefile
13
Makefile
@ -6,8 +6,9 @@ CUDA_INCLUDE := /opt/cuda/include # Default installation path for ArchLinux, may
|
|||||||
|
|
||||||
NVCC_INSTALLED := $(shell command -v $(NVCC) 2> /dev/null)
|
NVCC_INSTALLED := $(shell command -v $(NVCC) 2> /dev/null)
|
||||||
|
|
||||||
DENSE_SRCDIR := $(SRCDIR)/dense
|
COMMON_SRCDIR := $(SRCDIR)/common
|
||||||
CNN_SRCDIR := $(SRCDIR)/cnn
|
DENSE_SRCDIR := $(SRCDIR)/dense
|
||||||
|
CNN_SRCDIR := $(SRCDIR)/cnn
|
||||||
|
|
||||||
DENSE_SRC := $(wildcard $(DENSE_SRCDIR)/*.c)
|
DENSE_SRC := $(wildcard $(DENSE_SRCDIR)/*.c)
|
||||||
CNN_SRC := $(wildcard $(CNN_SRCDIR)/*.c)
|
CNN_SRC := $(wildcard $(CNN_SRCDIR)/*.c)
|
||||||
@ -146,14 +147,14 @@ endif
|
|||||||
#
|
#
|
||||||
# Build general files
|
# Build general files
|
||||||
#
|
#
|
||||||
$(BUILDDIR)/%.o: $(SRCDIR)/%.c $(SRCDIR)/include/%.h
|
$(BUILDDIR)/%.o: $(COMMON_SRCDIR)/%.c $(COMMON_SRCDIR)/include/%.h
|
||||||
$(CC) -c $< -o $@ $(CFLAGS)
|
$(CC) -c $< -o $@ $(CFLAGS)
|
||||||
|
|
||||||
$(BUILDDIR)/%.cuda.o: $(SRCDIR)/%.c $(SRCDIR)/include/%.h
|
$(BUILDDIR)/%.cuda.o: $(COMMON_SRCDIR)/%.c $(COMMON_SRCDIR)/include/%.h
|
||||||
$(CC) -c $< -o $@ $(CFLAGS) -DUSE_CUDA -lcuda -I$(CUDA_INCLUDE)
|
$(CC) -c $< -o $@ $(CFLAGS) -DUSE_CUDA -lcuda -I$(CUDA_INCLUDE)
|
||||||
|
|
||||||
ifdef NVCC_INSTALLED
|
ifdef NVCC_INSTALLED
|
||||||
$(BUILDDIR)/cuda_%.o: $(SRCDIR)/%.cu $(SRCDIR)/include/%.h
|
$(BUILDDIR)/cuda_%.o: $(COMMON_SRCDIR)/%.cu $(COMMON_SRCDIR)/include/%.h
|
||||||
$(NVCC) $(NVCCFLAGS) -c -dc $< -o $@
|
$(NVCC) $(NVCCFLAGS) -c -dc $< -o $@
|
||||||
else
|
else
|
||||||
@echo "$(NVCC) not found, skipping"
|
@echo "$(NVCC) not found, skipping"
|
||||||
@ -182,7 +183,7 @@ $(BUILDDIR)/test-dense_%: $(TEST_SRCDIR)/dense_%.c $(DENSE_OBJ) $(BUILDDIR)/colo
|
|||||||
$(BUILDDIR)/test-memory_management: $(TEST_SRCDIR)/memory_management.c $(BUILDDIR)/colors.o $(BUILDDIR)/utils.o $(BUILDDIR)/test_memory_management.o
|
$(BUILDDIR)/test-memory_management: $(TEST_SRCDIR)/memory_management.c $(BUILDDIR)/colors.o $(BUILDDIR)/utils.o $(BUILDDIR)/test_memory_management.o
|
||||||
$(CC) $^ -o $@ $(CFLAGS) $(LD_CFLAGS)
|
$(CC) $^ -o $@ $(CFLAGS) $(LD_CFLAGS)
|
||||||
|
|
||||||
$(BUILDDIR)/test_memory_management.o: $(SRCDIR)/memory_management.c $(SRCDIR)/include/memory_management.h
|
$(BUILDDIR)/test_memory_management.o: $(COMMON_SRCDIR)/memory_management.c $(COMMON_SRCDIR)/include/memory_management.h
|
||||||
$(CC) -c $< -o $@ $(CFLAGS) -DTEST_MEMORY_MANAGEMENT
|
$(CC) -c $< -o $@ $(CFLAGS) -DTEST_MEMORY_MANAGEMENT
|
||||||
|
|
||||||
ifdef NVCC_INSTALLED
|
ifdef NVCC_INSTALLED
|
||||||
|
@ -3,21 +3,11 @@
|
|||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#include "include/backpropagation.h"
|
#include "include/backpropagation.h"
|
||||||
#include "../include/utils.h"
|
#include "../common/include/utils.h"
|
||||||
#include "include/struct.h"
|
#include "include/struct.h"
|
||||||
|
|
||||||
#include "include/config.h"
|
#include "include/config.h"
|
||||||
|
|
||||||
#ifndef __CUDACC__
|
|
||||||
int min(int a, int b) {
|
|
||||||
return a<b?a:b;
|
|
||||||
}
|
|
||||||
|
|
||||||
int max(int a, int b) {
|
|
||||||
return a > b ? a : b;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Softmax backward MSE
|
* Softmax backward MSE
|
||||||
*/
|
*/
|
||||||
|
@ -3,21 +3,11 @@
|
|||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#include "include/backpropagation.h"
|
#include "include/backpropagation.h"
|
||||||
#include "../include/utils.h"
|
#include "../common/include/utils.h"
|
||||||
#include "include/struct.h"
|
#include "include/struct.h"
|
||||||
|
|
||||||
#include "include/config.h"
|
#include "include/config.h"
|
||||||
|
|
||||||
#ifndef __CUDACC__
|
|
||||||
int min(int a, int b) {
|
|
||||||
return a<b?a:b;
|
|
||||||
}
|
|
||||||
|
|
||||||
int max(int a, int b) {
|
|
||||||
return a > b ? a : b;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Softmax backward MSE
|
* Softmax backward MSE
|
||||||
*/
|
*/
|
||||||
|
@ -4,7 +4,9 @@
|
|||||||
#include <float.h> // Is it used ?
|
#include <float.h> // Is it used ?
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#include "../include/memory_management.h"
|
#include "../common/include/memory_management.h"
|
||||||
|
#include "../common/include/colors.h"
|
||||||
|
#include "../common/include/utils.h"
|
||||||
#include "include/backpropagation.h"
|
#include "include/backpropagation.h"
|
||||||
#include "include/initialisation.h"
|
#include "include/initialisation.h"
|
||||||
#include "include/function.h"
|
#include "include/function.h"
|
||||||
@ -12,8 +14,6 @@
|
|||||||
#include "include/update.h"
|
#include "include/update.h"
|
||||||
#include "include/make.h"
|
#include "include/make.h"
|
||||||
|
|
||||||
#include "../include/colors.h"
|
|
||||||
#include "../include/utils.h"
|
|
||||||
#include "include/cnn.h"
|
#include "include/cnn.h"
|
||||||
|
|
||||||
// Augmente les dimensions de l'image d'entrée
|
// Augmente les dimensions de l'image d'entrée
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#include "include/struct.h"
|
#include "include/struct.h"
|
||||||
#include "../include/utils.h"
|
#include "../common/include/utils.h"
|
||||||
|
|
||||||
#include "include/config.h"
|
#include "include/config.h"
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#include "include/struct.h"
|
#include "include/struct.h"
|
||||||
#include "../include/utils.h"
|
#include "../common/include/utils.h"
|
||||||
|
|
||||||
#include "include/config.h"
|
#include "include/config.h"
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "../include/memory_management.h"
|
#include "../common/include/memory_management.h"
|
||||||
|
#include "../common/include/colors.h"
|
||||||
|
#include "../common/include/utils.h"
|
||||||
#include "include/initialisation.h"
|
#include "include/initialisation.h"
|
||||||
#include "../include/colors.h"
|
|
||||||
#include "include/function.h"
|
#include "include/function.h"
|
||||||
#include "../include/utils.h"
|
|
||||||
|
|
||||||
#include "include/creation.h"
|
#include "include/creation.h"
|
||||||
|
|
||||||
|
135
src/cnn/export.c
135
src/cnn/export.c
@ -4,10 +4,11 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
|
||||||
|
#include "../common/include/colors.h"
|
||||||
#include "include/backpropagation.h"
|
#include "include/backpropagation.h"
|
||||||
|
#include "../common/include/mnist.h"
|
||||||
#include "include/neuron_io.h"
|
#include "include/neuron_io.h"
|
||||||
#include "../include/colors.h"
|
|
||||||
#include "../include/mnist.h"
|
|
||||||
#include "include/struct.h"
|
#include "include/struct.h"
|
||||||
#include "include/jpeg.h"
|
#include "include/jpeg.h"
|
||||||
#include "include/free.h"
|
#include "include/free.h"
|
||||||
@ -18,15 +19,13 @@ void help(char* call) {
|
|||||||
printf("Usage: %s ( print-poids-kernel-cnn | visual-propagation ) [OPTIONS]\n\n", call);
|
printf("Usage: %s ( print-poids-kernel-cnn | visual-propagation ) [OPTIONS]\n\n", call);
|
||||||
printf("OPTIONS:\n");
|
printf("OPTIONS:\n");
|
||||||
printf("\tprint-poids-kernel-cnn\n");
|
printf("\tprint-poids-kernel-cnn\n");
|
||||||
printf("\t\t--modele | -m [FILENAME]\tFichier contenant le réseau entraîné\n");
|
printf("\t\t--modele | -m [FILENAME]\tFichier contenant le réseau entraîné\n");
|
||||||
printf("\tvisual-propagation\n");
|
printf("\tvisual-propagation\n");
|
||||||
printf("\t\t--modele | -m [FILENAME]\tFichier contenant le réseau entraîné\n");
|
printf("\t\t--modele | -m [FILENAME]\tFichier contenant le réseau entraîné\n");
|
||||||
printf("\t\t--images | -i [FILENAME]\tFichier contenant les images.\n");
|
printf("\t\t--out | -o [BASE_FILENAME]\tLes images seront stockées dans ${out}_layer-${numéro de couche}_feature-${kernel_numero}.jpeg\n");
|
||||||
printf("\t\t--numero | -n [numero]\tNuméro de l'image dont la propagation veut être visualisée\n");
|
printf("\t(mnist)\t--images | -i [FILENAME]\tFichier contenant les images.\n");
|
||||||
printf("\t\t--out | -o [BASE_FILENAME]\tLes images seront stockées dans ${out}_layer-${numéro de couche}_feature-${kernel_numero}.jpeg\n");
|
printf("\t(mnist)\t--numero | -n [numero]\tNuméro de l'image dont la propagation veut être visualisée\n");
|
||||||
|
printf("\t(jpeg)\t--jpeg-image | -j [FILENAME]\tImage jpeg dont la propagation veut être visualisée.\n");
|
||||||
printf("\n");
|
|
||||||
printf_warning("Seul les datasets de type MNIST sont pris en charge pour le moment\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -82,21 +81,20 @@ void print_poids_ker_cnn(char* modele) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void write_image(float** data, int width, char* base_filename, int layer_id, int kernel_id) {
|
void write_image(float** data, int width, int height, char* base_filename, int layer_id, int kernel_id) {
|
||||||
int filename_length = strlen(base_filename) + (int)log10(layer_id+1)+1 + (int)log10(kernel_id+1)+1 + 21;
|
int filename_length = strlen(base_filename) + (int)log10(layer_id+1)+1 + (int)log10(kernel_id+1)+1 + 21;
|
||||||
char* filename = (char*)malloc(sizeof(char)*filename_length);
|
char* filename = (char*)malloc(sizeof(char)*filename_length);
|
||||||
|
|
||||||
sprintf(filename, "%s_layer-%d_feature-%d.jpeg", base_filename, layer_id, kernel_id);
|
sprintf(filename, "%s_layer-%d_feature-%d.jpeg", base_filename, layer_id, kernel_id);
|
||||||
|
|
||||||
|
|
||||||
imgRawImage* image = (imgRawImage*)malloc(sizeof(imgRawImage));
|
imgRawImage* image = (imgRawImage*)malloc(sizeof(imgRawImage));
|
||||||
|
|
||||||
image->numComponents = 3;
|
image->numComponents = 3;
|
||||||
image->width = width;
|
image->width = width;
|
||||||
image->height = width;
|
image->height = height;
|
||||||
image->lpData = (unsigned char*)malloc(sizeof(unsigned char)*width*width*3);
|
image->lpData = (unsigned char*)malloc(sizeof(unsigned char)*width*height*3);
|
||||||
|
|
||||||
for (int i=0; i < width; i++) {
|
for (int i=0; i < height; i++) {
|
||||||
for (int j=0; j < width; j++) {
|
for (int j=0; j < width; j++) {
|
||||||
float color = fmax(fmin(data[i][j], 1.), 0.)*255;
|
float color = fmax(fmin(data[i][j], 1.), 0.)*255;
|
||||||
|
|
||||||
@ -114,52 +112,63 @@ void write_image(float** data, int width, char* base_filename, int layer_id, int
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void visual_propagation(char* modele_file, char* images_file, char* out_base, int numero) {
|
void visual_propagation(char* modele_file, char* mnist_images_file, char* out_base, int numero, char* jpeg_file) {
|
||||||
Network* network = read_network(modele_file);
|
Network* network = read_network(modele_file);
|
||||||
|
|
||||||
int* mnist_parameters = read_mnist_images_parameters(images_file);
|
if (mnist_images_file) {
|
||||||
int*** images = read_mnist_images(images_file);
|
int* mnist_parameters = read_mnist_images_parameters(mnist_images_file);
|
||||||
|
int*** images = read_mnist_images(mnist_images_file);
|
||||||
|
|
||||||
int nb_elem = mnist_parameters[0];
|
int nb_elem = mnist_parameters[0];
|
||||||
|
|
||||||
int width = mnist_parameters[1];
|
int width = mnist_parameters[1];
|
||||||
int height = mnist_parameters[2];
|
int height = mnist_parameters[2];
|
||||||
free(mnist_parameters);
|
free(mnist_parameters);
|
||||||
|
|
||||||
if (numero < 0 || numero >= nb_elem) {
|
if (numero < 0 || numero >= nb_elem) {
|
||||||
printf_error("Numéro d'image spécifié invalide.");
|
printf_error("Numéro d'image spécifié invalide.");
|
||||||
printf(" Le fichier contient %d images.\n", nb_elem);
|
printf(" Le fichier contient %d images.\n", nb_elem);
|
||||||
exit(1);
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write image to the network
|
||||||
|
write_image_in_network_32(images[numero], height, width, network->input[0][0], false);
|
||||||
|
|
||||||
|
// Free allocated memory from image reading
|
||||||
|
for (int i=0; i < nb_elem; i++) {
|
||||||
|
for (int j=0; j < width; j++) {
|
||||||
|
free(images[i][j]);
|
||||||
|
}
|
||||||
|
free(images[i]);
|
||||||
|
}
|
||||||
|
free(images);
|
||||||
|
} else {
|
||||||
|
imgRawImage* image = loadJpegImageFile(jpeg_file);
|
||||||
|
|
||||||
|
write_image_in_network_260(image->lpData, image->height, image->width, network->input[0]);
|
||||||
|
|
||||||
|
// Free allocated memory from image reading
|
||||||
|
free(image->lpData);
|
||||||
|
free(image);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Forward propagation
|
|
||||||
write_image_in_network_32(images[numero], height, width, network->input[0][0], false);
|
|
||||||
forward_propagation(network);
|
forward_propagation(network);
|
||||||
|
|
||||||
for (int i=0; i < network->size-1; i++) {
|
// Écriture des résultats
|
||||||
if (i == 0) {
|
for (int i=0; i < network->depth[0]; i++) {
|
||||||
write_image(network->input[0][0], width, out_base, 0, 0);
|
write_image(network->input[0][i], network->width[0], network->width[0], out_base, 0, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i=1; i < network->size; i++) {
|
||||||
|
if (!(!network->kernel[i-1]->nn)) {
|
||||||
|
write_image(network->input[i][0], network->kernel[i-1]->nn->size_output, 1, out_base, i, 0);
|
||||||
} else {
|
} else {
|
||||||
if ((!network->kernel[i]->cnn)&&(!network->kernel[i]->nn)) {
|
for (int j=0; j < network->depth[i]; j++) {
|
||||||
for (int j=0; j < network->depth[i]; j++) {
|
write_image(network->input[i][j], network->width[i], network->width[i], out_base, i, j);
|
||||||
write_image(network->input[i][j], network->width[i], out_base, i, j);
|
|
||||||
}
|
|
||||||
} else if (!network->kernel[i]->cnn) {
|
|
||||||
// Couche de type NN, on n'affiche rien
|
|
||||||
} else {
|
|
||||||
write_image(network->input[i][0], network->width[i], out_base, i, 0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
free_network(network);
|
free_network(network);
|
||||||
for (int i=0; i < nb_elem; i++) {
|
|
||||||
for (int j=0; j < width; j++) {
|
|
||||||
free(images[i][j]);
|
|
||||||
}
|
|
||||||
free(images[i]);
|
|
||||||
}
|
|
||||||
free(images);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -192,16 +201,28 @@ int main(int argc, char* argv[]) {
|
|||||||
}
|
}
|
||||||
if (! strcmp(argv[1], "visual-propagation")) {
|
if (! strcmp(argv[1], "visual-propagation")) {
|
||||||
char* modele = NULL; // Fichier contenant le modèle
|
char* modele = NULL; // Fichier contenant le modèle
|
||||||
char* images = NULL; // Dossier contenant les images
|
char* images = NULL; // Dossier contenant les images (mnist)
|
||||||
char* out_base = NULL; // Préfixe du nom de fichier de sortie
|
char* out_base = NULL; // Préfixe du nom de fichier de sortie
|
||||||
int numero = -1; // Numéro de l'image dans le dataset
|
char* jpeg_image = NULL; // Image à regarder (jpeg)
|
||||||
|
int numero = -1; // Numéro de l'image dans le dataset (mnist)
|
||||||
int i = 2;
|
int i = 2;
|
||||||
while (i < argc) {
|
while (i < argc) {
|
||||||
if ((! strcmp(argv[i], "--modele"))||(! strcmp(argv[i], "-m"))) {
|
if ((! strcmp(argv[i], "--modele"))||(! strcmp(argv[i], "-m"))) {
|
||||||
modele = argv[i+1];
|
modele = argv[i+1];
|
||||||
i += 2;
|
i += 2;
|
||||||
} else if ((! strcmp(argv[i], "--images"))||(! strcmp(argv[i], "-i"))) {
|
} else if ((! strcmp(argv[i], "--images"))||(! strcmp(argv[i], "-i"))) {
|
||||||
images = argv[i+1];
|
if (images) {
|
||||||
|
printf_warning("Arguments conflictuels. L'image de type jpeg sera favorisée.\n");
|
||||||
|
} else {
|
||||||
|
images = argv[i+1];
|
||||||
|
}
|
||||||
|
i += 2;
|
||||||
|
} else if ((! strcmp(argv[i], "--jpeg-image"))||(! strcmp(argv[i], "-j"))) {
|
||||||
|
if (images) {
|
||||||
|
printf_warning("Arguments conflictuels. L'image de type MNIST sera favorisée.\n");
|
||||||
|
} else {
|
||||||
|
jpeg_image = argv[i+1];
|
||||||
|
}
|
||||||
i += 2;
|
i += 2;
|
||||||
} else if ((! strcmp(argv[i], "--out"))||(! strcmp(argv[i], "-o"))) {
|
} else if ((! strcmp(argv[i], "--out"))||(! strcmp(argv[i], "-o"))) {
|
||||||
out_base = argv[i+1];
|
out_base = argv[i+1];
|
||||||
@ -219,7 +240,7 @@ int main(int argc, char* argv[]) {
|
|||||||
printf_error("Pas de modèle à utiliser spécifié.\n");
|
printf_error("Pas de modèle à utiliser spécifié.\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (!images) {
|
if (!images && !jpeg_image) {
|
||||||
printf_error("Pas de fichier d'images spécifié.\n");
|
printf_error("Pas de fichier d'images spécifié.\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -227,11 +248,15 @@ int main(int argc, char* argv[]) {
|
|||||||
printf_error("Pas de fichier de sortie spécifié.\n");
|
printf_error("Pas de fichier de sortie spécifié.\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (numero == -1) {
|
if (images) {
|
||||||
printf_error("Pas de numéro d'image spécifié.\n");
|
if (numero == -1) {
|
||||||
return 1;
|
printf_error("Pas de numéro d'image spécifié.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
visual_propagation(modele, images, out_base, numero, NULL);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
visual_propagation(modele, images, out_base, numero);
|
visual_propagation(modele, NULL, out_base, 0, jpeg_image);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
printf_error("Option choisie non reconnue: ");
|
printf_error("Option choisie non reconnue: ");
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "../include/memory_management.h"
|
#include "../common/include/memory_management.h"
|
||||||
|
|
||||||
#include "include/free.h"
|
#include "include/free.h"
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <float.h>
|
#include <float.h>
|
||||||
|
|
||||||
#include "../include/colors.h"
|
#include "../common/include/colors.h"
|
||||||
#include "../include/utils.h"
|
#include "../common/include/utils.h"
|
||||||
|
|
||||||
#include "include/config.h"
|
#include "include/config.h"
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <float.h>
|
#include <float.h>
|
||||||
|
|
||||||
#include "../include/colors.h"
|
#include "../common/include/colors.h"
|
||||||
#include "../include/utils.h"
|
#include "../common/include/utils.h"
|
||||||
|
|
||||||
#include "include/config.h"
|
#include "include/config.h"
|
||||||
|
|
||||||
|
@ -4,16 +4,6 @@
|
|||||||
#ifndef DEF_BACKPROPAGATION_H
|
#ifndef DEF_BACKPROPAGATION_H
|
||||||
#define DEF_BACKPROPAGATION_H
|
#define DEF_BACKPROPAGATION_H
|
||||||
|
|
||||||
/*
|
|
||||||
* Renvoie la valeur minimale entre a et b
|
|
||||||
*/
|
|
||||||
int min(int a, int b);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Renvoie la valeur maximale entre a et b
|
|
||||||
*/
|
|
||||||
int max(int a, int b);
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __CUDACC__
|
#ifdef __CUDACC__
|
||||||
extern "C"
|
extern "C"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#include "../include/colors.h"
|
#include "../common/include/colors.h"
|
||||||
#include "include/initialisation.h"
|
#include "include/initialisation.h"
|
||||||
|
|
||||||
// glorot (wavier initialisation) linear, tanh, softmax, logistic (1/(fan_in+fan_out/2))
|
// glorot (wavier initialisation) linear, tanh, softmax, logistic (1/(fan_in+fan_out/2))
|
||||||
|
@ -5,9 +5,10 @@
|
|||||||
#include <jerror.h>
|
#include <jerror.h>
|
||||||
#include <jpeglib.h>
|
#include <jpeglib.h>
|
||||||
|
|
||||||
|
#include "../common/include/utils.h"
|
||||||
|
#include "../common/include/colors.h"
|
||||||
|
|
||||||
#include "include/jpeg.h"
|
#include "include/jpeg.h"
|
||||||
#include "../include/utils.h"
|
|
||||||
#include "../include/colors.h"
|
|
||||||
|
|
||||||
// How to load a JPEG using libjpeg: https://www.tspi.at/2020/03/20/libjpegexample.html
|
// How to load a JPEG using libjpeg: https://www.tspi.at/2020/03/20/libjpegexample.html
|
||||||
imgRawImage* loadJpegImageFile(char* lpFilename) {
|
imgRawImage* loadJpegImageFile(char* lpFilename) {
|
||||||
|
@ -5,9 +5,10 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <float.h>
|
#include <float.h>
|
||||||
|
|
||||||
|
|
||||||
|
#include "../common/include/colors.h"
|
||||||
#include "include/initialisation.h"
|
#include "include/initialisation.h"
|
||||||
#include "include/test_network.h"
|
#include "include/test_network.h"
|
||||||
#include "../include/colors.h"
|
|
||||||
#include "include/function.h"
|
#include "include/function.h"
|
||||||
#include "include/creation.h"
|
#include "include/creation.h"
|
||||||
#include "include/train.h"
|
#include "include/train.h"
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
#include <float.h>
|
#include <float.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
#include "../common/include/colors.h"
|
||||||
|
#include "../common/include/utils.h"
|
||||||
#include "include/convolution.h"
|
#include "include/convolution.h"
|
||||||
#include "../include/colors.h"
|
|
||||||
#include "../include/utils.h"
|
|
||||||
|
|
||||||
#include "include/make.h"
|
#include "include/make.h"
|
||||||
|
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
#include <float.h>
|
#include <float.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
#include "../common/include/colors.h"
|
||||||
|
#include "../common/include/utils.h"
|
||||||
#include "include/convolution.h"
|
#include "include/convolution.h"
|
||||||
#include "../include/colors.h"
|
|
||||||
#include "../include/utils.h"
|
|
||||||
|
|
||||||
#include "include/make.h"
|
#include "include/make.h"
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#include "../include/colors.h"
|
#include "../common/include/colors.h"
|
||||||
#include "../include/utils.h"
|
#include "../common/include/utils.h"
|
||||||
|
|
||||||
#define BLOCKSIZE_x 16
|
#define BLOCKSIZE_x 16
|
||||||
#define BLOCKSIZE_y 16
|
#define BLOCKSIZE_y 16
|
||||||
|
@ -3,8 +3,8 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
#include "../include/memory_management.h"
|
#include "../common/include/memory_management.h"
|
||||||
#include "../include/colors.h"
|
#include "../common/include/colors.h"
|
||||||
#include "include/function.h"
|
#include "include/function.h"
|
||||||
#include "include/struct.h"
|
#include "include/struct.h"
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
#include "../include/utils.h"
|
#include "../common/include/utils.h"
|
||||||
|
|
||||||
#include "include/jpeg.h"
|
#include "include/jpeg.h"
|
||||||
|
|
||||||
|
@ -3,8 +3,8 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "../include/memory_management.h"
|
#include "../common/include/memory_management.h"
|
||||||
#include "../include/mnist.h"
|
#include "../common/include/mnist.h"
|
||||||
#include "include/neuron_io.h"
|
#include "include/neuron_io.h"
|
||||||
#include "include/struct.h"
|
#include "include/struct.h"
|
||||||
#include "include/jpeg.h"
|
#include "include/jpeg.h"
|
||||||
|
@ -7,13 +7,13 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <omp.h>
|
#include <omp.h>
|
||||||
|
|
||||||
#include "../include/memory_management.h"
|
#include "../common/include/memory_management.h"
|
||||||
#include "../include/mnist.h"
|
#include "../common/include/mnist.h"
|
||||||
#include "include/initialisation.h"
|
#include "include/initialisation.h"
|
||||||
#include "include/test_network.h"
|
#include "include/test_network.h"
|
||||||
#include "include/neuron_io.h"
|
#include "include/neuron_io.h"
|
||||||
#include "../include/colors.h"
|
#include "../common/include/colors.h"
|
||||||
#include "../include/utils.h"
|
#include "../common/include/utils.h"
|
||||||
#include "include/function.h"
|
#include "include/function.h"
|
||||||
#include "include/creation.h"
|
#include "include/creation.h"
|
||||||
#include "include/update.h"
|
#include "include/update.h"
|
||||||
|
@ -4,8 +4,8 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#include "../include/memory_management.h"
|
#include "../common/include/memory_management.h"
|
||||||
#include "../include/colors.h"
|
#include "../common/include/colors.h"
|
||||||
#include "include/struct.h"
|
#include "include/struct.h"
|
||||||
|
|
||||||
#define copyVar(var) network_cp->var = network->var
|
#define copyVar(var) network_cp->var = network->var
|
||||||
|
@ -25,6 +25,20 @@ inline void gpuAssert(cudaError_t code, const char *file, int line, bool abort=t
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __CUDACC__
|
||||||
|
/*
|
||||||
|
* Renvoie la valeur minimale entre a et b
|
||||||
|
*/
|
||||||
|
int min(int a, int b);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Renvoie la valeur maximale entre a et b
|
||||||
|
*/
|
||||||
|
int max(int a, int b);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Partie entière supérieure de a/b
|
* Partie entière supérieure de a/b
|
||||||
*/
|
*/
|
@ -16,6 +16,17 @@
|
|||||||
#define BLOCKSIZE_z 8
|
#define BLOCKSIZE_z 8
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __CUDACC__
|
||||||
|
int min(int a, int b) {
|
||||||
|
return a<b?a:b;
|
||||||
|
}
|
||||||
|
|
||||||
|
int max(int a, int b) {
|
||||||
|
return a > b ? a : b;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
int i_div_up(int a, int b) { // Partie entière supérieure de a/b
|
int i_div_up(int a, int b) { // Partie entière supérieure de a/b
|
||||||
return ((a % b) != 0) ? (a / b + 1) : (a / b);
|
return ((a % b) != 0) ? (a / b + 1) : (a / b);
|
||||||
}
|
}
|
@ -16,6 +16,17 @@
|
|||||||
#define BLOCKSIZE_z 8
|
#define BLOCKSIZE_z 8
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __CUDACC__
|
||||||
|
int min(int a, int b) {
|
||||||
|
return a<b?a:b;
|
||||||
|
}
|
||||||
|
|
||||||
|
int max(int a, int b) {
|
||||||
|
return a > b ? a : b;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
int i_div_up(int a, int b) { // Partie entière supérieure de a/b
|
int i_div_up(int a, int b) { // Partie entière supérieure de a/b
|
||||||
return ((a % b) != 0) ? (a / b + 1) : (a / b);
|
return ((a % b) != 0) ? (a / b + 1) : (a / b);
|
||||||
}
|
}
|
@ -6,11 +6,12 @@
|
|||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <sys/sysinfo.h>
|
#include <sys/sysinfo.h>
|
||||||
|
|
||||||
#include "include/main.h"
|
|
||||||
#include "../include/mnist.h"
|
|
||||||
#include "../include/colors.h"
|
|
||||||
#include "include/neuron_io.h"
|
|
||||||
#include "include/neural_network.h"
|
#include "include/neural_network.h"
|
||||||
|
#include "../common/include/colors.h"
|
||||||
|
#include "../common/include/mnist.h"
|
||||||
|
#include "include/neuron_io.h"
|
||||||
|
|
||||||
|
#include "include/main.h"
|
||||||
|
|
||||||
#define EPOCHS 10
|
#define EPOCHS 10
|
||||||
#define BATCHES 100
|
#define BATCHES 100
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
#include "../include/mnist.h"
|
#include "../common/include/mnist.h"
|
||||||
|
|
||||||
|
|
||||||
void print_image(unsigned int width, unsigned int height, int** image) {
|
void print_image(unsigned int width, unsigned int height, int** image) {
|
||||||
|
@ -3,9 +3,9 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <float.h>
|
#include <float.h>
|
||||||
|
|
||||||
|
#include "../common/include/mnist.h"
|
||||||
#include "include/neural_network.h"
|
#include "include/neural_network.h"
|
||||||
#include "include/neuron_io.h"
|
#include "include/neuron_io.h"
|
||||||
#include "../include/mnist.h"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Contient un ensemble de fonctions utiles pour le débogage
|
Contient un ensemble de fonctions utiles pour le débogage
|
||||||
|
@ -6,11 +6,11 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <omp.h>
|
#include <omp.h>
|
||||||
|
|
||||||
#include "../src/include/memory_management.h"
|
#include "../src/common/include/memory_management.h"
|
||||||
#include "../src/cnn/include/convolution.h"
|
#include "../src/cnn/include/convolution.h"
|
||||||
|
#include "../src/common/include/colors.h"
|
||||||
|
#include "../src/common/include/utils.h"
|
||||||
#include "../src/cnn/include/struct.h"
|
#include "../src/cnn/include/struct.h"
|
||||||
#include "../src/include/colors.h"
|
|
||||||
#include "../src/include/utils.h"
|
|
||||||
|
|
||||||
|
|
||||||
float random_float(float low, float high) {
|
float random_float(float low, float high) {
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "../src/include/memory_management.h"
|
#include "../src/common/include/memory_management.h"
|
||||||
|
#include "../src/common/include/colors.h"
|
||||||
|
#include "../src/common/include/utils.h"
|
||||||
#include "../src/cnn/include/function.h"
|
#include "../src/cnn/include/function.h"
|
||||||
#include "../src/include/colors.h"
|
|
||||||
#include "../src/include/utils.h"
|
|
||||||
|
|
||||||
#include "../src/cnn/include/config.h"
|
#include "../src/cnn/include/config.h"
|
||||||
|
|
||||||
|
@ -1,13 +1,16 @@
|
|||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <omp.h>
|
||||||
|
|
||||||
|
|
||||||
|
#include "../src/common/include/colors.h"
|
||||||
|
#include "../src/common/include/utils.h"
|
||||||
#include "../src/cnn/include/jpeg.h"
|
#include "../src/cnn/include/jpeg.h"
|
||||||
#include "../src/include/colors.h"
|
|
||||||
|
|
||||||
int main(int argc, char* argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
if (argc != 2) {
|
if (argc != 2) {
|
||||||
printf("Pas de dataset en argument, test avorté\n");
|
printf("Pas de dataset en argument, test avorté\n");
|
||||||
// On n'arrête pas le processus avce un code de sortie
|
// On arrête le processus avec un code de sortie 0
|
||||||
// pour pouvoir utiliser `make run-tests` dans des scripts
|
// pour pouvoir utiliser `make run-tests` dans des scripts
|
||||||
// sans avoir à spécifier d'arguments supplémentaires
|
// sans avoir à spécifier d'arguments supplémentaires
|
||||||
return 0;
|
return 0;
|
||||||
@ -22,6 +25,22 @@ int main(int argc, char* argv[]) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Calcul du temps de chargement des images une à une
|
||||||
|
double start_time, end_time;
|
||||||
|
|
||||||
|
int N = min(100000, dataset->numImages);
|
||||||
|
start_time = omp_get_wtime();
|
||||||
|
printf("Chargement de %d images\n", N);
|
||||||
|
for (int i=0; i < N; i++) {
|
||||||
|
imgRawImage* image = loadJpegImageFile(dataset->fileNames[i]);
|
||||||
|
free(image->lpData);
|
||||||
|
free(image);
|
||||||
|
}
|
||||||
|
printf("OK\n");
|
||||||
|
end_time = omp_get_wtime();
|
||||||
|
printf("Temps par image (calculé sur une moyenne de %d): %lf s\n", N, (end_time - start_time)/N);
|
||||||
|
|
||||||
for (int i=0; i < (int)dataset->numImages; i++) {
|
for (int i=0; i < (int)dataset->numImages; i++) {
|
||||||
if (!dataset->fileNames[i]) {
|
if (!dataset->fileNames[i]) {
|
||||||
printf_error("Nom de fichier non chargé à l'index ");
|
printf_error("Nom de fichier non chargé à l'index ");
|
||||||
|
@ -6,9 +6,9 @@
|
|||||||
#include <omp.h>
|
#include <omp.h>
|
||||||
|
|
||||||
#include "../src/cnn/include/matrix_multiplication.h"
|
#include "../src/cnn/include/matrix_multiplication.h"
|
||||||
#include "../src/include/memory_management.h"
|
#include "../src/common/include/memory_management.h"
|
||||||
#include "../src/include/colors.h"
|
#include "../src/common/include/colors.h"
|
||||||
#include "../src/include/utils.h"
|
#include "../src/common/include/utils.h"
|
||||||
|
|
||||||
|
|
||||||
float random_float(float low, float high) {
|
float random_float(float low, float high) {
|
||||||
|
@ -3,12 +3,11 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
#include "../src/include/colors.h"
|
#include "../src/common/include/colors.h"
|
||||||
#include "../src/cnn/include/neuron_io.h"
|
#include "../src/cnn/include/neuron_io.h"
|
||||||
#include "../src/cnn/include/creation.h"
|
#include "../src/cnn/include/creation.h"
|
||||||
#include "../src/cnn/include/utils.h"
|
#include "../src/cnn/include/utils.h"
|
||||||
#include "../src/cnn/include/free.h"
|
#include "../src/cnn/include/free.h"
|
||||||
#include "../src/include/colors.h"
|
|
||||||
|
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
@ -3,11 +3,10 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
#include "../src/include/colors.h"
|
#include "../src/common/include/colors.h"
|
||||||
#include "../src/cnn/include/creation.h"
|
#include "../src/cnn/include/creation.h"
|
||||||
#include "../src/cnn/include/utils.h"
|
#include "../src/cnn/include/utils.h"
|
||||||
#include "../src/cnn/include/free.h"
|
#include "../src/cnn/include/free.h"
|
||||||
#include "../src/include/colors.h"
|
|
||||||
|
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "../src/include/colors.h"
|
#include "../src/common/include/colors.h"
|
||||||
#include "../src/cnn/include/creation.h"
|
#include "../src/cnn/include/creation.h"
|
||||||
#include "../src/cnn/include/utils.h"
|
#include "../src/cnn/include/utils.h"
|
||||||
#include "../src/cnn/include/free.h"
|
#include "../src/cnn/include/free.h"
|
||||||
#include "../src/include/colors.h"
|
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
printf("Création du réseau\n");
|
printf("Création du réseau\n");
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
#include "../src/include/mnist.h"
|
#include "../src/common/include/colors.h"
|
||||||
#include "../src/include/colors.h"
|
#include "../src/common/include/mnist.h"
|
||||||
|
|
||||||
|
|
||||||
void read_test(int nb_images, int width, int height, int*** images, unsigned int* labels) {
|
void read_test(int nb_images, int width, int height, int*** images, unsigned int* labels) {
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
#include "../src/dense/include/neural_network.h"
|
#include "../src/dense/include/neural_network.h"
|
||||||
#include "../src/dense/include/neuron_io.h"
|
#include "../src/dense/include/neuron_io.h"
|
||||||
#include "../src/include/colors.h"
|
#include "../src/common/include/colors.h"
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
printf("Création du réseau\n");
|
printf("Création du réseau\n");
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
#include "../src/dense/include/neuron_io.h"
|
|
||||||
#include "../src/dense/include/neural_network.h"
|
#include "../src/dense/include/neural_network.h"
|
||||||
#include "../src/include/colors.h"
|
#include "../src/dense/include/neuron_io.h"
|
||||||
|
#include "../src/common/include/colors.h"
|
||||||
|
|
||||||
|
|
||||||
Neuron* creer_neuron(int nb_sortants) {
|
Neuron* creer_neuron(int nb_sortants) {
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#include "../src/include/memory_management.h"
|
#include "../src/common/include/memory_management.h"
|
||||||
#include "../src/include/colors.h"
|
#include "../src/common/include/colors.h"
|
||||||
|
|
||||||
#define N 350
|
#define N 350
|
||||||
|
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#include "../src/include/memory_management.h"
|
#include "../src/common/include/memory_management.h"
|
||||||
#include "../src/include/colors.h"
|
#include "../src/common/include/colors.h"
|
||||||
#include "../src/include/utils.h"
|
#include "../src/common/include/utils.h"
|
||||||
|
|
||||||
#define N 350
|
#define N 350
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user