神经网络。来自专家的问题。 - 页 21 1...141516171819202122232425 新评论 Vitaliy 2011.02.21 11:49 #201 alsu: 4) 权重的初始化参数--数值的分布形式和它们的方差。 找到了。可以设置权重的初始化参数。 看起来我使用的是默认值。 Viktor Vasilyuk 2011.02.22 15:42 #202 LeoV: 人工神经网络和遗传算法短期高级培训课程 和遗传算法" 短期高级培训课程 "人工神经网络和遗传算法 "的申请已经结束 人工神经网络和遗传算法"。 由莫斯科国立罗蒙诺索夫大学继续教育系进行 V.V.罗蒙诺索夫莫斯科国立大学在莫斯科国立大学核研究所的基础上建立的 莫斯科国立大学。课程的完成者将获得国家高级专业培训证书。 国家高级培训证书。 培训将在晚上19:00开始,每周举行两次。 2011年2月25日开始上课。 要了解更多关于课程方案,获得更多信息和 请点击这里申请该课程。 http://www.neuroproject.ru/kpk.php 对不起,这是一个广告,还是你将自己参加课程? Alexey Subbotin 2011.02.22 19:18 #203 lasso: 找到了。可以设置天平的初始化参数。 我似乎使用了默认值。 好吧,似乎很清楚这里的问题是什么。 从你的问题出发(据我所知,你有一个一维数据,你想把它分成两类),重点是在输入值的集合上找到一个点(就一个!),它能最好地执行指定的分割。假设你有一个1-7-1网络。这个网络有21个权重(隐藏层的7个输入,它的7个偏移,以及输出神经元的7个输入)。事实证明,我们正试图找到一个点,拾取21个变量。在这样一个二比一的冗余度下,网络读数发生如此大的变化并不令人惊讶--初始权重的任何微小差异都会导致训练后输出的显著分散。粗略地说,事实证明,这个任务对网络来说太简单了,但由于它不知道这个任务,所以它寻找的是不存在的东西。从技术上讲,这也许可以被称为再培训,但实质上这是对麻雀开炮。 严格来说,将一维数据分成两类的任务是由一个具有一个输入权重和一个偏置的单一神经元成功完成的。 Alexey Subbotin 2011.02.23 00:59 #204 lasso:还有一件事。我对当前网络输出范围的 "狭窄性 "感到震惊。要澄清的是。-- MLP网络是1-7-1-- 网络输出在[0;1]范围内均匀分布,训练实例中的输出由数值1和-1表示。如果在训练后,整个输入值的范围通过网络,我们会发现网络的输出位于一个非常狭窄的范围内。比如说。opt_max_act=-0.50401336 opt_min_act=-0.50973881 step=0.0000286272901034或即使如此opt_max_real=-0.99997914 opt_min_real=-0.99999908 step=0.00000010.............................这到底对不对?关于正确性,很难说...视情况而定 根据你的例子。 这种情况意味着第一个网络在所有的输入上都说 "不知道",第二个网络在相同的输入上说 "类-1"。如果数据是相同的,而区别仅仅在于权重的初始化,那么很有可能的情况是类别的强烈混合,由于这种情况,网格不能智能地理解学习模式,结果是 "随意 "行事。谈到这种情况如何发生,我假设如果网络(可能是这样)使用有偏见的神经元,那么网格就简单地将所有信息输入的权重归零,只留下偏见进行分析。当然,这种 "分析 "只是名义上的;网络是根据鸵鸟原则运作的--它根本看不到输入。为了证实或否认这一点,我们需要看到训练过的网络的 矩阵。 Vitaliy 2011.02.23 01:09 #205 下面是 "统计 "生成的MLP NS代码。 /* ------------------------------------------------------------------------- */ #include <stdio.h> #include <math.h> #include <string.h> #include <stdlib.h> #ifndef FALSE #define FALSE 0 #define TRUE 1 #endif #define MENUCODE -999 static double NNCode38Thresholds[] = { /* layer 1 */ -0.78576109762088242, -0.23216582173469763, -1.6708808507320108, -1.525614113040888, 1.4153558659332133, -0.77276960668316319, 2.3600992937381298, 2.473963708568014, -0.43422405325901231, 0.68546943611132893, 0.19836417975077064, 0.26461366779934564, -0.19131682804149783, 0.24687125804149584, -0.95588612620053504, 0.25329560565058901, -1.0054817062488075, 1.3224622867600988, 0.88115523574528376, 0.32309684489223067, 0.52538428519764313, /* layer 2 */ -1.8292886608617505 }; static double NNCode38Weights[] = { /* layer 1 */ 1.8660729426318707, 1.3727568288578245, 3.1175074758006374, 3.356836518157698, 3.2574311486418068, 3.2774957848884769, 1.4284147042568165, 3.534875314491805, 2.4874577673065557, 2.1516346524000403, 1.9692127720516106, 4.3440737376517129, 2.7850179803408932, -12.654434243399631, 2.4850018642785399, 2.1683631515554227, 1.77850226182071, 2.1342779960924272, 2.8753050022428206, 3.9464397902669828, 2.5227540467556553, /* layer 2 */ -0.041641949353302246, -0.099151657230575702, 0.19915689162090328, -0.48586373846026099, -0.091916813099494746, -0.16863091580772138, -0.11592356639654273, -0.55874391921850786, 0.12335845466035589, -0.022300206392803789, -0.083342117374385544, 1.550222748978116, 0.10305706982775611, 3.9280003726494575, 0.12771097131123971, -0.12144621860368633, -0.40427171889553365, -0.072652508364580259, 0.20641498115269669, 0.1519896468808962, 0.69632055946019444 }; static double NNCode38Acts[46]; /* ---------------------------------------------------------- */ /* NNCode38Run - run neural network NNCode38 Input and Output variables. Variable names are listed below in order, together with each variable's offset in the data set at the time code was generated (if the variable is then available). For nominal variables, the numeric code - class name conversion is shown indented below the variable name. To provide nominal inputs, use the corresponding numeric code. Input variables (Offset): stoch Выход: res 1=1 2=-1 */ /* ---------------------------------------------------------- */ void NNCode38Run( double inputs[], double outputs[], int outputType ) { int i, j, k, u; double *w = NNCode38Weights, *t = NNCode38Thresholds; /* Process inputs - apply pre-processing to each input in turn, * storing results in the neuron activations array. */ /* Input 0: standard numeric pre-processing: linear shift and scale. */ if ( inputs[0] == -9999 ) NNCode38Acts[0] = 0.48882189239332069; else NNCode38Acts[0] = inputs[0] * 1.0204081632653061 + 0; /* * Process layer 1. */ /* For each unit in turn */ for ( u=0; u < 21; ++u ) { /* * First, calculate post-synaptic potentials, storing * these in the NNCode38Acts array. */ /* Initialise hidden unit activation to zero */ NNCode38Acts[1+u] = 0.0; /* Accumulate weighted sum from inputs */ for ( i=0; i < 1; ++i ) NNCode38Acts[1+u] += *w++ * NNCode38Acts[0+i]; /* Subtract threshold */ NNCode38Acts[1+u] -= *t++; /* Now apply the logistic activation function, 1 / ( 1 + e^-x ). * Deal with overflow and underflow */ if ( NNCode38Acts[1+u] > 100.0 ) NNCode38Acts[1+u] = 1.0; else if ( NNCode38Acts[1+u] < -100.0 ) NNCode38Acts[1+u] = 0.0; else NNCode38Acts[1+u] = 1.0 / ( 1.0 + exp( - NNCode38Acts[1+u] ) ); } /* * Process layer 2. */ /* For each unit in turn */ for ( u=0; u < 1; ++u ) { /* * First, calculate post-synaptic potentials, storing * these in the NNCode38Acts array. */ /* Initialise hidden unit activation to zero */ NNCode38Acts[22+u] = 0.0; /* Accumulate weighted sum from inputs */ for ( i=0; i < 21; ++i ) NNCode38Acts[22+u] += *w++ * NNCode38Acts[1+i]; /* Subtract threshold */ NNCode38Acts[22+u] -= *t++; /* Now calculate negative exponential of PSP */ if ( NNCode38Acts[22+u] > 100.0 ) NNCode38Acts[22+u] = 0.0; else NNCode38Acts[22+u] = exp( -NNCode38Acts[22+u] ); } /* Type of output required - selected by outputType parameter */ switch ( outputType ) { /* The usual type is to generate the output variables */ case 0: /* Post-process output 0, two-state nominal output */ if ( NNCode38Acts[22] >= 0.05449452669633785 ) outputs[0] = 2.0; else outputs[0] = 1.0; break; /* type 1 is activation of output neurons */ case 1: for ( i=0; i < 1; ++i ) outputs[i] = NNCode38Acts[22+i]; break; /* type 2 is codebook vector of winning node (lowest actn) 1st hidden layer */ case 2: { int winner=0; for ( i=1; i < 21; ++i ) if ( NNCode38Acts[1+i] < NNCode38Acts[1+winner] ) winner=i; for ( i=0; i < 1; ++i ) outputs[i] = NNCode38Weights[1*winner+i]; } break; /* type 3 indicates winning node (lowest actn) in 1st hidden layer */ case 3: { int winner=0; for ( i=1; i < 21; ++i ) if ( NNCode38Acts[1+i] < NNCode38Acts[1+winner] ) winner=i; outputs[0] = winner; } break; } } Vitaliy 2011.02.23 01:17 #206 alsu: 关于正确性,很难说...视情况而定。 根据你的例子。 这种情况意味着在所有输入上的第一个网说 "不知道",在相同的输入上的第二个网说 "类-1"。如果数据是相同的,而区别仅仅在于权重的初始化,那么很有可能的情况是类别的强烈混合,由于这种情况,网格不能智能地理解学习模式,结果是 "随意 "行事。谈到这种情况如何发生,我假设如果网络(可能是这样)使用有偏见的神经元,那么网格就简单地将所有信息输入的权重归零,只留下偏见进行分析。当然,这种 "分析 "只是名义上的;网络根据鸵鸟原则运作--它根本没有看到输入。为了证实或否认这一点,我们需要看到训练过的网络的矩阵。 还有一件事:FANN确实在每一层都应用了偏移,除了传入层。 但在统计6的NN包的描述中,我没有找到类似于偏见的东西。 对于一个NS的初学者来说,所有这些偏见真的让人摸不着头脑...... Alexey Subbotin 2011.02.23 01:35 #207 是的,与我说的非常相似,只是反过来了。网络只是在数据中丢失了。注意--从网络结构来看,第一层的所有权重相对于输入数据是相等的,理论上应该在零附近均匀分布--但正如你在图片中看到的,它们被驱动起来,这导致隐藏层的神经元进入饱和状态(你有一个逻辑 激活函数)。激活阈值没有帮助,因为它们仍然保持在零左右,输出神经元也是如此,正如预期的那样,它不理解第一个神经元告诉它的任何东西--但我们已经弄清楚它发生了什么。 Vitaliy 2011.02.23 21:02 #208 太好了!!!。 以图表的形式列出了权重和阈值的数值。 还有一个完全不同的视角。谢谢你。 Alexey Burnakov 2011.02.24 13:30 #209 lasso:下面是 "统计 "生成的MLP NS代码。 下午好! 您能否简明扼要地建议,在程序员的帮助 下,学习如何用Statistica生成的神经网络从C文件中编译出一个dll文件?我的意思是让人把程序解释一遍,这样你就可以在事后按照计划自己做。只是在学校用Basic编程的水平,和NS模型与Foreh合作,但我需要定期更新网络--读一个新的dll来生成。在MQL代码中,每次纠正都有点复杂。 Vitaliy 2011.02.26 22:31 #210 alexeymosc: 下午好! 有没有可能在程序员的帮助下,学习如何从C文件中编译出一个带有Statistica生成的神经网络的dll文件? 晚安! 我想不会,唯一的例外是如果该程序员不为Statistica本身工作的话))。 alexeymosc: 在MQL代码中,每次纠正都有点复杂。 你在统计学中使用什么样的NS? 如果你手动纠正一些东西,这意味着有一个算法,所以它需要自动化....。 ............................... 上面推荐我使用GA,而就在今天,在joo 库(UGALib)的帮助下,我成功地得到了一个理想的、稳定的结果。 现在我将把这个案例拖到4... 我对安德烈(作者)表示最深切的感谢。非常有希望和灵活的方向。 ..................... 也许它值得在这个方向上进行挖掘? 1...141516171819202122232425 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
4) 权重的初始化参数--数值的分布形式和它们的方差。
找到了。可以设置权重的初始化参数。
看起来我使用的是默认值。
人工神经网络和遗传算法短期高级培训课程
和遗传算法"
短期高级培训课程 "人工神经网络和遗传算法 "的申请已经结束
人工神经网络和遗传算法"。
由莫斯科国立罗蒙诺索夫大学继续教育系进行
V.V.罗蒙诺索夫莫斯科国立大学在莫斯科国立大学核研究所的基础上建立的
莫斯科国立大学。课程的完成者将获得国家高级专业培训证书。
国家高级培训证书。
培训将在晚上19:00开始,每周举行两次。
2011年2月25日开始上课。
要了解更多关于课程方案,获得更多信息和
请点击这里申请该课程。
http://www.neuroproject.ru/kpk.php
找到了。可以设置天平的初始化参数。
我似乎使用了默认值。
好吧,似乎很清楚这里的问题是什么。
从你的问题出发(据我所知,你有一个一维数据,你想把它分成两类),重点是在输入值的集合上找到一个点(就一个!),它能最好地执行指定的分割。假设你有一个1-7-1网络。这个网络有21个权重(隐藏层的7个输入,它的7个偏移,以及输出神经元的7个输入)。事实证明,我们正试图找到一个点,拾取21个变量。在这样一个二比一的冗余度下,网络读数发生如此大的变化并不令人惊讶--初始权重的任何微小差异都会导致训练后输出的显著分散。粗略地说,事实证明,这个任务对网络来说太简单了,但由于它不知道这个任务,所以它寻找的是不存在的东西。从技术上讲,这也许可以被称为再培训,但实质上这是对麻雀开炮。
严格来说,将一维数据分成两类的任务是由一个具有一个输入权重和一个偏置的单一神经元成功完成的。
还有一件事。我对当前网络输出范围的 "狭窄性 "感到震惊。要澄清的是。
-- MLP网络是1-7-1
-- 网络输出在[0;1]范围内均匀分布,训练实例中的输出由数值1和-1表示。
如果在训练后,整个输入值的范围通过网络,我们会发现网络的输出位于一个非常狭窄的范围内。比如说。
opt_max_act=-0.50401336 opt_min_act=-0.50973881 step=0.0000286272901034
或即使如此
opt_max_real=-0.99997914 opt_min_real=-0.99999908 step=0.00000010
.............................
这到底对不对?
关于正确性,很难说...视情况而定
根据你的例子。
这种情况意味着第一个网络在所有的输入上都说 "不知道",第二个网络在相同的输入上说 "类-1"。如果数据是相同的,而区别仅仅在于权重的初始化,那么很有可能的情况是类别的强烈混合,由于这种情况,网格不能智能地理解学习模式,结果是 "随意 "行事。谈到这种情况如何发生,我假设如果网络(可能是这样)使用有偏见的神经元,那么网格就简单地将所有信息输入的权重归零,只留下偏见进行分析。当然,这种 "分析 "只是名义上的;网络是根据鸵鸟原则运作的--它根本看不到输入。为了证实或否认这一点,我们需要看到训练过的网络的 矩阵。
下面是 "统计 "生成的MLP NS代码。
关于正确性,很难说...视情况而定。
根据你的例子。
这种情况意味着在所有输入上的第一个网说 "不知道",在相同的输入上的第二个网说 "类-1"。如果数据是相同的,而区别仅仅在于权重的初始化,那么很有可能的情况是类别的强烈混合,由于这种情况,网格不能智能地理解学习模式,结果是 "随意 "行事。谈到这种情况如何发生,我假设如果网络(可能是这样)使用有偏见的神经元,那么网格就简单地将所有信息输入的权重归零,只留下偏见进行分析。当然,这种 "分析 "只是名义上的;网络根据鸵鸟原则运作--它根本没有看到输入。为了证实或否认这一点,我们需要看到训练过的网络的矩阵。
还有一件事:FANN确实在每一层都应用了偏移,除了传入层。
但在统计6的NN包的描述中,我没有找到类似于偏见的东西。
对于一个NS的初学者来说,所有这些偏见真的让人摸不着头脑......
是的,与我说的非常相似,只是反过来了。网络只是在数据中丢失了。注意--从网络结构来看,第一层的所有权重相对于输入数据是相等的,理论上应该在零附近均匀分布--但正如你在图片中看到的,它们被驱动起来,这导致隐藏层的神经元进入饱和状态(你有一个逻辑 激活函数)。激活阈值没有帮助,因为它们仍然保持在零左右,输出神经元也是如此,正如预期的那样,它不理解第一个神经元告诉它的任何东西--但我们已经弄清楚它发生了什么。
太好了!!!。
以图表的形式列出了权重和阈值的数值。
还有一个完全不同的视角。谢谢你。
下面是 "统计 "生成的MLP NS代码。
下午好!
您能否简明扼要地建议,在程序员的帮助 下,学习如何用Statistica生成的神经网络从C文件中编译出一个dll文件?我的意思是让人把程序解释一遍,这样你就可以在事后按照计划自己做。只是在学校用Basic编程的水平,和NS模型与Foreh合作,但我需要定期更新网络--读一个新的dll来生成。在MQL代码中,每次纠正都有点复杂。
下午好!
有没有可能在程序员的帮助下,学习如何从C文件中编译出一个带有Statistica生成的神经网络的dll文件?
晚安!
我想不会,唯一的例外是如果该程序员不为Statistica本身工作的话))。
在MQL代码中,每次纠正都有点复杂。
你在统计学中使用什么样的NS?
如果你手动纠正一些东西,这意味着有一个算法,所以它需要自动化....。
...............................
上面推荐我使用GA,而就在今天,在joo 库(UGALib)的帮助下,我成功地得到了一个理想的、稳定的结果。
现在我将把这个案例拖到4...
我对安德烈(作者)表示最深切的感谢。非常有希望和灵活的方向。
.....................
也许它值得在这个方向上进行挖掘?