iOS开发-7.Block

避坑指南:Win10安装Docker Desktop时Hyper-V报错的7种解决方案(2024最新版) 本文提供了2024年最新、最全面的Windows 10系统下Docker Desktop安装时Hyper-V报错的解决方案指南。文章深入剖析了Hyper-V与Docker的共生关系,并系统性地给出了从BIOS/UEFI设置、Windows功能启用、bcdedit命令修复到处理多虚拟化环境共存等7种核心解决方案,帮助开发者彻底解决安装困局,顺利部署容器化开发环境。 阅读详情
  • 1.block的本质
a) block本质上也是一个OC对象,它内部也有个isa指针

b) block是封装了函数调用以及函数调用环境的OC对象

c) block的底层结构如图

d) block底层代码实现

struct __block_impl {
    void *isa;
    int Flags;
    int Reserved;
    void *FuncPtr;
};

struct __main_block_impl_0 {
  struct __block_impl impl;
  struct __main_block_desc_0* Desc;
  // 构造函数(类似于OC的init方法),返回结构体对象
  __main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int flags=0) {
    impl.isa = &_NSConcreteStackBlock;
    impl.Flags = flags;
    impl.FuncPtr = fp;
    Desc = desc;
  }
};

// 封装了block执行逻辑的函数
static void __main_block_func_0(struct __main_block_impl_0 *__cself) {
            NSLog((NSString *)&__NSConstantStringImpl__var_folders_2r__m13fp2x2n9dvlr8d68yry500000gn_T_main_c60393_mi_0);
        }
        
// desc描述函数
static struct __main_block_desc_0 {
  size_t reserved;
  size_t Block_size;
} __main_block_desc_0_DATA = { 0, sizeof(struct __main_block_impl_0)};

// main函数
int main(int argc, const char * argv[]) {
    /* @autoreleasepool */ { __AtAutoreleasePool __autoreleasepool;
        // 定义block变量
        void (*block)(void) = &__main_block_impl_0(
                                                   __main_block_func_0,
                                                   &__main_block_desc_0_DATA
                                                   );

        // 执行block内部的代码
        block->FuncPtr(block);
    }
    return 0;
}
  • 2.block的变量捕获(capture)
a) 为了保证block内部能够正常访问外部的变量,block有个变量捕获机制

b) 局部变量需要捕获的原因,是因为你在跨函数访问

c) 全局变量你在那里都可以访问,所以不会捕获

  • 3.auto变量的捕获

  • 4.block的类型

a) block有3种类型,可以通过调用class方法或者isa指针查看具体类型,最终都是继承自NSBlock类型
    1) __NSGlobalBlock__ ( _NSConcreteGlobalBlock )
    2) __NSStackBlock__ ( _NSConcreteStackBlock )
    3) __NSMallocBlock__ ( _NSConcreteMallocBlock )
    
b) 访问了局部变量的block是放到栈段,打印出来是malloc类型是ARC处理了,关闭了ARC即能够拿到真实类型,既然是放到栈上面,离开了作用域,内存就会释放,所以以后在访问block就可能出现垃圾数据

c) 应用程序的内存分配&block存储的区域
    1) 程序区域(代码段) 地址值比较小
    2) 数据区域(放全局变量:在函数外面定义的变量) 
    3) 堆:动态分配内存,需要程序员申请内存,也需要程序员管理内存(alloc出来的对象)
    4) 栈:(放局部变量:在函数里面定义的变量,系统自动分配和销毁内存)

d) block类型环境

e) 每一种类型的block调用copy后的结果

  • 5.block的copy
a) 在ARC环境下,编译器会根据情况自动将栈上的block复制到堆上,比如以下情况
    1) block作为函数返回值时
    2) 将block赋值给__strong指针时
    3) block作为Cocoa API中方法名含有usingBlock的方法参数时
    4) block作为GCD API的方法参数时
    
b) MRC下block属性的建议写法
    1) @property (copy, nonatomic) void (^block)(void);
    
c) ARC下block属性的建议写法
    1) @property (strong, nonatomic) void (^block)(void);
    2) @property (copy, nonatomic) void (^block)(void);
    
d) block用copy来修饰,无论mrc还是arc都是一致的,在arc环境下,strong和copy是没区别的
  • 6.对象类型的auto变量
a) 当block内部访问了对象类型的auto变量时
    1) 如果block是在栈上,将不会对auto变量产生强引用(mrc环境验证)
    2) 栈空间上的block是不会保住person对象的命的即不会强引用或者弱引用,但是person的释放跟自身的引用计数为不为0挂钩
    3) block访问对象类型就会多出copy和dispose方法,需要对对象retain和release操作,内存管理操作
    4) block引用的对象什么时候释放就看对象本身的强引用什么时候释放
    
b) 如果block被拷贝到堆上
    1) 会调用block内部的copy函数
    2) copy函数内部会调用_Block_object_assign函数
    3) _Block_object_assign函数会根据auto变量的修饰符(__strong、__weak、__unsafe_unretained)做出相应的操作,形成强引用(retain)或者弱引用
    
c) 如果block从堆上移除
    1) 会调用block内部的dispose函数
    2) dispose函数内部会调用_Block_object_dispose函数
    3) _Block_object_dispose函数会自动释放引用的auto变量(release)

  • 6.使用clang转换OC为C++代码时,可能会遇到问题解决
a) 在使用clang转换OC为C++代码时,可能会遇到以下问题
    1) cannot create __weak reference in file using manual reference
    
b) 解决方案:支持ARC、指定运行时系统版本,比如
    1) xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc -fobjc-arc -fobjc-runtime=ios-8.0.0 main.m
  • 7.__block修饰符
a) __block可以用于解决block内部无法修改auto变量值的问题
    1) block为什么不能直接修改外部的局部变量,可以从底层本质角度去解读,2个不同的函数,肯定不能在另外一个函数去修改另一个函数的局部变量,2个函数的栈空间是不一样的,一个调完了,另外一个可能就不存在了
    2) 此时你又想去改的做法变成static局部变量或者全局变量(那么变量就会一直在内存中)
    3) 可以用__block来解决问题,直接修改指针的时候才需要加,会将数据包装成一个对象
    
b) __block不能修饰全局变量、静态变量(static)

c) 编译器会将__block变量包装成一个对象

  • 8.__block的内存管理
a) 当block在栈上时,并不会对__block变量产生强引用

b) 当block被copy到堆时
    1) 会调用block内部的copy函数
    2) copy函数内部会调用_Block_object_assign函数
    3) _Block_object_assign函数会对__block变量形成强引用(retain)

c) 当block从堆中移除时
    1) 会调用block内部的dispose函数
    2) dispose函数内部会调用_Block_object_dispose函数
    3) _Block_object_dispose函数会自动释放引用的__block变量(release)

  • 8.__block的__forwarding指针

  • 9.对象类型的auto变量、__block变量

a) 当block在栈上时,对它们都不会产生强引用

b) 当block拷贝到堆上时,都会通过copy函数来处理它们
    1) __block变量(假设变量名叫做a)
_Block_object_assign((void*)&dst->a, (void*)src->a, 8/*BLOCK_FIELD_IS_BYREF*/);

    2) 对象类型的auto变量(假设变量名叫做p)
_Block_object_assign((void*)&dst->p, (void*)src->p, 3/*BLOCK_FIELD_IS_OBJECT*/);

c) 当block从堆上移除时,都会通过dispose函数来释放它们
    1) __block变量(假设变量名叫做a)
_Block_object_dispose((void*)src->a, 8/*BLOCK_FIELD_IS_BYREF*/);

    2) 对象类型的auto变量(假设变量名叫做p)
_Block_object_dispose((void*)src->p, 3/*BLOCK_FIELD_IS_OBJECT*/);

  • 10.__block修饰的对象类型
a) 当__block变量在栈上时,不会对指向的对象产生强引用

b) 当__block变量被copy到堆时
    1) 会调用__block变量内部的copy函数
    2) copy函数内部会调用_Block_object_assign函数
    3) _Block_object_assign函数会根据所指向对象的修饰符(__strong、__weak、__unsafe_unretained)做出相应的操作,形成强引用(retain)或者弱引用(注意:这里仅限于ARC时会retain,MRC时不会retain)

c) 如果__block变量从堆上移除
    1) 会调用__block变量内部的dispose函数
    2) dispose函数内部会调用_Block_object_dispose函数
    3) _Block_object_dispose函数会自动释放指向的对象(release)
    
d) 用__block修改基本数据类型/对象类型生成的自身__block结构体多出了copy&dispose的方法
  • 11.循环引用问题
a) 什么是循环引用?

b) 解决循环引用问题 - ARC

c) 解决循环引用问题 - MRC

d) __weak 只能用来修饰OC对象

e) __weak和__unsafe_unretained区别
    1) __weak:不会产生强引用,指向的对象销毁时,会自动让指针置为nil
    2) __unsafe_unretained:不会产生强引用,不安全,指向的对象销毁时,指针存储的地址值不变
  • 12.block常见面试题快速作答
a) block的原理是怎样的?本质是什么?
    1) 封装了函数调用以及调用环境的OC对象

b) __block的作用是什么?有什么使用注意点?

c) block的属性修饰词为什么是copy?使用block有哪些使用注意?
    1) block一旦没有进行copy操作,就不会在堆上
    2) 使用注意:循环引用问题

d) block在修改NSMutableArray,需不需要添加__block?
    1) 不需要
手把手教你学Simulink——基于Simulink的输入输出线性化精确转矩控制 由于IOFL控制律中实时引入了当前状态的反馈(id​,iq​,ωe​),电感的变化被非线性项自动补偿,转矩仅出现微小幅度的波动(< 2%),展现出极强的参数鲁棒性。:电压方程中的耦合项(ωe​Lq​iq​和 −ωe​Ld​id​)仅通过前馈补偿,当转速 ωe​较高时,微小的前馈误差会导致显著的d-q轴电流交叉耦合;其中,ud​,uq​为定子电压,id​,iq​为定子电流,Rs​为定子电阻,Ls​为定子电感,ωe​为电角速度,ψf​为永磁体磁链,p为极对数。(步长 Ts​=10μs,即100ns? 阅读详情

相关推荐

Kill5.37版本下,使用ARMcomplier6编译__asm 函数报错的问题

Kill5-5.37版本下,使用ARMcomplier6编译__asm 函数报错的问题 问题简要描述: 昨日更新了keil5软件的版本,从5.17更新到了5.37版本,然后编译STM32项目文件时,软件提示编译报错。报错问题如下: Build started: Project: QKsoftware *** Using Compiler 'V6.18', folder: 'E:\MDK-ARM\ARM\ARM\ARMCLANG\Bin' Build target 'QKsoftware' compiling

weixin_43644424的博客 1万+

深入理解 __block 修饰符的底层实现原理

????????关注后回复“进群”,拉你进程序员交流群????????转自:掘金 GDCoderhttps://juejin.cn/post/6942796652717539364在...

iOS_开发 406

【100%通过率】2023华为od机试C卷【电脑病毒感染】C++ 实现

一个局域网内有很多台电脑,分别标注为 0 ~ N-1 的数字。相连接的电脑距离不一样,所以感染时间不一样,感染时间用t 表示。其中网络内一台电脑被病毒感染,求其感染网络内所有的电脑最少需要多长时间。如果最后有电脑不会感染,则返回-1.

MISAYAONE的博客 1726

Block之__block

__block 可以用来解决block内部无法修改auto变量值的问题 __blcok不能修饰全局变量、静态变量(static) 编译器会将__block变量包装成一个对象 代码示例 ============================== 原始代码 ============================== @interface TBPerson : NSObject @proper...

tanxianbo的博客 288

Android 13 Settings蓝牙列表卡顿问题排查及优化过程

此时我们的卡顿优化基本完成了,我们应该要考虑内存是否会泄漏,如果大家不知道哪些需要回收可以用leakcanary和android profiler进行内存检测,看代码有没有内存泄漏。

龚礼鹏的博客 2546

【图像超分】论文精读:Enhanced Deep Residual Networks for Single Image Super-Resolution(EDSR和MDSR)

最近对超分辨率的研究随着深度卷积神经网络 (DCNN) 的发展取得了进展。特别是,残差学习技术表现出更好的性能。在本文中,我们开发了一个增强的深度超分辨率网络(EDSR),其性能超过了当前最先进的 SR 方法。我们模型的显着性能改进是由于通过删除传统残差网络中不必要的模块进行优化。当我们稳定训练过程时,通过扩展模型大小可以进一步提高性能。我们还提出了一种新的多尺度深度超分辨率系统(MDSR)和训练方法,该方法可以在单个模型中重建不同缩放因子的高分辨率图像。所提出的方法在基准数据集上比最先进的方法表现出更好的

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 7923

block-__block修饰符和__block内存管理

一、__block修饰符的特点 1.__block可以用于解决block内部无法修改auto变量值的问题 2.__block不能修饰全局变量、静态变量(static) 因在block的内部是无法修改外部的auto变量的,所以需要通过__block修饰符来修改外部auto变量的值,看看下面的一段代码: #import &lt;Foundation/Foundation.h&gt; in...

信者的路 760

【计算机视觉】语义分割实战:FCN、U-Net与DeepLab系列详解

语义分割实战:FCN、U-Net与DeepLab系列详解,人工智能、大模型、AI深度学习在计算机视觉领域取得了令人瞩目的进展,语义分割作为计算机视觉领域的关键任务,旨在将图像中的每个像素都分配到特定的类别中,实现对图像内容的精细理解。与目标检测关注物体的类别与位置不同,语义分割能够对场景中的所有元素进行像素级别的分类,这在自动驾驶、医学图像分析、遥感图像解译等众多领域都有着至关重要的应用。例如,在自动驾驶中,准确的语义分割可以帮助车辆识别道路、行人、交通标志等,为安全行驶提供决策依据;在医学图像分析中……

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 9万+

iOS block总结

block的本质 block是封装了函数调用以及函数调用环境的OC对象。 源码实现有封装isa,函数地址等。 block的变量捕获机制 block只能捕获局部变量,不能捕获全局变量。 全局变量随时可以访问,而局部变量不知道什么时候会被销毁,所以需要捕获。 局部变量的类型 auto: 离开范围作用域就会自动销毁,访问方式是值传递,block内部无法修改auto变量值,默认修饰局部变量。 static: 一直在内存中,访问方式是指针传递,block内部可以修改static变量值。 block的类型 NSGlob

qq_35734499的博客 234

openclaw中文版安装教程和常用命令

OpenClaw 中文版的和,涵盖本地一键部署、Docker 隔离部署、阿里云极速部署三种方式,以及六大类高频命令,方便你快速上手和日常运维。

suny8的专栏 2995

QT控件 参考Qt的PIMPL设计模式实现使用QWidget控件绘制3D饼状图表和3D柱状图表,使用QChartView绘制圆柱体图表

工作中之前遇到了绘制3D饼状图表的需求,通过Qt 实现3维饼状图 一文,成功迅速解决问题,现在闲下来了,之前看QtTreePropertyBrowser库的源代码,就想着学习学习Qt的PIMPL模式,于是就参照PIMPL模式实现通过QWidget控件的paintEvent函数重新绘制3D饼状图表和3D柱状图表统计数据的显示效果, 而使用QChartView绘制圆柱体图表完全是取巧了,为了紧急完成工作采用的方法,实际上使用3D柱状图表显示统计数据更加合理。

... 727

面试题-Block

block的原理是怎样的?本质是什么? 封装了函数调用以及调用环境的OC对象 __block的作用是什么?有什么使用注意点? __block可以用于解决block内部无法修改auto变量值的问题 __block不能修饰全局变量、静态变量(static) 编译器会将__block变量包装成一个对象 使用注意点:在MRC情况下,当__block变量被copy到堆上时,不会对其产生强引用 b...

hengsf123456的博客 409

OData Request:Create Entity 在 ABAP OData Client Proxy 中的工程化实践

文章摘要 本文针对具备 SAP Gateway 与 ABAP 开发经验的读者,详细讲解如何通过 ABAP OData Client Proxy 实现 OData 服务的 Create 操作。首先对比了 OData V2 与 V4 的 Create 规范差异,强调键、集合 URL 和请求体的标准化要求。随后介绍了 ABAP Client Proxy 的编程模型,包括 Client Proxy、Entity List Resource 和 Create Request/Response 三个核心对象,并提供了完

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 247

iOS开发之进阶篇(7)—— Block中的 weakSelf & strongSelf

目录1. 概述2. 自定义block2.1 情况一2.2 情况二2.3 情况三2.4情况四3. 系统block3.1 GCD3.2 UIView3.3 网络请求4. 何时使用 weakSelf & strongSelf ? 1. 概述 之前有写过一篇博文: Block 但当时没有具体讨论何时该使用weakSelf, 何时又该使用strongSelf. 我们现在就从多个常用场景中来讨论, 如何使用self的强弱引用来避免block的循环引用问题. 众所周知, 由于对象之间循环强引用, 导致对象在作用域

看影成痴 1018

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

iOS7应用开发 第7、8集 协议、block、动画

一、协议(protocal)和代理(delegate)1、协议和代理存在的意义协议和代理是模块化开发和封装的产物。 先讲一个小故事帮助大家理解: 老王有一家餐馆,刚刚开始的时候规模很小,所以老王一个人做了所有的事情:扫地,做菜,迎宾,上菜,收银。但是后面随着规模的扩大,老王一个人就吃不消了,忙死也忙不过来了。这时候怎么办?大家都很清楚吧,招人呗!所以后面就有了服务员,收银员,大厨,保洁

长沙火山 446

深度学习工具包 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")

(8/18)重学Standford_iOS7开发_协议、block、动画_课程笔记

第八课:   1、协议     另一种安全处理id类型的方式如:id <MyProtocol> obj     a.声明 //协议一般放于.h文件中或者在类的.h文件中 @protocol Foo <Xyzzy, NSObject>//<>中的内容表示还需实现自哪些协议,所有协议的根协议一般都是NSObject - (void)someMet...

weixin_30657999的博客 132

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【IOS 开发学习总结-OC-7.6-★】objective-c ——块(Block)

块是 OC对 ANSI 做的扩展,使用块可以简化 objective-c 的编程。很多 objective-c 的很多API 都依于块。块的基本语法定义块的语法格式:^[块的返回值类型](形参类型1,形参1,形参类型2,形参2,.....){ //块执行体 }块,其实是个匿名函数。定义块和定义函数的区别定义块和定义函数的区别: - 定义块必须以^开头 - 定义块无需指定名字

Albert的专栏 1452

iOS7 Programming Cookbook-Chapter 7-Concurrency(Operation)

本文是笔者自己自学iOS7开发的过程中,练习翻译的《iOS7 Programming Cookbook》,兼做个人的笔记和代码汇总。 由于第七章篇幅过长,拆分成四部分,这是其中的Operation部分

tju_dxy0805的专栏 673

iOS7新JavaScriptCore框架入门介绍

原文传送门:http://blog.iderzheng.com/introduction-to-ios7-javascriptcore-framework/ Oct 05, 2013 ~ 1 Comment ~ Written by Ider 前阵子,Apple正式发布了新的iOS 7系统,最大最直观的改变在于界面变得小清新范了,我也提到《iOS,你真的越来越像Androi

冷胜任 的专栏 1105

iOS——二维码扫描

网址:https://github.com/reesun1130/SYQRCodeDemo SYQRCode:低仿微信二维码扫描,IOS原生API,需要IOS7.0及以上系统支持。简单易用,使用block做回调处理。 fix crash ---- Terminating app due to uncaught exception NSInvalidArgumentException , re

会飞の马 434

iOS7教程系列:自定义导航转场动画以及更多

在iOS7以前,开发者如果希望定制导航控制器推入推出视图时的转场动画,一般都只能通过子类化UINavigationController或者自己编写动画代码去覆盖相应的方法,现在iOS7为开发者带来了福音。 “” 阅读器 原文:iOS 7 Tutorial Series: Custom Navigation Transitions

hong1595的专栏 1092

iOS 工作遇到问题记录

iOS 工作遇到问题记录 1、UITableView的scrollDelegate问题 下午遇到一个奇怪的问题,之前都没有注意过,由于A VC中要实现tableView和其他View位置的联动,所以实现了tableView的delegate中的scrollViewDidScroll方法,结果在点击商品push 商品详情VC B 的时候,问题出现了。 问题表现:在调用[self.navi...

weixin_30337251的博客 122

OC开发_Storyboard——block和动画

一、协议 @optional :可选的 @requied :必须实现的 二、block 代码块 1、 以一个^开头,然后是参数,然后是一个大括号,包含我们的代码块 1 [aDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) { 2 NSLog(@“value f...

weixin_34055787的博客 90

IOS开发点滴

naigateBar是否透明的设置 navigationController.navigationBar.translucent = YES 获取类的类名 NSLog(@"class name>> %@",NSStringFromClass([self class])); 调试窗口中输出变量 print (type) 变量名。框架中的变量名,最好使用[]语法获取,

奈落之夜的专栏 589

工作记录8:iOS 传值问题总结(7种传值完美介绍)

镔哥哥总结传值有以下: 1、属性传值       前向后传值。 记住: /*  1:属性传值第一步需要用到什么类型就定义什么样的属性  2:从上一个页面到一个页面的选中方法里面将要传的值传到来(上一个页面)备注:这种方法只适用于上一个页面推到下一个页面  */ MainViewController与SecondViewControll

sammyieveo的专栏 4132

PSTAlertController常见问题解答:解决iOS弹窗兼容性的7个挑战

在iOS开发中,弹窗是用户交互的重要组成部分,但iOS 8引入的`UIAlertController`与之前的`UIAlertView`和`UIActionSheet`存在API不兼容问题。**PSTAlertController**作为一个优雅的解决方案,帮助开发者轻松应对iOS弹窗兼容性挑战,让您的应用在iOS 7到最新版本中都能提供一致的用户体验。本文将解答使用PSTAlertControl

gitblog_00399的博客 403
上一篇: iOS开发-6.Category
下一篇: iOS开发-8.Runtime
ZZ_iOSDeveloper
博客等级 码龄11年 21粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值