- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一款使用 FANN(快速人工神经网络库)的软件。在多次尝试编写自己的 ANN 代码以编译 FANN 示例程序(这里是 C++ XOR 近似程序)的尝试失败后,我尝试过。这是来源。
#include "../include/floatfann.h"
#include "../include/fann_cpp.h"
#include <ios>
#include <iostream>
#include <iomanip>
using std::cout;
using std::cerr;
using std::endl;
using std::setw;
using std::left;
using std::right;
using std::showpos;
using std::noshowpos;
// Callback function that simply prints the information to cout
int print_callback(FANN::neural_net &net, FANN::training_data &train,
unsigned int max_epochs, unsigned int epochs_between_reports,
float desired_error, unsigned int epochs, void *user_data)
{
cout << "Epochs " << setw(8) << epochs << ". "
<< "Current Error: " << left << net.get_MSE() << right << endl;
return 0;
}
// Test function that demonstrates usage of the fann C++ wrapper
void xor_test()
{
cout << endl << "XOR test started." << endl;
const float learning_rate = 0.7f;
const unsigned int num_layers = 3;
const unsigned int num_input = 2;
const unsigned int num_hidden = 3;
const unsigned int num_output = 1;
const float desired_error = 0.001f;
const unsigned int max_iterations = 300000;
const unsigned int iterations_between_reports = 10000;
////Make array for create_standard() workaround (prevent "FANN Error 11: Unable to allocate memory.")
const unsigned int num_input_num_hidden_num_output__array[3] = {num_input, num_hidden, num_output};
cout << endl << "Creating network." << endl;
FANN::neural_net net;
// cout<<"Debug 1"<<endl;
//net.create_standard(num_layers, num_input, num_hidden, num_output);//doesn't work
net.create_standard_array(num_layers, num_input_num_hidden_num_output__array);//this might work -- create_standard() workaround
net.set_learning_rate(learning_rate);
net.set_activation_steepness_hidden(1.0);
net.set_activation_steepness_output(1.0);
//Sample Code, changed below
net.set_activation_function_hidden(FANN::SIGMOID_SYMMETRIC_STEPWISE);
net.set_activation_function_output(FANN::SIGMOID_SYMMETRIC_STEPWISE);
//changed above to sigmoid
//net.set_activation_function_hidden(FANN::SIGMOID);
//net.set_activation_function_output(FANN::SIGMOID);
// Set additional properties such as the training algorithm
//net.set_training_algorithm(FANN::TRAIN_QUICKPROP);
// Output network type and parameters
cout << endl << "Network Type : ";
switch (net.get_network_type())
{
case FANN::LAYER://only connected to next layer
cout << "LAYER" << endl;
break;
case FANN::SHORTCUT://connected to all other layers
cout << "SHORTCUT" << endl;
break;
default:
cout << "UNKNOWN" << endl;
break;
}
net.print_parameters();
cout << endl << "Training network." << endl;
FANN::training_data data;
if (data.read_train_from_file("xor.data"))
{
// Initialize and train the network with the data
net.init_weights(data);
cout << "Max Epochs " << setw(8) << max_iterations << ". "
<< "Desired Error: " << left << desired_error << right << endl;
net.set_callback(print_callback, NULL);
net.train_on_data(data, max_iterations,
iterations_between_reports, desired_error);
cout << endl << "Testing network. (not really)" << endl;
//I don't really get this code --- the funny for loop. Whatever. I'll skip it.
for (unsigned int i = 0; i < data.length_train_data(); ++i)
{
// Run the network on the test data
fann_type *calc_out = net.run(data.get_input()[i]);
cout << "XOR test (" << showpos << data.get_input()[i][0] << ", "
<< data.get_input()[i][1] << ") -> " << *calc_out
<< ", should be " << data.get_output()[i][0] << ", "
<< "difference = " << noshowpos
<< fann_abs(*calc_out - data.get_output()[i][0]) << endl;
}
cout << endl << "Saving network." << endl;
// Save the network in floating point and fixed point
net.save("xor_float.net");
unsigned int decimal_point = net.save_to_fixed("xor_fixed.net");
data.save_train_to_fixed("xor_fixed.data", decimal_point);
cout << endl << "XOR test completed." << endl;
}
}
/* Startup function. Synchronizes C and C++ output, calls the test function
and reports any exceptions */
int main(int argc, char **argv)
{
try
{
std::ios::sync_with_stdio(); // Synchronize cout and printf output
xor_test();
}
catch (...)
{
cerr << endl << "Abnormal exception." << endl;
}
return 0;
}
这是我的输出。
XOR test started.
Creating network.
Network Type : LAYER
Input layer : 2 neurons, 1 bias
Hidden layer : 3 neurons, 1 bias
Output layer : 1 neurons
Total neurons and biases : 8
Total connections : 13
Connection rate : 1.000
Network type : FANN_NETTYPE_LAYER
Training algorithm : FANN_TRAIN_RPROP
Training error function : FANN_ERRORFUNC_TANH
Training stop function : FANN_STOPFUNC_MSE
Bit fail limit : 0.350
Learning rate : 0.700
Learning momentum : 0.000
Quickprop decay : -0.000100
Quickprop mu : 1.750
RPROP increase factor : 1.200
RPROP decrease factor : 0.500
RPROP delta min : 0.000
RPROP delta max : 50.000
Cascade output change fraction : 0.010000
Cascade candidate change fraction : 0.010000
Cascade output stagnation epochs : 12
Cascade candidate stagnation epochs : 12
Cascade max output epochs : 150
Cascade min output epochs : 50
Cascade max candidate epochs : 150
Cascade min candidate epochs : 50
Cascade weight multiplier : 0.400
Cascade candidate limit :1000.000
Cascade activation functions[0] : FANN_SIGMOID
Cascade activation functions[1] : FANN_SIGMOID_SYMMETRIC
Cascade activation functions[2] : FANN_GAUSSIAN
Cascade activation functions[3] : FANN_GAUSSIAN_SYMMETRIC
Cascade activation functions[4] : FANN_ELLIOT
Cascade activation functions[5] : FANN_ELLIOT_SYMMETRIC
Cascade activation functions[6] : FANN_SIN_SYMMETRIC
Cascade activation functions[7] : FANN_COS_SYMMETRIC
Cascade activation functions[8] : FANN_SIN
Cascade activation functions[9] : FANN_COS
Cascade activation steepnesses[0] : 0.250
Cascade activation steepnesses[1] : 0.500
Cascade activation steepnesses[2] : 0.750
Cascade activation steepnesses[3] : 1.000
Cascade candidate groups : 2
Cascade no. of candidates : 80
Training network.
Max Epochs 300000. Desired Error: 0.001
Epochs 1. Current Error: 0.25
Epochs 10000. Current Error: 0.25
Epochs 20000. Current Error: 0.25
Epochs 30000. Current Error: 0.25
Epochs 40000. Current Error: 0.25
Epochs 50000. Current Error: 0.25
Epochs 60000. Current Error: 0.25
Epochs 70000. Current Error: 0.25
Epochs 80000. Current Error: 0.25
Epochs 90000. Current Error: 0.25
Epochs 100000. Current Error: 0.25
Epochs 110000. Current Error: 0.25
Epochs 120000. Current Error: 0.25
Epochs 130000. Current Error: 0.25
Epochs 140000. Current Error: 0.25
Epochs 150000. Current Error: 0.25
Epochs 160000. Current Error: 0.25
Epochs 170000. Current Error: 0.25
Epochs 180000. Current Error: 0.25
Epochs 190000. Current Error: 0.25
Epochs 200000. Current Error: 0.25
Epochs 210000. Current Error: 0.25
Epochs 220000. Current Error: 0.25
Epochs 230000. Current Error: 0.25
Epochs 240000. Current Error: 0.25
Epochs 250000. Current Error: 0.25
Epochs 260000. Current Error: 0.25
Epochs 270000. Current Error: 0.25
Epochs 280000. Current Error: 0.25
Epochs 290000. Current Error: 0.25
Epochs 300000. Current Error: 0.25
Testing network. (not really)
XOR test (+0, -1.875) -> +0, should be +0, difference = -0
XOR test (+0, -1.875) -> +0, should be +0, difference = -0
XOR test (+0, +1.875) -> +0, should be +0, difference = -0
XOR test (+0, +1.875) -> +0, should be +0, difference = -0
Saving network.
XOR test completed.
训练数据(xor.data
)在这里:
4 2 1
-1 -1
-1
-1 1
1
1 -1
1
1 1
-1
如何解释 ANN 中令人毛骨悚然的学习不足?我非常确信我在某个地方配置了非常错误的东西,特别是考虑到这是示例程序。 ANN 专家,有什么建议吗?
最佳答案
应用 FANN 补丁并确保对 floatfann
、doublefann
等的所有引用都是一致的。
关于c++ - FANN XOR 训练,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20776191/
XOR 的各个部分如何命名? A xor B = C A和B叫什么 对于分部,它是: A / B = C A = 除数,B = 被除数,C = 商 对于和(和 XOR 与和一样对称)它是 A + B
我在算法方面遇到了问题。 我有一个用于 IO 的字节,可以使用称为 XorAndXor 的方法设置其中的某些位。该算法的工作原理如下: newValue = (((currentValue XOR x
我很惊讶地看到一个 BPMN 图,其中一个异或决策(“XOR-Split”)用相同的网关符号“关闭”。 我真的想知道证明这种方法合理的原因是什么。在我看来,这是多余的。 事实似乎是,XOR-Join
我在查看 XOR 链接列表的实现时多次遇到这段代码,但似乎没有一个人正确解释了这一行(或者也许我错过了一些东西) - struct node* XOR (struct node *a, struct
这应该是一个简单的问题。我是 Coq 的新手。 我想在 Coq 中定义exclusive or in Coq(据我所知,这不是预定义的)。重要的部分是允许多个命题(例如 Xor A B C D)。 我
我试图记住数学是如何计算出来的,以计算循环冗余检查中 XOR 算法的剩余部分,以验证网络消息的剩余位。 我不应该扔掉那本教科书。 这在代码中很容易完成,但是如何手工完成呢? 我知道它看起来有点像标准除
给定一个数字 N 和一个整数数组(所有整数都小于 2^15)。 (A 是数组 100000 的大小) 从数组中找到 N 和整数的最大 XOR 值。 Q是查询次数(50000)和开始,停止是数组中的范围
这更像是一个有趣的问题。我正在研究 SC61860 CPU,它是 8 位 CPU,用于 1987 年的 Sharp PC-1360 掌上电脑(也用于 PC-1401 和 1403)。它的指令集实际上并
我正在尝试在 c 中进行某种异或文件加密,并在 javascript 中进行解密(使用 this 作为基础,现在我遇到了以下问题: 例如我想在 C 中执行 73^122,结果是 57,但在 javas
我的任务是计算数组中字节的异或和: X = char1 XOR char2 XOR char3 ... charN; 我正在尝试将其并行化,改为对 __m128 进行异或运算。这应该提供加速因子 4。
我有一系列错误或 View ( Seq[Xor[Error,View]] ) 我想将其映射到第一个错误(如果有)或 View 序列的异或 ( Xor[Error, Seq[View]] ) 或者可能只
这是我想做的一个例子:假设我有 5 个类,我想表达这样的约束,即我们可以将类“B”或/和“C”的实例链接到“A”,如果是这样,我们就不能拥有其他任何东西,如果我们不这样做没有这些类的任何实例,我们只能
因此我们可以确定异或距离度量是一个真实的度量(它是对称的,满足三角不等式等) 在阅读 Kademlia 及其 k-buckets 之前,我在想每个节点都会简单地找到自己的 id 并存储其最近的 k 个
该函数用于计算一个32位整数的异或 int xor32int(int x, int y) { int res = 0; // Initialize result // Assuming
我是加密新手,我正在尝试解释以下代码。即, 是什么?什么意思? 我有一个 secret_key key 。我也有一个 unique_id。我使用下面的代码创建垫。 pad = hmac.new(sec
我正在尝试将一些 javascript 代码复制到 python 中,由于某种原因,javascript 中的 XOR 运算符 (^) 给我的值与 python 中的 XOR 运算符 (^) 不同。我
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
这个问题在这里已经有了答案: Does Typescript support mutually exclusive types? (7 个答案) 关闭 3 年前。 我怎么说我希望一个接口(inter
我有一些未知的 C++ 代码是在发布版本中编译的,因此对其进行了优化。我正在努力解决的问题是: xor al, al add esp, 8 cmp byte ptr [ebp+
我得到了以下卡诺图,但我仍然无法从每个表中计算 XOR 的表达式。 Table 1 -------
我是一名优秀的程序员,十分优秀!