-초록(abstract)

예외 발생 : Stack overflow

C6262 : 함수가 스택의 408140 바이트를 차지합니다. 일부 데이터를 힙으로 이동하는 것이 좋습니다.


코드


#define _CRT_SECURE_NO_WARNINGS


#include <stdio.h>

#include <stdlib.h>


struct Neuron {

    float x;

};


struct Layer {

    float w[100][100];

    float b[100];

    struct Neuron n[100];

    int num_neuron;

    int pre_num_neuron;

};


struct NN {

    struct Layer l+;

    int size+;

    int num_layer;

};


float random(){

    return (float)(rand()) / 32767;

}


struct Neuron getNeuron() {

    struct Neuron tmp;

    tmp.x = random() * 4 - 2;

    return tmp;

}


struct Layer getLayer(int num_neuron, int pre_num_neuron) {

    struct Layer tmp;

    if (0 < num_neuron && num_neuron < 100 && 0 < pre_num_neuron && pre_num_neuron < 100) {

        tmp.num_neuron = num_neuron;

        tmp.pre_num_neuron = pre_num_neuron;

        for (int i = 0; i < num_neuron; i++) {

            tmp.n[i] = getNeuron();

            tmp.b[i] = random() * 4 - 2;

            for (int j = 0; j < pre_num_neuron; j++) {

                tmp.w[i][j] = random() * 4 - 2;

            }

        }

    }

    return tmp;

}


struct NN getNN(int* size_arr, int len) {

    int handle = 0;

    struct NN tmp;

    tmp.num_layer = len;

    if (len > 9) {

        return;

    }

    for (int i = 1; i < len; i++) {

        if (*(size_arr + i) > 99) {

            return;

        }

        tmp.size[i] = *(size_arr + i);

        tmp.l[i-1] = getLayer(*(size_arr + i - 1), *(size_arr + i));

    }

    return tmp;

}


int printNN(struct NN nn) {

    printf("Neural Network Size : ");

    for (int i = 0; i < nn.num_layer - 1; i++) {

        printf("%d, ", nn.size[i]);

    }

    printf("%d\n", nn.size[nn.num_layer - 1]);

    for (int i = 0; i < nn.num_layer - 1; i++) {

        printf("Layer %d\nBias : ", i+1);

        for (int j = 0; j < nn.l[i].num_neuron; j++){

            printf("%f\t", nn.l[i].b[j]);

        }

        printf("\nWeight : ");

        for (int j = 0; j < nn.l[i].num_neuron; j++) {

            for (int k = 0; k < nn.l[i].pre_num_neuron; k++) {

                printf("%f\t", nn.l[i].w[j][k]);

            }

            printf("\n");

        }

    }

    return 1;

}


int main() {

    int nn_size[4] = { 5,5,5,5 };

    struct NN neuralNetwork = getNN(nn_size, 4);

    printNN(neuralNetwork);

    return 0;

}



exit 0;