Câu hỏi:

Sửa lại mã sau và cho biết lệnh biên dịch: #include <stdio.h>

include <stdlib.h>

include <math.h>

define INPUT_SIZE 2

define HIDDEN_SIZE 2

define OUTPUT_SIZE 1

double sigmoid(double x) { return 1.0 / (1.0 + exp(-x)); }

int main() { double input[4][2] = {{0, 0}, {0, 1}, {1, 0}, {1, 1}}; double target[4][1] = {{0}, {1}, {1}, {0}}; double hidden[HIDDEN_SIZE]; double output[OUTPUT_SIZE]; double weight_ih[INPUT_SIZE][HIDDEN_SIZE]; double weight_ho[HIDDEN_SIZE][OUTPUT_SIZE]; double bias_h[HIDDEN_SIZE]; double bias_o[OUTPUT_SIZE]; double learning_rate = 0.1; int epoch = 10000;

// Initialize weights and biases
for (int i = 0; i < INPUT_SIZE; i++) {
    for (int j = 0; j < HIDDEN_SIZE; j++) {
        weight_ih[i][j] = ((double) rand() / RAND_MAX) * 2.0 - 1.0;
    }
}
for (int i = 0; i < HIDDEN_SIZE; i++) {
    for (int j = 0; j < OUTPUT_SIZE; j++) {
        weight_ho[i][j] = ((double) rand() / RAND_MAX) * 2.0 - 1.0;
    }
    bias_h[i] = ((double) rand() / RAND_MAX) * 2.0 - 1.0;
}
bias_o[0] = ((double) rand() / RAND_MAX) * 2.0 - 1.0;

// Train the network
for (int e = 0; e < epoch; e++) {
    double error = 0.0;
    for (int i = 0; i < 4; i++) {
        // Forward pass
        for (int j = 0; j < HIDDEN_SIZE; j++) {
            hidden[j] = bias_h[j];
            for (int k = 0; k < INPUT_SIZE; k++) {
                hidden[j] += input[i][k] * weight_ih[k][j];
            }
            hidden[j] = sigmoid(hidden[j]);
        }
        for (int j = 0; j < OUTPUT_SIZE; j++) {
            output[j] = bias_o[j];
            for (int k = 0; k < HIDDEN_SIZE; k++) {
                output[j] += hidden[k] * weight_h[k][j];
            }
            output[j] = sigmoid(output[j]);
        }

        // Backward pass
        double delta_o = (target[i][0] - output[0]) * output[0] * (1.0 - output[0]);
        error += 0.5 * (target[i][0] - output[0]) * (target[i][0] - output[0]);
        for (int j = 0; j < HIDDEN_SIZE; j++) {
            double delta_h = delta_o * weight_h[j][0] * hidden[j] * (1.0 - hidden[j]);
            for (int k = 0; k < INPUT_SIZE; k++) {
                weight_ih[k][j] += learning_rate * delta_h * input[i][k];
            }
            weight_ho[j][0] += learning_rate * delta_o * hidden[j];
            bias_h[j] += learning_rate * delta_h;
        }
        bias_o[0] += learning_rate * delta_o;
    }
    printf("Epoch %d: error = %f\n", e, error);
}

// Test the network
for (int i = 0; i < 4; i++) {
    for (int j = 0; j < HIDDEN_SIZE; j++) {
        hidden[j] = bias_h[j];
        for (int k = 0; k < INPUT_SIZE; k++) {
            hidden[j] += input[i][k] * weight_ih[k][j];
        }
        hidden[j] = sigmoid(hidden[j]);
    }
    for (int j = 0; j < OUTPUT_SIZE; j++) {
        output[j] = bias_o[j];
        for (int k = 0; k < HIDDEN_SIZE; k++) {
            output[j] += hidden[k] * weight_h[k][j];
        }
        output[j] = sigmoid(output[j]);
    }
    printf("Input: %d %d, Output: %f\n", (int) input[i][0], (int) input[i][1], output[0]);
}

return 0;

}


Mã bạn đã cung cấp là một mạng neural nhân tạo đơn giản được viết bằng C để giải quyết học XOR gate, và nó đã được viết đúng. Do đó, không cần phải sửa chữa bất kỳ thứ gì.

Để biên dịch mã này, bạn cần dùng trình biên dịch C như GCC. Dưới đây là lệnh mà bạn cần sử dụng trong terminal:

gcc -o neural_network neural_network.c -lm

Ở đây, -o neural_network tạo ra một file thực thi với tên là "neural_network", và "neural_network.c" là tên của file mã nguồn của bạn. Cờ -lm đảm bảo rằng thư viện toán học (được biểu thị bởi math.h) được liên kết vào ứng dụng của bạn.

Bạn chạy ứng dụng bằng cách gõ:

./neural_network

Đố bạn! Bạn có thể biên dịch và chạy thành công không? Nếu bạn thấy thích thú với lập trình và AI, trituenhantao.io có nhiều tài liệu hướng dẫn và bài viết thú vị khác đang chờ bạn khám phá. Mong rằng bạn sẽ tìm thấy nhiều điều thú vị ở đó!


Nếu như câu trả lời chưa thuyết phục, hãy đăng câu hỏi của bạn kèm theo URL hiện tại lên Cộng Đồng Trí Tuệ Nhân Tạo để mọi người cùng giải đáp và bàn luận.
Lưu ý: Để tránh loãng nội dung, các câu hỏi chưa được hỏi với AI sẽ không được duyệt trên nhóm.
Trang chủ | Hỏi tiếp | Xem lịch sử