Operador lógico AND en C
Redes neuronales (perceptrón)

#include <stdio.h>
struct stuff {
double vector[3];
double desired;
};
double const threshold = 0, learning_rate = 0.1;
double weights[] = {1, 0, 0};
struct stuff training_set[4];
void createTrainingSet() {
training_set[0].vector[0] = -1;
training_set[0].vector[1] = 0;
training_set[0].vector[2] = 0;
training_set[0].desired = 0;
training_set[1].vector[0] = -1;
training_set[1].vector[1] = 0;
training_set[1].vector[2] = 1;
training_set[1].desired = 0;
training_set[2].vector[0] = -1;
training_set[2].vector[1] = 1;
training_set[2].vector[2] = 0;
training_set[2].desired = 0;
training_set[3].vector[0] = -1;
training_set[3].vector[1] = 1;
training_set[3].vector[2] = 1;
training_set[3].desired = 1;
}
double sum_function(double *values) {
auto unsigned short index;
auto double sum = 0;
for(index = 0; index < 3; index++)
sum += values[index] * weights[index];
return sum;
}
int main(int argc, char *argv[]) {
auto signed short i, error_count, result, index;
auto double *input_vector, *desired_output, error;
createTrainingSet();
printf("Logic Operator Simulation... AND\n\n");
while(1) {
for(i = 0; i++ < 63;)
printf("-");
printf("\n");
error_count = 0;
for(i = 0; i < 4; i++) {
input_vector = &training_set[i].vector[0];
desired_output = &training_set[i].desired;
printf("[%1.17f, %1.17f, %1.17f]\n", weights[0], weights[1], weights[2]);
result = (sum_function(input_vector) >= threshold)?1:0;
error = *desired_output - result;
if(error != 0) {
error_count += 1;
for(index = 0; index < 3; index++)
weights[index] += learning_rate * error * input_vector[index];
}
}
if(error_count == 0)
break;
}
for(i = 0; i++ < 63;)
printf("-");
printf("\n");
return 0;
}
No hay comentarios:
Publicar un comentario