要明确我并不是说,只要序列中的最后两个数字提供下一个数字:
(2, 3, -> 5)
Run Code Online (Sandbox Code Playgroud)
但相反,给定任何索引提供斐波纳契数:
(0 -> 1) or (7 -> 21) or (11 -> 144)
Run Code Online (Sandbox Code Playgroud)
对于任何机器学习结构,添加两个数字是一项非常简单的任务,并且通过扩展计数,两个数字或任何固定数字是一个简单的加法规则.然而递归计算......
据我所知,大多数学习网络只依赖于前向评估,而大多数编程语言都有循环,跳转或循环流模式(所有这些都是某种类型的ASM跳转),从而允许递归.
当然有些网络不仅仅是前锋; 但是,使用双曲正切或sigmoid函数处理权重是否可以进入任何计算完整的状态?
即条件语句,条件跳转,强制跳转,简单循环,具有多个条件的复杂循环,提供排序顺序,元素的实际重新排序,赋值,分配额外的寄存器等等?
似乎即使是非前向唯一的网络也只能找到最佳拟合的多项式,从而减少了训练集范围内的误差,并且不再进一步.
我错过了一些明显的东西,或者大多数机器学习只是看看递归并假装那些问题不存在?
更新
从技术上讲,任何编程语言都可以被认为是遗传算法的DNA,其中编译器(以及可能的控制台测量)将是适应度函数.问题是编程(到目前为止)不能以爬山的方式表达 - 字面上,健身是0,直到健身为1.事情不是编程的一半,如果他们这样做,没有办法衡量一个程序在未知情况下的"工作"程度.即使是一个错误也可能看起来是完全不同且混乱的系统,没有输出.这正是首先学习编码非常困难的原因,学习曲线几乎是垂直的.
有些人可能会争辩说,你只需要为系统提供更强大的基础规则来利用 - 但这只会导致尝试概括所有编程问题,这些问题一直围绕着设计编程语言并且完全失去了某些学习机器的概念.沿着这条道路带您到LISP的近似变体,具有可变异的代码和几乎无意义的健身功能,这些功能可以强制"漂亮"和"简单"的代码空间,以尝试遵循人类编码最佳实践.
其他人可能会争辩说,我们根本没有使用足够的人口或动力来获得错误表面,或者朝着解决方案迈出有意义的一步.但随着你的人口接近DNA排列的数量,你实际上只是粗暴的强迫(并且非常低效).暴力强制代码排列并不是什么新鲜事,绝对不是机器学习 - 它实际上在正则表达式高尔夫中很常见,我认为甚至还有一个关于它的xkcd ......
真正的问题不是找到适用于某些特定递归函数的解决方案,而是找到一个可以以某种有用的方式包含递归域的解决方案空间.
因此,除了使用反向传播训练的神经网络,假设找到递归函数的封闭形式(如果封闭形式甚至存在,并且它们在递归有用的大多数实际情况中不存在),或者非转发网络就像伪编程语言在最好的情况下具有可怕的健身前景,加上调整退出约束以防止无限递归的几乎不可能的任务......到目前为止,机器学习和递归真的是这样吗?
recursion machine-learning neural-network genetic-algorithm evolutionary-algorithm
在给定排列唯一索引的情况下,神经网络可以模拟因子分解(或其他一些方法)来提供列表排列吗?
我列出了10件事,他们的内容是无关紧要的.我关心的是我的10件事可以放入3628800(或10!)个唯一的订单中,因为我可以用无符号整数和阶乘分解来表达我的10件事的任何列表顺序:
Order 0: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Order 1: 0, 1, 2, 3, 4, 5, 6, 7, 9, 8
Order ....
Order 3628799: 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
Run Code Online (Sandbox Code Playgroud)
这允许在我的10件事的不同列表顺序上并行分析分析.
一个常见的例子是旅行商问题:
1. I give 500 different computers each a range of unsigned integers:
0 -> 7257 for computer 0,
7257 -> 14516 for computer 1,
etc.
2. Each computer first calculates the list order from it's unsigned …
Run Code Online (Sandbox Code Playgroud) 我一直试图找到一个明确的答案,但似乎没有人明确提出这个问题.
我可以在WebGL Chrome,Firefox,Safari,IE等中使用1D采样器和1D纹理吗?
编辑
可以理解的是1确实是2的幂(2 ^ 0 = 1)意味着您可以有效地使用2D采样器和纹理,使用高度1和宽度256或512等来复制1D纹理.
1D纹理不是没有实际意义,它们的存在是因为它们不仅有目的,而且旨在转化为GPU本身的优化(而不是2D纹理).请记住,每个参数都需要时间加载到调用堆栈,几乎所有GPU编程都是优化每个可能操作的技术.
计算着色器经常需要单个浮动列表而没有额外的维度,使用1D纹理和采样器提供了强类型提供的相同清晰度.即,在1D结构中表示1D数据,并且在2D结构中表示2D数据.它还删除了索引到行/列转换所需的额外操作.
问题不在于他们是否有充分理由,而是支持他们.
在WebGL的1.0基于OpenGL ES 2.0的作为09/MAY/2014
我想要:
<canvas>
标记.<canvas>
在下一个渲染过程中使用内容(情况我渲染输出)作为纹理.我正在尝试制作计算着色器,并且需要在每个渲染过程中携带每像素值(片段).一个简单的例子是在每次渲染调用时递增像素的蓝色值.
即
pass 1: b=1
pass 2: b=2
pass 2: b=3
etc.
Run Code Online (Sandbox Code Playgroud)
这种着色器循环甚至可能吗?
有没有更好的方法在视频存储器中保持"进位"纹理以进行多通道处理(与标准着色器内多路处理不同,均匀值必须在通道之间改变)?
使用Actionscript 3.0(在Flash CS5中)
匹配任何数字的标准正则表达式是:
var myRegexPattern:Regex = /\d/g;
Run Code Online (Sandbox Code Playgroud)
正则表达式将字符串变量合并到匹配中会是什么样的?(此示例是'IDEAL'而不是'WORKING'代码段),即:
var myString:String = "MatchThisText"
var myRegexPatter_WithString:Regex = /\d[myString]/g;
Run Code Online (Sandbox Code Playgroud)
我已经看到了一些解决方法,涉及创建多个正则表达式实例,然后按来源将它们与有问题的变量结合起来,这似乎是错误的.或者使用闪存字符串来创建正则表达式创建者,但它只是简单的草率与所需的所有双重和三重转义序列.
必须有一些我在实时文档或谷歌上找不到的无痛方式.AS3甚至可以保持此功能吗?如果没有,它真的应该.
或者我错过了一个更简单的方法来简单地避免这个任务,因为我对正则表达式的新意,我也很天真?
我编写了一个多线程简单服务器,它使用:
clientStream.Read(message, 0, 4096);
Run Code Online (Sandbox Code Playgroud)
阻止,直到客户端发送消息.然后代码继续处理该消息.
到目前为止,我只是用它来发送短命令
ex. "#login[username][login]"
Run Code Online (Sandbox Code Playgroud)
但是我担心当我通过线路发送大量的表数据时,代码可能会在收到所有数据之前继续.
所以.Read阻止直到收到整个发送的消息,或者当任何数据开始接收时它是否解锁?
我是Android应用程序的新手.我编写了一个应用程序,需要在eclipse中对其进行模糊处理.我尝试使用以下教程:
http://developer.android.com/tools/help/proguard.html
但是当我创建我的项目时,eclipse没有产生任何"proguard.cfg"文件.我只有一个"project.properties"取消注释以下行.
proguard.config = $ {} sdk.dir /tools/proguard/proguard-android.txt:proguard-project.txt
我把{sdk.dir}路径改为sdk.我也没有progurd-android.txt.对于初学者如何在android中混淆代码是否有任何明确的步骤?或者你有可能为我解释一下吗?感谢帮助.
为了使用OES_texture_float扩展使用Chrome中的WebGL手动打包并将RGBA浮点组件纹理绑定到GPU ,像素组件数据必须存储在Float32Array中.
例如,对于一个简单的3像素纹理,每个有4个浮点组件,首先会声明一个普通的JS数组:
var pixels = [1.01, 1.02, 1.03, 1.04, 2.01, 2.02, 2.03, 2.04, 3.01, 3.02, 3.03];
Run Code Online (Sandbox Code Playgroud)
然后,为了将普通JS数组转换为可以提供给GPU的强类型浮点数组,我们只需使用Float32Array构造函数,它可以将一个普通的JS数组作为输入:
pixels = new Float32Array(pixels);
Run Code Online (Sandbox Code Playgroud)
现在我们将纹理表示为一个强类型的浮点数组,我们可以使用texImage2D使用已经建立的WebGL上下文(这个工作超出了本问题的范围)将其提供给GPU:
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 3, 1, 0, gl.RGBA, gl.FLOAT, pixels);
Run Code Online (Sandbox Code Playgroud)
进行适当的渲染调用显示这些浮点数被传递到GPU中(通过将输出浮点数编码为片段颜色)而没有错误(尽管由于转换而略微损失精度).
问题
从普通JS数组转换为Float32Array实际上是一个非常昂贵的操作,并且在Float32Array中操作已经转换的浮点数要快得多 - 这个操作似乎是根据大多数JS规范支持的:https:// developer. mozilla.org/en-US/docs/Web/API/Float32Array
一旦建立,您可以使用对象的方法或使用标准数组索引语法(即使用括号表示法)引用数组中的元素.
问题发生在:
使用普通的JS预设值数组创建Float32Array
我们使用[]表示法更改Float32Array中的一个或多个值,即:
pixels[0] = 420.4;
pixels[1] = 420.4;
Run Code Online (Sandbox Code Playgroud)
我们使用texImage2D将Float32Array传递给GPU,并且使用上面提到的相同方法显示,Float32Array的初始设置值以某种方式使其进入GPU而没有将两个值更改为420.4
WTF?
我最好的猜测是因为强类型数组(通常)在内部表示为缓冲区和视图,我正在更新视图,缓冲区不反映更改.将Float32Array记录到浏览器控制台显示,在这种情况下,两个更改的数字似乎确实已更改.但是因为无法通过Chrome中的控制台读取ArrayBuffer的内容,所以就我的技能而言,这是一个调试死胡同.
使用NodeJS REPL尝试相同的创建,转换,更新和检查方法(不涉及GPU),揭示缓冲区值在评估期间更新,pixels[0] = 420.4;
并且在读取缓冲区时不以"延迟"方式更新.
Chrome可能会延迟更新底层缓冲区,但将这些数据复制到GPU不会触发getter,而是将其从内存中复制.
临时解决方案
在找到并纠正基础问题(如果适用的话)之前,一旦在WebGL纹理的上下文中创建Float32Arrays,它们本质上是不可变的(无法更改).似乎还有一个.set()
附加到类型化数组的方法,但是:
pixels.set(new Float32Array([420.4]), index);
Run Code Online (Sandbox Code Playgroud)
似乎很多外部装箱/转换来绕过懒惰缓冲区,尤其是声称允许[]访问的缓冲区.
我设法找到了一个错误(可能不是错误,但麻烦重重),花了很长时间才能找到答案,并且可以使用REPL(NodeJS)复制它:
> o = {};
{}
> JSON.stringify(o)
'{}'
> o.n = 10
10
> JSON.stringify(o)
'{"n":10}'
> o.n = Infinity;
Infinity
> JSON.stringify(o)
'{"n":null}'
> null == Infinity
false
> null === Infinity
false
> typeof 10
'number'
> typeof Infinity
'number'
Run Code Online (Sandbox Code Playgroud)
当您将其Infinity
放入JSON时null
,尽管Infinity
是一种number
类型,它仍会变为。通常情况下,谁在乎,但是当-Infinity
,NaN
,0
,并且Infinity
都在你的应用程序(机器学习)的背景下特殊的意义,它能够传送特别号码为纯JSON是很重要的,而不诉诸馅和拆箱它变成每一次的字符串。
字符串填充需要对每次访问进行额外的类型检查,然后将开关案例字符串与所有特殊数字类型进行比较,然后将其重新分配为实际的特殊数字类型。一次还不错,每分钟40或50万亿次是您真正开始诅咒ECMA之神的地方。
我是否缺少某些东西,或者这仅仅是ECMA认为不是那么重要的事情之一?