人工智能实战——人工神经网络(C库iOS交叉编译)

本文介绍了一种在iOS上使用C库实现人工神经网络的方法,包括神经网络的创建、训练和执行过程。通过实例展示了如何在Objective-C中调用FANN库进行训练和预测,并给出了训练数据的保存和加载。最后,讨论了神经网络的训练效果和未来可能的扩展方向。
摘要由CSDN通过智能技术生成
人工智能实战——人工神经网络
更新:项目源码已上传至github:  https://github.com/zhanganyu/XYRobot

最近人工智能辣摸火,让我忍不住也想一探究竟,首先从目前来讲我是一个人工智能领域的门外汉,尽管恶补了几天基本知识,机器学习算法看得差不多,神马线性回归啊,逻辑回归啊,SVM啊,k临近算法啊,决策树啊,随机森林啊,看的我吐血了,不过也不难理解,然后尝试着用一套开源代码FANN(c语言跨平台库)编译到ios中 写一个简单的小机器人

首先是准备工作,把FANN2.2.0的源代码编译成ios 64bit 模拟器的dylib库,其过程不聊了,用到了cmake...等等...

拿到dylib文件后,再拷贝所有的.h到项目中,配置好头文件搜索路径,import一下“fann.h”  编译一下,成功的话 就可以开始写我的小机器人了~~起个名字:小歪
 


竟然一次性编译成功,模拟器跑起来了,不过什么代码也没写,先不激动,先写好工具类嘛。
先new一个工具类,用来初始化和保存大脑,并且还要能够训练,执行

//

//  XYRobotManager.h

//  小歪

//

//  Created by reese on 16/3/21.

//  Copyright © 2016 com.ifenduo. All rights reserved.

//


#import <Foundation/Foundation.h>

#include "fann.h"


@interface XYRobotManager : NSObject



//神经网络层数

@property (nonatomicint neuralLayerNumber;


//隐藏神经元个数 (中间层)

@property (nonatomicint hiddenNeuralNumber;


//输入原件个数

@property (nonatomicint inputNum;


//输出原件个数

@property (nonatomicint outputNum;


//预期错误均方差

@property (nonatomicfloat desiredError;


//训练数据存储路径

@property (nonatomicNSString* trainDataPath;


//神经网络保存路径

@property (nonatomicNSString* networkSavingPath;

 

//单例获取

+ (instancetype)sharedManager;


//创建大脑

- (void)createBrain;


//保存大脑

- (void)saveBrain;


//训练

- (void)trainInputDatas:(fann_type *)inputData outputDatas:(fann_type *)outputData dataCount:(int)dataCount;


//执行

- (NSArray *)runInputDatas:(fann_type *)inputData;

 

这里关于NN的配置没有写死,也就是说具体使用的时候是要能修改滴。默认情况下呢,在单例构造完之后设置一下这些配置参数的默认值:

//

//  XYRobotManager.m

//  小歪

//

//  Created by reese on 16/3/21.

//  Copyright © 2016 com.ifenduo. All rights reserved.

//


#import "XYRobotManager.h"


@implementation XYRobotManager
 

//静态c指针 神经网络对象

static struct fann *ann;


+ (instancetype)sharedManager {

    static XYRobotManager *_inst;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        _inst = [XYRobotManager new];

        

        //配置神经网络初始参数

        [_inst initConfig];

    });

    return _inst;

}


- (void)initConfig {

    //3层神经元

    _neuralLayerNumber = 3;

    

    //96个内部神经元

    _hiddenNeuralNumber = 96;

    

    //2个输入

    _inputNum = 2;

    

    //1个输出

    _outputNum = 1;

评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值