IOS 数据库

iOS数据库选型与SQLite实战:从建表、索引到事务优化全指南 SQL是数据持久化与结构化查询的核心语言,在移动端开发中扮演着不可或缺的角色。iOS系统内置SQLite作为底层关系型数据库引擎,使其成为缓存、离线存储、数据同步及复杂多表关联查询的天然选择。SQLite通过标准SQL语法提供稳定高效的本地存储能力,而FMDB等轻量封装则让开发者能以更简洁的代码调用原生接口。理解表结构设计、索引构建、事务批量写入以及参数化查询防注入,是确保数据库性能与安全的关键。无论是多线程场景下的读写并发优化,还是通过PRAGMA user_version进行版本迁移,这些工程实践都直接 阅读详情
1、数据持久性
属性列表:数组和字典写入到文件 数据类型有限,小数据存储
对象归档:自定义数据类型可以用,小数据存储
SQLite:数据保存到数据库
CoreData:
2、数据库是按照数据结构来组织,存储和管理数据的仓库
数据库的结构
表来表示同一种类型的数据
创建表:
CREATE TABLE IF NOT EXISTS UserTable<自定义> (username TEXT primary key,password TEXT,email TEXT);
字段 :名 类型 primary key表示是唯一的
插入
INSERT OR REPLACE INTO UserTable (username,password,email)VALUES(?,?,?);
更新
UPDATE UserTable set password='123456' where username='wxh1';
查询
SELECT username,password,email FROM UserTable where username='wxh1'
删除
DELETE FROM UserTable WHERE username='wxh1'
3、数据库操作的流程
打开数据库
编译SQL语句
执行SQL语句,读取数据
语句完结
关闭数据库
4、SQLite3的函数接口
sqlite3_open()打开数据库
sqlite3_close()关闭数据库
sqlite3_exec()执行sql语句,例如创建表
sqlite3_prepare_v2()编译sql语句
sqlite3_step()执行查询sql语句
sqlite3_finalize()结束sql语句
sqlite3_bind_text()绑定参数
sqlite3_colum_text()程序字段上的数据
5、 SQL Manager 可以查看sql
//创建表
sqlite3 *sqlite = nil;
    NSString *filePath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/data.sqlite"];
int result = sqlite3_open([filePath UTF8String], &sqlite);//打开数据库
    if (result != SQLITE_OK) {
return;
    }
//创建表
    NSString *sql = @"CREATE TABLE IF NOT EXISTS User (username TEXT primary key,password TEXT,email TEXT)";
    char *error;
//执行sql语句
    result = sqlite3_exec(sqlite, [sql UTF8String], NULL, NULL, &error);
    if (result != SQLITE_OK) {
        return;
    }
sqlite3_close(sqlite);//关闭数据库


    


//插入数据
sqlite3 *sqlite = nil;
sqlite3_stmt *stmt = nil;
NSString *filePath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/data.sqlite"];
int result = sqlite3_open([filePath UTF8String], &sqlite);//不存在就创建
if (result != SQLITE_OK) {
        return;
}
//创建插入sql语句
NSString *sql = @"INSERT INTO User(username,password,email) VALUES (?,?,?)";
//编译sql语句
sqlite3_prepare_v2(sqlite, [sql UTF8String], -1, &stmt, NULL);
NSString *username = @"jack";
NSString *password = @"88888";
NSString *email = @"wxhl@qq.com";
//绑定
sqlite3_bind_text(stmt, 1, [username UTF8String], -1, NULL);
    sqlite3_bind_text(stmt, 2, [password UTF8String], -1, NULL);//句柄 索引 数据 * *
    sqlite3_bind_text(stmt, 3, [email UTF8String], -1, NULL);
    result = sqlite3_step(stmt);
//执行sql语句
    if (result == SQLITE_ERROR || result == SQLITE_MISUSE) {
        return;
    }
//结束
sqlite3_finalize(stmt);//关闭数据库句柄
sqlite3_close(sqlite);//关闭数据库
//查询
sqlite3 *sqlite = nil;
sqlite3_stmt *stmt = nil;
NSString *filePath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/data.sqlite"];
    //打开数据库
int result = sqlite3_open([filePath UTF8String], &sqlite);
if (result != SQLITE_OK) {
return;
}
//创建数据库查询语句
NSString *sql = @"SELECT username,password,email FROM USER WHERE username=?";
//编译
    result = sqlite3_prepare_v2(sqlite, [sql UTF8String], -1, &stmt, NULL);
    if (result != SQLITE_OK) {
        return;
    }
   
    NSString *username = @"jack";
    sqlite3_bind_text(stmt, 1, [username UTF8String], -1, NULL); 绑定与?有关
//执行查询数据
result = sqlite3_step(stmt);
while (result == SQLITE_ROW) {
        char *username = (char *)sqlite3_column_text(stmt, 0);//取值 这里的索引使用0开始的
        char *password = (char *)sqlite3_column_text(stmt, 1);
        char *email = (char *)sqlite3_column_text(stmt, 2);
        
        NSString *userNameString = [NSString stringWithCString:username encoding:NSUTF8StringEncoding];
        NSString *passString = [NSString stringWithCString:password encoding:NSUTF8StringEncoding];


        NSString *emailString = [NSString stringWithCString:email encoding:NSUTF8StringEncoding];
        
        NSLog(@"%@%@%@",userNameString,passString,emailString);
        
        result = sqlite3_step(stmt);// //执行查询数据
    }
sqlite3_finalize(stmt);
sqlite3_close(sqlite);  
6、FMDB的使用
a、在FMDB下载文件后,工程中必须导入如下文件,并使用 libsqlite3.dylib 依赖包
  FMDB同时兼容ARC和非ARC工程,会自动根据工程配置来调整相关的内存管理代码
b、创建数据库:
db = [FMDatabase databaseWithPath:database_path];
1、当数据库文件不存在时,fmdb会自己创建一个。
2、 如果你传入的参数是空串:@"" ,则fmdb会在临时文件目录下创建这个数据库,数据库断开连接时,数据库文件被删除。
3、如果你传入的参数是 NULL,则它会建立一个在内存中的数据库,数据库断开连接时,数据库文件被删除。
打开数据库:[db open] 返回BOOL型。
关闭数据库:[db close]
FMDB数据库操作都执行executeUpdate方法,这个方法返回BOOL型
eg:
创建表:
if ([db open]) 
{
        NSString *sqlCreateTable =  [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS '%@' ('%@' INTEGER PRIMARY KEY AUTOINCREMENT, '%@' TEXT, '%@' INTEGER, '%@' TEXT)",TABLENAME,ID,NAME,AGE,ADDRESS];
        BOOL res = [db executeUpdate:sqlCreateTable];
        if (!res) {
            NSLog(@"error when creating db table");
        } else {
            NSLog(@"success to creating db table");
        }
        [db close];
    }
添加数据:
if ([db open]) 
{
        NSString *insertSql1= [NSString stringWithFormat:
                              @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",
                              TABLENAME, NAME, AGE, ADDRESS, @"张三", @"13", @"济南"];
        BOOL res = [db executeUpdate:insertSql1];
        NSString *insertSql2 = [NSString stringWithFormat:
                                @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",
                                TABLENAME, NAME, AGE, ADDRESS, @"李四", @"12", @"济南"];
        BOOL res2 = [db executeUpdate:insertSql2];
        if (!res) {
            NSLog(@"error when insert db table");
        } else {
            NSLog(@"success to insert db table");
        }
        [db close];
    }
修改数据:
if ([db open]) 
{
        NSString *updateSql = [NSString stringWithFormat:
                              @"UPDATE '%@' SET '%@' = '%@' WHERE '%@' = '%@'",
                              TABLENAME,  AGE,  @"15" ,AGE,  @"13"];
        BOOL res = [db executeUpdate:updateSql];
        if (!res) {
            NSLog(@"error when update db table");
        } else {
            NSLog(@"success to update db table");
        }
        [db close];
    }
删除数据:
if ([db open]) {
        NSString *deleteSql = [NSString stringWithFormat:
                              @"delete from %@ where %@ = '%@'",
                              TABLENAME, NAME, @"张三"];
        BOOL res = [db executeUpdate:deleteSql];
        if (!res) {
            NSLog(@"error when delete db table");
        } else {
            NSLog(@"success to delete db table");
        }
        [db close];
    }
4、数据库查询操作:查询操作使用了executeQuery,并涉及到FMResultSet。
if ([db open]) {
        NSString * sql = [NSString stringWithFormat:
                          @"SELECT * FROM %@",TABLENAME];
        FMResultSet * rs = [db executeQuery:sql];
        while ([rs next]) {
            int Id = [rs intForColumn:ID];
            NSString * name = [rs stringForColumn:NAME];
            NSString * age = [rs stringForColumn:AGE];
            NSString * address = [rs stringForColumn:ADDRESS];
            NSLog(@"id = %d, name = %@, age = %@  address = %@", Id, name, age, address);
        }
        [db close];
}
快速取得
NSString *name = [db stringForQuery:@"SELECT NAME FROM TABLENAME WHERE Name = ?",@"张三”];
int age = [db intForQuery:@"SELECT AGE FROM TABLENAME WHERE Name = ?",@"张三”];
FMDB的FMResultSet提供了多个方法来获取不同类型的数据:
intForColumn
longForColumn
longLongIntForColumn
boolForColumn
doubleForColumn
stringForColumn
dataForColumn
dateForColumn
dataNoCopyForColumn
UTF8StringForColumnIndex
objectForColumn
5、数据库多线程操作:
如果应用中使用了多线程操作数据库,那么就需要使用FMDatabaseQueue来保证线程安全了。 
应用中不可在多个线程中共同使用一个FMDatabase对象操作数据库,这样会引起数据库数据混乱。 
为了多线程操作数据库安全,FMDB使用了FMDatabaseQueue,使用FMDatabaseQueue很简单,
首先用一个数据库文件地址来初使化FMDatabaseQueue,然后就可以将一个闭包(block)传入inDatabase方法中。 
在闭包中操作数据库,而不直接参与FMDatabase的管理
FMDatabaseQueue * queue = [FMDatabaseQueue databaseQueueWithPath:database_path];
    dispatch_queue_t q1 = dispatch_queue_create("queue1", NULL);
    dispatch_queue_t q2 = dispatch_queue_create("queue2", NULL);
    dispatch_async(q1, ^{
        for (int i = 0; i < 50; ++i) {
            [queue inDatabase:^(FMDatabase *db2) {
                NSString *insertSql1= [NSString stringWithFormat:
                                      @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES (?, ?, ?)",
                                      TABLENAME, NAME, AGE, ADDRESS];
                NSString * name = [NSString stringWithFormat:@"jack %d", i];
                NSString * age = [NSString stringWithFormat:@"%d", 10+i];
BOOL res = [db2 executeUpdate:insertSql1, name, age,@"济南"];
                if (!res) {
                    NSLog(@"error to inster data: %@", name);
                } else {
                    NSLog(@"succ to inster data: %@", name);
                }
            }];
        }
    });
    dispatch_async(q2, ^{
        for (int i = 0; i < 50; ++i) {
            [queue inDatabase:^(FMDatabase *db2) {
                NSString *insertSql2= [NSString stringWithFormat:
                                      @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES (?, ?, ?)",
                                      TABLENAME, NAME, AGE, ADDRESS];
NSString * name = [NSString stringWithFormat:@"lilei %d", i];
                NSString * age = [NSString stringWithFormat:@"%d", 10+i];
BOOL res = [db2 executeUpdate:insertSql2, name, age,@"北京"];
                if (!res) {
                    NSLog(@"error to inster data: %@", name);
                } else {
                    NSLog(@"succ to inster data: %@", name);
                }
            }];
        }
    });
















iOS开发者必学:FMDB数据库管理技术指南 FMDB是由著名iOS开发者 Felipe Rivero 创建的一个Objective-C封装库,旨在简化SQLite数据库的操作。作为轻量级、易于使用并且遵循良好编程实践的库,FMDB简化了直接使用SQLite C API的复杂性,并允许开发者以更自然的方式使用SQL语句来操作数据库。它的设计理念强调了灵活性、易用性以及良好的扩展性,尽可能地减少开发人员在使用数据库时遇到的麻烦,提高开发效率。SQLite是一个轻量级的数据库管理系统,它不需要单独的服务器进程运行,而是作为一个库文件嵌入到应用程序中。 阅读详情

相关推荐

iOS数据库操作

iOS学习笔记(十五)——数据库操作(SQLite) http://blog.youkuaiyun.com/xyz_lmn/article/details/8968203

IOS开发之——数据库-基础知识介绍(01)

一 概述 IOS中数据存储方式 SQLite数据库 使用Navicat执行表格操作 二 IOS中数据存储方式 Plist(NSArray\NSDictionary):只能存数据和字典 Preference(偏好设置\NSUserDefaults):系统自带,存到Preference目录下的一个以此应用包名来命名的plist文件 NSCoding(NSKeyedArchiver\NSkeyedUnarchiver):遵循NSCoding协议,写对象到文件中和从文件中解析出对象 SQLite3:数据库,

我的博客 3166

ios-数据库.zip

数据封装

FMDB数据库升级增加表字段

升级数据库是件挺麻烦的事,并且自己又是一个对数据库没啥概念的菜鸟。 废话不多说,上代码。感谢各位热心分享的网友。 要在一张已经存在的表里面新增一个或者多个字段,思路应该是这样的:判断要增加的字段存不存在,不存在就插入。 这里用到FMDB的几个api: 1、判读字段是否存在 if (![db columnExists:@"需要增加的字段" inTableWithName:@"表名"]){

不要停我的药 1万+

ios 数据库 (FMDB使用)

此demo使用单例使用FMDB对数据库进行增、删、改、查;demo实现详细

ios登陆 注册 界面 数据库

ios sqlite3 数据库 里面包含登陆 注册界面

IOS开发之——数据库-Couchbase(05)

一 概述 Couchbase是一个跨平台、轻量级、非关系型数据库,适用于Android和IOS移动平台 Couchbase官方项目地址及项目导入 Couchbase核心类介绍 Couchbase数据库示例 二 Couchbase官方项目地址及项目导入 2.1 Github项目地址 Github-Couchbase-lite-ios:https://github.com/couchbase/couchbase-lite-ios 2.2 Couchbase官方地址(OC语言) Couchbase Lite

我的博客 2261

iOS sqlite对数据库的各种操作(日常整理全)

在IOS中使用Sqlite来处理数据。如果你已经了解了SQL,那你可以很容易的掌握SQLite数据库的操作。本文给大家介绍iOS sqlite对数据库的各种操作,需要的朋友参考下吧

ios 获取MySQL,(iOS)读取db数据库

一般除了网络请求数据外,我们的项目中还会遇到导入本地数据库(db)。今天主要分享如何获取db数据库中的所有字段和数据。首先我们需要导入依赖框架FMDB,将我们所需读取的db数据库拖入项目中 本地数据库展示sql下的数据库里的数据 NavicatCREATE TABLE "nba_star" ("nID" integer,"name" text,"age" integer,"team" text,"...

weixin_42356139的博客 409

【硬件】通俗易懂的讲解晶体管(三极管和MOS管)的工作原理

晶体管是一个简单的元器件,可用于构建许多有趣的项目。在本文中,我将用通俗易懂的语言给您讲解晶体管的工作原理,以便您可以在电路设计中更好的使用静态管。一旦你学习这些基础知识,对以后的设计和使用来说,将会变得非常容易。我们将重点介绍两种最常见的晶体管:双极型晶体管(三极管)和MOSFET。晶体管的工作原理其实是类似于电子开关。它可以打开和关闭电路。一个简单的思考方法是将晶体管视为无源的继电器。晶体管类似于继电器,从某种意义上说,您可以使用它来打开和关闭某些东西。但晶体管也可以部分导通,一般在放大电路中使用,这部

1万+

【软考高级架构设计师】——2025年上半年软考真题(回忆版)

a)异构计算和算法优化b)资源抽象和容器控制c)安全和隔离(大致是这个意思)

小志的博客 4830

ios查看sqlite database

ios使用sqlite数据库作为本地存储。 在开发过程中,免不了要查看sqlite数据库情况。 ios上做法和android一样,将数据库文件(一般为.db后缀)复制到本地,再使用sqlite查看器进行查看。   将.db文件复制到本地需要使用工具iexplorer。号称需要购买,但使用demo版也能用。 本地查看sqlite有很多工具,一般可用firefox的sqlite3 manag...

ryqql的专栏 278

企业知识库AI助手的权限管理架构:如何实现细粒度控制?

在展开架构设计前,我们需要先明确“细粒度权限”的核心定义,并理解它对AI助手的特殊意义。权限管理的“粒度”,本质是权限控制的精准程度。维度粗粒度权限细粒度权限资源范围entire document(整个文档)field/paragraph(字段/段落)操作类型read/write(读/写)generate_summary/download/export(生成摘要/下载/导出)上下文约束无(静态权限)time/ip/device(时间/IP/设备)适用场景简单系统(如内部wiki)

大数据洞察的博客 1042

iOS attempt to write a readonly database

db文件保存的路径为本地路径 如: [[NSBundle mainBundle] pathForResource:@"myDatabase" ofType:@"db"]; 会出现此数据库文件为只读属性 造成此数据库文件不可修改 如果一定要到这种文件的话就把这个文件copy到本程序沙盒

李欣欣的博客 1014

【2023版】基于JT808/JT1078协议的车载视频监控平台开发实战-开源架构解析

本文详细解析了基于JT808/JT1078协议的车载视频监控平台开发实战,涵盖协议核心作用、开源架构设计、开发避坑指南及二次开发建议。重点介绍了JT1078协议在音视频传输中的优化方案,以及海量位置数据存储、高可用架构等关键技术点,为开发者提供全面的实战参考。

weixin_26965807的博客 236

DINOv3实战指南:如何利用零样本视觉模型革新工业质检

本文详细介绍了如何利用DINOv3零样本视觉模型革新工业质检流程。通过无需标注数据的自监督学习技术,DINOv3能快速部署高精度检测系统,显著降低成本和提升效率。文章涵盖模型选型、数据准备、实时检测优化及典型行业解决方案,为工业质检提供革命性AI实践指南。

ansible6ops的博客 124

ios 获取MySQL_ios 通过第三方FMDB来读取db数据库的数据 | 学步园

第一步:在新建项目中把FMDB类库加进项目中,如图:第二步:将做好的.db数据库放到以下目录中:/Users/apple/Library/Application Support/iPhone Simulator/6.1/Applications/06A47F8B-23EA-48D5-80A5-54CF37D0D8B8/Documents/TCFexam.db数据库如图:第三步:输入以下代码:///...

weixin_35412669的博客 244

【Claude Code 源码解析教程】第25章:测试与调试

Claude Code 作为复杂的 AI 编程助手,测试与调试是保证质量的关键环节。项目建立了完善的测试体系,包括单元测试、集成测试、端到端测试等多个层次,同时提供了丰富的调试工具和技巧。

rengang66的博客 210

native_db跨平台部署教程:Android与iOS应用集成指南

native_db是一款基于Rust开发的嵌入式数据库,专为跨平台应用设计,支持服务器、桌面和移动设备。本教程将详细介绍如何在Android和iOS应用中集成native_db,帮助开发者快速实现本地数据存储功能。 ## 一、环境准备 ### 1.1 安装Rust环境 首先需要在开发机器上安装Rust环境。打开终端,执行以下命令: ```bash curl --proto '=https' -

gitblog_00605的博客 1068

Aurix TC3xx系列MCU ResourceM模块配置(多核资源分配)

为减轻主核的负载率或者平衡各个核的资源分配,通常需要把一些MCU内部资源分配到从核上,在EB tresos工具中,通过ResourceM模块实现多核资源分配。

m0_38045338的博客 1388

Google Earth Engine(GEE)—— 显示如何使用迁移的训练样本进行多年分类的脚本(sentinel-2影像为例)光谱差异()

HydroSHEDS 是一种地图产品,它以一致的格式为区域和全球范围的应用程序提供水文信息。它提供了一套不同比例的地理参考数据集(矢量和栅格),包括河流网络、流域边界、排水方向和流量累积。请注意,对于北纬 60 度以上的地区,HydroSHEDS 数据的质量明显较低,因为没有可用的基础 SRTM 高程数据,因此分辨率较低的 DEM(USGS 提供的 HYDRO1k)。该数据集基于 15 角秒(赤道约 500 米)分辨率栅格数据提供嵌套的分层分水岭多边形。光谱信息和之前不同的点:训练结果。

此星光明博客 966

ios 通过第三方FMDB来读取db数据库的数据

第一步:在新建项目中把FMDB类库加进项目中,如图: 第二步:将做好的.db数据库放到以下目录中: /Users/apple/Library/Application Support/iPhone Simulator/6.1/Applications/06A47F8B-23EA-48D5-80A5-54CF37D0D8B8/Documents/TCFexam.db 数据库如图:

likandmydeer的专栏 3564

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

2016年将已有.db数据库添加到ios项目里的方法.

iOS FMDB数据库 主题 FMDB数据库的操作:(当已有.db数据库的情况) 步骤: 1:添加头文件 #import "FMDatabase.h" #import “FMResultSet.h” 2.定义全局变量: {     FMDatabase *_dataBase;//因为全局都要调用数据库,所以写成全局变量 } 3.开始搞起来: //获得沙盒路径

yfch147的博客 446

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ios sqlite3数据库的封装-自己封装的,针对锁死database is closed的解决和预防

ios sqlite3数据库的封装-自己封装的,针对锁死database is closed的解决和预防

Ios为我所用 3917

在Xamarin.iOS项目中使用预设数据库

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33875839的博客 145

ios 调整麦克风音量_iOS 音量柱的实现(mic 采集的声音DB反映成音量柱)

需求 : APP 将麦克风采集到的声音(Audio Queue / Audio Unit) 通过公式转换成DB然后在界面中显示出来可实时检测DB变化。流程:配置Audio 初始化参数,必须使用Audio Queue 或 Audio Unit采集声音。在Audio Queue 或 Audio Unit 采集声音的回调中将声音数据转为DB。将拿到每一帧声音的DB值传给主控制器的UI以反映声音的变化最终...

weixin_42115513的博客 938
上一篇: stat函数讲解:
下一篇: 欢迎使用优快云-markdown编辑器
JZR_HAO
博客等级 码龄15年 8粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值