基于预计算权重与阈值的神经网络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.
相关产品推荐
相关产品推荐

