如何在 Objective-C 中在运行时创建函数

2024-01-05

现在已经很晚了,我的谷歌技能似乎让我失望了。我之前(一次又一次)发现了一些很好的回应,我想你们可以提供帮助。

我有一个神经网络,我试图在本机 Objective-C 中运行。它有效,但速度太慢。这些网络不是经常出现的。每个网络我运行大约 20,000 次(128x80 次,或大约这个数字)。问题是这些网络实际上只是归结为数学函数(每个网络都是一个 4 维函数,以 x,y,dist(x,y) 和偏差作为输入,并输出 3 个值)。

我想要做的是将每个网络(仅一次)转换为函数调用,或者在 Objective-C 中运行时的代码块。

我该怎么做呢?我可以制作一个需要执行的数学运算的大字符串,但是如何执行该字符串,或者将字符串转换为要执行的代码块?

再次,我深夜的搜索失败了,如果这个问题已经得到解答,我很抱歉。任何帮助是极大的赞赏。

-Paul

编辑:啊哈!巨大的成功!近 24 小时后,我有了工作代码,可以将最多 4 个输入的神经网络转换为单个 4 维函数。我在答案中使用了 Dave DeLong 建议的块方法。

对于任何想在未来追随我所做的事情的人,这里是我所做事情的(快速)细分(如果这是 stackoverflow 上的不正确礼仪,请原谅): 首先,我为不同的块函数创建了一些 typedef:

typedef CGFloat (^oneDFunction)(CGFloat x);
typedef CGFloat (^twoDFunction)(CGFloat x, CGFloat y);
typedef CGFloat (^threeDFunction)(CGFloat x, CGFloat y, CGFloat z);
typedef CGFloat (^fourDFunction)(CGFloat x, CGFloat y, CGFloat z, CGFloat w);

oneDFunction 采用 f(x) 的形式,twoD 是 f(x,y) 等。然后我制作了组合两个 fourDFunction 块的函数(以及 2 个 oneD、2 个twoD 等,尽管这些不是必需的)。

fourDFunction (^combineFourD) (fourDFunction f1, fourDFunction f2) =
  ^(fourDFunction f1,     fourDFunction f2){
    fourDFunction blockToCopy = ^(CGFloat x, CGFloat y, CGFloat z, CGFloat w){
        return f1(x,y,z,w) + f2(x,y,z,w);
    };
    fourDFunction act = [blockToCopy copy];
    [f1 release];
    [f2 release];
    //Need to release act at some point
    return act;            
};

当然,我需要将激活函数应用于每个节点的 fourD 函数,并且对于每个节点,我需要乘以连接它的权重:

//for applying the activation function
fourDFunction (^applyOneToFourD)( oneDFunction f1, fourDFunction f2) = 
^(oneDFunction f1, fourDFunction f2){
    fourDFunction blockToCopy = ^(CGFloat x, CGFloat y, CGFloat z, CGFloat w){
        return f1(f2(x,y,z,w));
    };    

    fourDFunction act = [blockToCopy copy];
    [f1 release];
    [f2 release];

    //Need to release act at some point
    return act; 

};

//For applying the weight to the function
fourDFunction (^weightCombineFour) (CGFloat x, fourDFunction f1) =
 ^(CGFloat weight, fourDFunction f1)
{
    fourDFunction blockToCopy = ^(CGFloat x, CGFloat y, CGFloat z, CGFloat w){

        return weight*f1(x,y,z,w);
    };

    fourDFunction act = [blockToCopy copy];
    [f1 release];
    //[act release];
    //Need to release act at some point
   return act;

};

然后,对于网络中的每个节点,我简单地将激活函数应用于源神经元的 fourD 函数乘以它们的连接权重的总和。 组成所有这些块后,我从每个输出中获取了最终的函数。因此,我的输出是输入的单独 4D 函数。

感谢您的帮助,这非常酷。


你可以这样做blocks http://developer.apple.com/library/ios/#documentation/general/conceptual/DevPedia-CocoaCore/Block.html。就像是:

//specify some parameters
int parameter1 = 42;
int parameter2 = 54;
//create your block
int (^myBlock)(int) = ^(int parameter3){
  return parameter1 * parameter2 * parameter3;
};
//copy the block off the stack
myBlock = [myBlock copy];
//stash the block somewhere so that you can pull it out later
[self saveBlockOffSomewhereElse:myBlock underName:@"myBlock"];
//balance the call to -copy
[myBlock release];

然后其他地方...

int (^retrievedBlock)(int) = [self retrieveBlockWithName:@"myBlock"];
int theAnswer = retrievedBlock(2);  //theAnswer is 4536

如果您有一个表示要评估的数学的字符串,您可以查看GCM数学解析器 http://apptree.net/parser.htm(快速但不可扩展)或我自己的DD数学解析器 http://github.com/davedelong/DDMathParser(较慢但可扩展)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Objective-C 中在运行时创建函数 的相关文章

随机推荐

  • 如何获取不在oracle select sql中的GROUP BY子句中的其他列?

    我有一个包含此数据的表 MOVIE MOVIE ID MOVIE TITLE CATEGORY SALES AMT M 0000004 The Boss Baby Animation 2000 M 0000006 Star Wars The
  • Symfony2 获取实体的验证约束

    我正在研究一种获取实体的所有验证约束的方法 我想要实现的是以 JSON 格式返回此数据并使用 JQuery 验证插件在客户端应用相同的约束 但是我在获取约束时遇到了一些麻烦 这是我当前的代码 metadata new Symfony Com
  • vba:从数组中获取唯一值

    有没有内置的功能vba questions tagged vba从一维数组中获取唯一值 只删除重复项怎么样 如果没有 那么我如何从数组中获取唯一值 这个帖子 http www vbaexpress com forum showthread
  • 如何更改 Android ViewPager 中当前选项卡荧光笔颜色?

    这是我的内部布局ViewPager 我想更改文本下方当前选项卡荧光笔的颜色 实际上它以黑色显示 但我不知道它是否是默认颜色 而且我还有一个疑问 如果我使用PagerTitleStrip该选项卡荧光笔不会出现 有没有办法把它和标题条一起带来
  • 清除应用程序默认值

    我在用 category android name android intent category HOME category android name android intent category DEFAULT 覆盖 HOME 按钮行
  • 使用c#一键选中复选框列表中的所有复选框

    我想要一个按钮 一旦单击 它将选择我的复选框中的所有复选框 我已经搜索了可能的答案 但我总是看到 asp net 和 javascript 的示例 我在 C 中使用 Windows 窗体 感谢您的任何回复 for int i 0 i lt
  • SatisfyImportsOnce 与 ComposeParts

    有人可以解释一下两者之间的区别吗SatisfyImportsOnce and ComposeParts为什么一个可以工作而另一个则不行 具体来说 我有一个正在使用 MEF 的 MVC Web 应用程序 下面是一些在我使用时有效的代码 来自该
  • 如何在多个 C# 项目中强制执行相同的 nuget 包版本?

    我有一堆小型 C 项目 它们使用几个 NuGet 包 我希望能够自动更新给定包的版本 更重要的是 如果一个项目使用与其他项目不同的版本 我希望收到警告 如何在多个 C 项目之间强制执行相同的版本依赖关系 我相信我已经找到了解决这个 以及许多
  • 在 Golang 中解组简单 xml 时出错

    我正在尝试用 Go 编写一个非常简单的解析器来处理一个大的 xml 文件 dblp xml https dblp uni trier de 其摘录如下
  • .NET 中的字符串结尾正则表达式是否经过优化?

    旁白 好吧 我知道我不应该用正则表达式来分解 HTML 但它是我需要的最简单的 我有这个正则表达式 Regex BodyEndTagRegex new Regex RegexOptions Compiled RegexOptions Ign
  • 如何从列表中随机选择一个元素,然后找到其在列表中的索引? [复制]

    这个问题在这里已经有答案了 我有一个名字列表并使用random choice 我可以从列表中获取随机元素 现在我试图找出给定元素在列表中的索引位置 这是我到目前为止所拥有的 import random x Jess Jack Mary So
  • 为什么编译器假设 malloc 返回 int ?

    我知道在 C 中最好的做法是永远不要强制转换返回值malloc 我读过编译器假设malloc 如果不包含则返回 intstdlib h 当然 如果您尝试将 int 隐式分配给不是 int 的对象 则会产生错误 但该错误可能会被显式强制转换所
  • Windows Phone 8.1 XAML 中 ListView 与 WrapGrid 的奇怪行为

    我有一个 Windows Phone 8 1 XAML 应用程序ListView nad WrapGrid作为其 ItemsPanel 以两列显示项目
  • Django:prefetch_lated() 是否遵循反向关系查找?

    我已经在 django 1 4 中从 trunk 尝试过 prefetch lated 但无法使其预取反向查找 我的简化模型 每本书都有很多价格 class Book models Model some fields class Price
  • 将 Clojure 与 Vaadin 结合使用

    有没有人尝试过使用 Clojure 使用 Compojure 和 Vaadin 来实现 Web 应用程序 我看过一篇关于使用 Clojure 和 JWT 创建 Web 应用程序的文章 Vaadin 基于 GWT 因此您可以获得 GWT 的许
  • RuntimeException:Parcel android.os.Parcel:使用 android 包时解组未知类型代码

    我收到以下错误消息 java lang RuntimeException Parcel android os Parcel 41141190 Unmarshalling unknown type code 7602286 at offset
  • 如何检测自动播放何时被阻止?

    目前 WebRTC 在 Brave 浏览器上失败 并出现 此页面自动播放被阻止 错误 这个错误不是特别明显 您可以使用启用了任何 WebRTC 的 Brave 浏览器进行测试 例如https test webrtc org https te
  • android 屏幕中间的导航选项卡

    在我的应用程序中 我希望在屏幕中间有选项卡 并且顶部有一个 gMap 是否可以将选项卡放置在屏幕中间 这是一个原始设计 source qnex me http nairdat qnex me ab tabs png 您可以将 ViewPag
  • Redshift:定义复合主键

    我有一个表 我想为其定义一个复合主键 其中包含 redshift 中的两列 我在创建表语法时遇到一些问题 这就是我想做的 Create table metrics id varchar 30 runtime timestamp catego
  • 如何在 Objective-C 中在运行时创建函数

    现在已经很晚了 我的谷歌技能似乎让我失望了 我之前 一次又一次 发现了一些很好的回应 我想你们可以提供帮助 我有一个神经网络 我试图在本机 Objective C 中运行 它有效 但速度太慢 这些网络不是经常出现的 每个网络我运行大约 20