随笔分类 -  机器学习系统设计

摘要:消费者 回忆:生产者提供产品的接口 在第捌章,IO系统(二)中,生产者DataReader提供了外部消费接口: class DataReader { public: ......... BlockingQueue<Datum*>& free() const { return ptr_pair->fr 阅读全文
posted @ 2016-03-26 13:13 Physcal 阅读(6533) 评论(10) 推荐(2) 编辑
摘要:数据变形 IO(二)中,我们已经将原始数据缓冲至Datum,Datum又存入了生产者缓冲区,不过,这离消费,还早得很呢。 在消费(使用)之前,最重要的一步,就是数据变形。 ImageNet ImageNet提供的数据相当Raw,不仅图像尺寸不一,ROI焦点内容比例也不一,如图: [Krizhevsk 阅读全文
posted @ 2016-03-24 16:06 Physcal 阅读(6358) 评论(0) 推荐(0) 编辑
摘要:听说Google出了TensorFlow,那么Caffe应该叫什么? ——BlobFlow 神经网络时代的传播数据结构 我的代码 我最早手写神经网络的时候,Flow结构是这样的: struct Data { vector<double> feature; int y; Data(vector<dou 阅读全文
posted @ 2016-03-19 11:38 Physcal 阅读(6371) 评论(0) 推荐(0) 编辑
摘要:生产者 双缓冲组与信号量机制 在第陆章中提到了,如何模拟,以及取代根本不存的Q.full()函数。 其本质是:除了为生产者提供一个成品缓冲队列,还提供一个零件缓冲队列。 当我们从外部给定了固定容量的零件之后,生产者的产能就受到了限制。 由两个阻塞队列组成的QueuePair,并不是Caffe的独创, 阅读全文
posted @ 2016-03-12 20:59 Physcal 阅读(4060) 评论(8) 推荐(0) 编辑
摘要:你说你会关系数据库?你说你会Hadoop? 忘掉它们吧,我们既不需要网络支持,也不需要复杂关系模式,只要读写够快就行。 ——论数据存储的本质 关系数据库横行已久,似乎大家已经忘了早些年那些简陋的数据存储模式。 在ACM选手中,流传着“手艹数据库”的说法,即利用map<string,type>或者ma 阅读全文
posted @ 2016-03-12 19:50 Physcal 阅读(5683) 评论(0) 推荐(0) 编辑
摘要:你说你学过操作系统这门课?写个无Bug的生产者和消费者模型试试! ——你真的学好了操作系统这门课嘛? 在第壹章,展示过这样图: 其中,左半部分构成了新版Caffe最恼人、最庞大的IO系统。 也是历来最不重视的一部分。 第伍章又对左半部分的独立性进行了分析,我是这么描述到: Datum和Blob(Ba 阅读全文
posted @ 2016-03-06 18:03 Physcal 阅读(5641) 评论(1) 推荐(1) 编辑
摘要:你为Class外访问private对象而苦恼嘛?你为设计序列化格式而头疼嘛? ——欢迎体验Google Protocol Buffer 面向对象之封装性 历史遗留问题 面向对象中最矛盾的一个特性,就是“封装性”。 在上古时期,大牛们无聊地设计了三种访问域: public、private、protec 阅读全文
posted @ 2016-03-04 19:30 Physcal 阅读(5221) 评论(2) 推荐(0) 编辑
摘要:不精通多线程优化的程序员,不是好程序员,连码农都不是。 ——并行计算时代掌握多线程的重要性 线程与操作系统 用户线程与内核线程 广义上线程分为用户线程和内核线程。 前者已经绝迹,它一般只存在于早期不支持多线程的系统中。 它用模拟的方式实现一个模拟的多线程系统,不支持异步。 即,一个线程被阻塞了,其它 阅读全文
posted @ 2016-03-01 23:54 Physcal 阅读(4168) 评论(0) 推荐(0) 编辑
摘要:你需要一个管家,随手召唤的那种,想吃啥就吃啥。 ——设计一个全局线程管理器 一个机器学习系统,需要管理一些公共的配置信息,如何存储这些配置信息,是一个难题。 在传统的MVC编程框架中,通常采取设立数据中心的做法,将所有配置信息存在其中。 同时,将数据中心指针共享至所有类,形成一个以数据为中心,多重引 阅读全文
posted @ 2016-02-17 08:12 Physcal 阅读(5483) 评论(3) 推荐(0) 编辑
摘要:你左手是内存,右手是显存,内存可以打死显存,显存也可以打死内存。 —— 请协调好你的主存 从硬件说起 物理之觞 大部分Caffe源码解读都喜欢跳过这部分,我不知道他们是什么心态,因为这恰恰是最重要的一部分。 内存的管理不擅,不仅会导致程序的立即崩溃,还会导致内存的泄露,当然,这只针对传统CPU程序而 阅读全文
posted @ 2016-02-15 12:33 Physcal 阅读(6938) 评论(1) 推荐(2) 编辑
摘要:请以“仰望星空与脚踏实地”作为题目,写一篇不少于800字的文章。除诗歌外,文体不限。 ——2010·北京卷 仰望星空 规范性 Caffe诞生于12年末,如果偏要形容一下这个框架,可以用"须敬如师长"。 这是一份相当规范的代码,这个规范,不应该是BAT规范,那得是Google规范。 很多自称码农的人应 阅读全文
posted @ 2016-02-15 07:52 Physcal 阅读(10700) 评论(8) 推荐(2) 编辑
摘要:工作环境 巧妇有了米炊 众所周知,Caffe是在Linux下写的,所以长久以来,大家都认为跑Caffe,先装Linux。 niuzhiheng大神发起了caffe-windows项目(解决了一些编译、API相异问题) 以及willyd大神发起的caffe-windows-dependencies项目 阅读全文
posted @ 2016-02-13 08:36 Physcal 阅读(5668) 评论(1) 推荐(4) 编辑