You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于预计算权重与阈值的神经网络5输入XOR参数调整方案

5输入XOR阈值逻辑网络的权重与阈值调整问题

我尝试用C++实现一个采用阶跃激活函数的阈值逻辑网络,以计算5输入XOR函数,且不进行任何训练。已有可正常运行的3输入XOR代码,但扩展到5输入后无法得到正确输出。原有的网络权重矩阵仅适用于3输入XOR,对5输入无效。

3输入XOR可运行代码

#include <iostream>  
using namespace std;  

int main() {  
    const int layer1 = 3;  
    const int layer2 = 4;  

    int weights_l1l2[layer2][layer1] = {  
        {2, -1, -1},   
        {-1, 2, -1},
        {-1, -1, 2},
        {1, 1, 1},   
    };  

    int threshold_l2[layer2] = {2, 2, 2, 3};  

    int weightsl2l3[layer2] = {1, 1, 1, 1};  

    int threshold_l3 = 1;   

    for (int i = 0; i < (1 << layer1); ++i) {   
        int x[layer1];  
        for (int j = 0; j < layer1; ++j) {  
            x[j] = (i >> (layer1 - 1 - j)) & 1;   
        }  

        for (int j = 0; j < layer1; ++j) {  
            cout << x[j];  
        }  

        int y[layer2];  
        for (int j = 0; j < layer2; ++j) {  
            int sum = 0;  
            for (int k = 0; k < layer1; ++k) {  
                sum += x[k] * weights_l1l2[j][k];  
            }  
            y[j] = sum >= threshold_l2[j] ? 1 : 0; // Activation function  
        }  

        int output = 0;  
        int sum = 0;  
        for (int j = 0; j < layer2; ++j) {  
            sum += y[j] * weightsl2l3[j];  
        }  
        output = sum >= threshold_l3 ? 1 : 0; // Activation function  

        cout << "\t" << output << endl;  
    }  

    return 0;  
}  

5输入XOR当前代码(无法正确输出)

#include <iostream>  
using namespace std;  

int main() {  
    const int layer1 = 5;  
    const int layer2 = 6; // Number of Rows in the Weight Matrix 

    int weights_l1l2[layer2][layer1] = {  
        {4, -1, -1, -1, -1},   
        {-1, 4, -1, -1, -1},
        {-1, -1, 4, -1, -1},
        {-1, -1, -1, 4, -1},
        {-1, -1, -1, -1, 4},
        {1, 1, 1, 1, 1}
    };  

    int threshold_l2[layer2] = {2, 2, 2, 2, 2, 5}; // Might need adjustment 

    int weightsl2l3[layer2] = {1, 1, 1, 1, 1, 1};  

    int threshold_l3 = 1;   

    for (int i = 0; i < (1 << layer1); ++i){   
        int x[layer1];  
        for (int j = 0; j < layer1; ++j) {  
            x[j] = (i >> (layer1 - 1 - j)) & 1;   
        }  

        for (int j = 0; j < layer1; ++j) {  
            cout << x[j];  
        }  

        int y[layer2];  
        for (int j = 0; j < layer2; ++j) {  
            int sum = 0;  
            for (int k = 0; k < layer1; ++k) {  
                sum += x[k] * weights_l1l2[j][k];  
            }  
            y[j] = sum >= threshold_l2[j] ? 1 : 0; // Activation function  
        }  

        int output = 0;  
        int sum = 0;  
        for (int j = 0; j < layer2; ++j) {  
            sum += y[j] * weightsl2l3[j];  
        }  
        output = sum >= threshold_l3 ? 1 : 0; // Activation function  

        cout << "\t" << output << endl;  
    }  

    return 0;  
}  

疑问

  • 应如何调整权重与阈值,使网络对所有5位输入输出正确的XOR结果?
  • 是否存在确定整数权重的已知方法或公式?

内容的提问来源于stack exchange,提问作者Josh C.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 19:28:09