我在这里处理神经网络,但忽略它是安全的,因为真正的问题必须处理objective-c中的块。这是我的问题。我找到了一种将神经网络转换为可以一次执行的大块的方法。但是,相对于激活网络而言,它的运行速度非常非常慢。这似乎有点违反直觉。
如果我给你一组嵌套函数,比如
CGFloat answer = sin(cos(gaussian(1.5*x + 2.5*y)) + (.3*d + bias))
//or in block notation
^(CGFloat x, CGFloat y, CGFloat d, CGFloat bias) {
return sin(cos(gaussian(1.5*x + 2.5*y)) + (.3*d + bias));
};
从理论上讲,多次运行该函数应该比遍历一堆连接以及设置节点活动/非活动等更容易/更快,所有这些最终都会计算出相同的函数。
但是,当我创建一个块(请参阅线程:如何在运行时创建函数)并运行此代码时,对于任何中等规模的网络来说,它都非常慢。
现在,我不太明白的是:
- 当你复制一个块时,你到底在复制什么?
- 比方说,我复制一个块两次,copy1 和 copy2。如果我在同一个线程上调用 copy1 和 copy2 ,是否调用了同一个函数?我不明白文档对块副本的确切含义:Apple Block Docs
- 现在,如果我再次制作该副本,copy1 和 copy2,但相反,我在单独的线程上调用副本,那么这些函数的行为如何?当每个线程都试图访问同一个块时,这是否会导致某种减速?