HolyFuckItsAlive #13

Merged
jastornig merged 105 commits from Delta-Error-Test into main 2023-09-23 22:27:54 +02:00
5 changed files with 59 additions and 17 deletions
Showing only changes of commit 66df284ca8 - Show all commits

View file

@ -3,5 +3,5 @@ project(c_net C)
set(CMAKE_C_STANDARD 11)
add_executable(c_net main.c matrix.c)
add_executable(c_net main.c matrix.c image.c)
target_link_libraries(c_net m)

57
image.c
View file

@ -1,39 +1,76 @@
#pragma once
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include "image.h"
#include "matrix.h"
Img** import_images(char* image_file_string, char* label_file_string, int number_of_images) {
int endian_swap(int input) {
return ((input >> 24) & 0xff) | // move byte 3 to byte 0
((input << 8) & 0xff0000) | // move byte 1 to byte 2
((input >> 8) & 0xff00) | // move byte 2 to byte 1
((input << 24) & 0xff000000); // byte 0 to byte 3
}
int validate_files(FILE* image_file, FILE* label_file) {
// read magic number from files
int magic_number_label, magic_number_images;
fread(&magic_number_label, 4, 1, label_file);
fread(&magic_number_images, 4, 1, image_file);
// compare magic numbers with pre-defined value
if(endian_swap(magic_number_label) != 2049 || endian_swap(magic_number_images) != 2051) {
return 0;
}
return 1;
}
Image** import_images(char* image_file_string, char* label_file_string, int number_of_images) {
// create file pointer for the image and label data
FILE* image_file = fopen(image_file_string, 'r');
FILE* label_file = fopen(label_file_string, 'r');
FILE* image_file = fopen(image_file_string, "r");
FILE* label_file = fopen(label_file_string, "r");
// check if the file could be opened
if(image_file == NULL || label_file == NULL) {
printf("ERROR: File could not be opened! ()");
printf("ERROR: File could not be opened! (import_images)");
exit(1);
}
// check magic number of the files
if(validate_files(image_file, label_file)) {
printf("ERROR: File validation failed! (validate_files)");
exit(1);
}
void img_print (Img* img) {
// Jakob Section
// allocate memory for the storage of images
Image** images = malloc(sizeof(Image) * number_of_images);
fclose(image_file);
fclose(label_file);
}
void img_print (Image* img) {
//print the image
matrix_print(img->pixel_values);
//print the number of the image
printf("Number it is supposed to be: %d\n", img->image_label);
}
void img_free (Img* img) {
void img_free (Image* img) {
//frees the matrix of image (deep free)
matrix_free(img->pixel_values);
//frees the rest of img
free(img);
}
void images_free (Img** images, int quantity){
void images_free (Image** images, int quantity){
//frees every single image
for(int i=0;i<quantity;i++){
img_free(images[i]);

View file

@ -1,10 +1,13 @@
#pragma once
#include "matrix.h"
#include "matrix.h"
typedef struct {
Matrix* pixel_values;
int image_label;
} Image;
Img** import_images(char* image_file_string, char* label_file_string, int number_of_images);
void img_print (Img* img);
void img_free (Img* img);
Image** import_images(char* image_file_string, char* label_file_string, int number_of_images);
void img_print (Image* image);
void img_free (Image* image);

5
main.c
View file

@ -1,7 +1,10 @@
#include <stdio.h>
#include <stdio.h>
#include "matrix.h"
#include <stdio.h>
#include "image.h"
int main() {
Image** images = import_images("../data/train-images.idx3-ubyte", "../data/train-labels.idx1-ubyte", 20);
}

View file

@ -11,10 +11,9 @@ void matrix_fill(Matrix* matrix, double value);
void matrix_free(Matrix* matrix);
void matrix_print(Matrix *matrix);
Matrix* matrix_copy(Matrix *matrix);
// TODO:
void matrix_save(Matrix* matrix, char* file_string);
Matrix* matrix_load(char* file_string);
void matrix_randomize(Matrix* matrix, int n); // don't understand the usage of the n
int matrix_argmax(Matrix* matrix);
Matrix* matrix_flatten(Matrix* matrix, int axis);