首先是准备工作,把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 (nonatomic) int neuralLayerNumber;
//隐藏神经元个数 (中间层)
@property (nonatomic) int hiddenNeuralNumber;
//输入原件个数
@property (nonatomic) int inputNum;
//输出原件个数
@property (nonatomic) int outputNum;
//预期错误均方差
@property (nonatomic) float desiredError;
//训练数据存储路径
@property (nonatomic) NSString* trainDataPath;
//神经网络保存路径
@property (nonatomic) NSString* networkSavingPath;
//单例获取
+ (instancetype)sharedManager;
//创建大脑
- (void)createBrain;
//保存大脑
- (void)saveBrain;
//训练
- (void)trainInputDatas:(fann_type *)inputData outputDatas:(fann_type *)outputData dataCount:(int)dataCount;
//执行
- (NSArray *)runInputDatas:(fann_type *)inputData;
//
// 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;