-초록(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;
누가 자꾸 비추를 누르는거야... 말로 해 말로...