我有两个项目.第一个是Windows窗体应用程序项目,第二个是类库项目.Сlass库项目与FANN合作.Windows窗体是启动项目.
我应该让Fann.Net.dll和fanndoubleMT.dll与FANN一起使用.我下载了这些库并将它们放在一个位于解决方案根目录下的文件夹lib中.
我将Fann.Net.dll作为外部dll添加到类库项目中.我编译了这个项目.我收到一条错误,上面写着"无法加载DLL'fanndoubleMT.dll'.我通过将fanndoubleMT.dll添加到文件夹Windows_Forms_Application\bin\Debug来修复此错误.
我认为这是一个可怕的解决方案,因为我使用git,每次你需要将dll转移到新工作区的这个文件夹.
真诚的,丹尼斯.
我的神经网络有22个5184值的输入(两位数值,图像转换为字节),我试图用值设置2个输出神经元,0
或者1
像:
<input data line with 5184 values>
0 1
<input data line with 5184 values>
1 0
<input data line with 5184 values>
.
.
.
Run Code Online (Sandbox Code Playgroud)
从培训结果:
Epochs 1. Current error: 0.3750000000. Bit fail 33.
Run Code Online (Sandbox Code Playgroud)
这有点失败了?文件说:
失败位数; 表示输出神经元的数量不同于位失败限制.
如果只有2个输出神经元,我怎么能有33个输出神经元失败?我想这个33可以来自总共44个输出(22个输入中的每个输出2个).但文档并未证实这一点.
即时通讯从粉丝那里得到了如下的回应
Epochs 1. Current error: 0.2500066161. Bit fail 4.
Epochs 58. Current error: 0.0000930788. Bit fail 0.
Run Code Online (Sandbox Code Playgroud)
Bit失败意味着什么?
在FANN的Python实现中,我收到了这个错误
from pyfann import libfann
ann = libfann.neural_net()
ann.create_standard(4, 2, 8, 9, 1)
#FANN Error 11: Unable to allocate memory.
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?
在FANN中进行'不相交'分类(其中输出是互斥的,即真实概率总和为1)的正确方法是什么,因为它似乎没有softmax输出的选项?
我的理解是使用sigmoid输出,就像做"标记"一样,我不会得到正确的分类问题结果.
我已下载并编译:http://leenissen.dk/fann/wp/
用于编译的命令:
cmake -D CMAKE_INSTALL_PREFIX:PATH=/usr .
Run Code Online (Sandbox Code Playgroud)
安装:
sudo make && sudo make install
Run Code Online (Sandbox Code Playgroud)
然后我转到fann项目中的examples /目录并尝试通过运行编译示例:
make all
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
gcc -O3 xor_train.c -o xor_train -lfann -lm
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `sin'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `exp'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `cos'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `log'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `pow'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `sqrt'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `floor'
collect2: error: ld returned 1 exit status
make: *** [xor_train] Error 1
Run Code Online (Sandbox Code Playgroud)
更新:
我试图将一些代码从FANN Lib(用C语言编写的神经网络)移植到SSE2.但是SSE2的性能比普通代码差.使用我的SSE2实现运行一次运行需要5.50分钟而不需要5.20分钟.
SSE2怎么能比正常运行慢?可能是因为_mm_set_ps
?我使用Apple LLVM编译器(XCode 4)编译代码(所有SSE扩展标志都打开,优化级别为-Os
).
没有SSE2的代码
neuron_sum +=
fann_mult(weights[i], neurons[i].value) +
fann_mult(weights[i + 1], neurons[i + 1].value) +
fann_mult(weights[i + 2], neurons[i + 2].value) +
fann_mult(weights[i + 3], neurons[i + 3].value);
Run Code Online (Sandbox Code Playgroud)
SSE2代码
__m128 a_line=_mm_loadu_ps(&weights[i]);
__m128 b_line=_mm_set_ps(neurons[i+3].value,neurons[i+2].value,neurons[i+1].value,neurons[i].value);
__m128 c_line=_mm_mul_ps(a_line, b_line);
neuron_sum+=c_line[0]+c_line[1]+c_line[2]+c_line[3];
Run Code Online (Sandbox Code Playgroud) 我完全没有神经网络的经验,现在我只是在玩FANN库来学习它们.因此,目标是训练网络以近似正弦函数.为此,我使用3层NN 1输入,3个隐藏和1个输出神经元.代码是
const unsigned int num_input = 1;
const unsigned int num_output = 1;
const unsigned int num_layers = 3;
const unsigned int num_neurons_hidden = 3;
struct fann *ann;
ann = fann_create_standard(num_layers, num_input, num_neurons_hidden, num_output);
fann_set_activation_steepness_hidden(ann, 1);
fann_set_activation_steepness_output(ann, 1);
fann_set_activation_function_hidden(ann, FANN_SIGMOID_SYMMETRIC);
fann_set_activation_function_output(ann, FANN_SIGMOID_SYMMETRIC);
fann_set_train_stop_function(ann, FANN_STOPFUNC_BIT);
fann_set_bit_fail_limit(ann, 0.01f);
fann_set_training_algorithm(ann, FANN_TRAIN_RPROP);
fann_randomize_weights(ann, 0, 1);
for(int i=0; i<2; ++i) {
for(float angle=0; angle<10; angle+=0.1) {
float sin_anle = sinf(angle);
fann_train(ann, &angle, &sin_anle);
}
}
int k = 0;
for(float angle=0; angle<10; angle+=0.1) { …
Run Code Online (Sandbox Code Playgroud) 有三个项目:
在项目A打开的Visual Studio 2012中,我无法通过项目B进入项目C.
项目B和C是免费和开源的,我已经成功构建它们.
项目A引用项目B的DLL,如果找不到项目C的DLL文件,项目A将不会运行 - 所以我已经在项目中复制并粘贴了项目C的DLL,并将"始终复制"设置为输出目录.
在调试期间进入时,我只能获得项目B的源代码.我甚至没有看到模块窗口中加载的项目C,我完全不明白.如果没有包含项目C的DLL,该项目将无法运行,当它包含在内时,它将不会加载,但所有调用都在工作,因此必须在某处加载.
我试图将项目C的PDB文件包含到项目A的输出目录中,但没有运气,从项目B到项目C的函数调用仍然可以进入并且永远不会进入.
注意:
我知道必须有一种方法可以实现这一点,我有所有可用的源代码,但我不是C或C++代码的专家,也不是它的调试.我已经尝试将bin目录中的所有各种项目C文件包含到项目A中,但无法使其正常工作.
感谢您的帮助或建议!
我试图使用libfann版本2.0.1而不是最新版本2.2.0,但无法弄清楚如何这样做.有关如何做到这一点的任何想法?
通常是完美的:
gcc fann_calculator.c -o run_fann_calculator -lfann -lm
Run Code Online (Sandbox Code Playgroud)
其中fann_calculator.c包含一个调用神经网络的程序.
谢谢