<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[SunnyZhou-1024的博客]]></title><description><![CDATA[欲知其所以然]]></description><link>https://blog.csdn.net/ZM_Yang</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; ZM_Yang]]></copyright><item><title><![CDATA[看PyTorch源代码的心路历程]]></title><link>https://blog.csdn.net/ZM_Yang/article/details/112993499</link><guid>https://blog.csdn.net/ZM_Yang/article/details/112993499</guid><author>ZM_Yang</author><pubDate>Fri, 22 Jan 2021 17:45:13 +0800</pubDate><description><![CDATA[1. 起因
曾经碰到过别人的模型prelu在内部的推理引擎算出的结果与其在原始框架PyTorch中不一致的情况，虽然理论上大家实现的都是一个算法，但是从参数上看，因为经过了模型转换，中间做了一些调整。为了确定究竟是初始参数传递就出了问题还是在后续传递过程中继续做了更改、亦或者是最终算法实现方面有着细微差别导致最终输出不同，就想着去看一看PyTorch一路下来是怎么做的。
但是代码跟着跟着就跟丢了，才会发现，PyTorch真的是一个很复杂的项目，但就像舌尖里面说的，环境越是恶劣，回报越是丰厚。为了以后再想跟踪]]></description><category></category></item><item><title><![CDATA[CMake笔记：add_custom_command不执行]]></title><link>https://blog.csdn.net/ZM_Yang/article/details/112992759</link><guid>https://blog.csdn.net/ZM_Yang/article/details/112992759</guid><author>ZM_Yang</author><pubDate>Fri, 22 Jan 2021 17:32:40 +0800</pubDate><description><![CDATA[0x00. 前言
在网上看别人做一些手工教程视频，经常能看到这样的评论：

脑子：我感觉我会了。
手：你行你来。

之前一直通过编译脚本去寻找代码入口，感觉我已经懂得CMake的语法了，直到今天寄己要写一个脚本去编译一个工程才发现，事情并不简单：脚本并没有按照我期望的去执行。
此工程需要用到Protocol Buffer，因此当代码构建的时候需要使用使用Protocol Buffer编译器去编译.proto文件获得对应的生成文件。理论上，想要达到这个目的，我们只需要在CMakeLists.txt中使用add]]></description><category></category></item><item><title><![CDATA[Chrom插件开发：入门教程]]></title><link>https://blog.csdn.net/ZM_Yang/article/details/111177454</link><guid>https://blog.csdn.net/ZM_Yang/article/details/111177454</guid><author>ZM_Yang</author><pubDate>Mon, 14 Dec 2020 16:41:57 +0800</pubDate><description><![CDATA[插件由不相同但是内聚的组件组成，这些组件可以包括多个 后台脚本、多个内容脚本、一个设置页面、多个图形用户界面元素以及其他多种逻辑文件组成。插件组件通过HTML、CSS以及JavaScript这些Web开发技术构建，组件依赖于这些Web开发技术所提供的功能，但却又不必包含其全部功能。
本教程会教你创建一个可以任意改变developer.chrome.com网站页面背景颜色的插件，在此插件中会用到许多关键组件，用于讲解每个组件以及展示各个组件之间的关系。
就让我们从创建一个保存此插件文件的目录开始此教程。你也可]]></description><category></category></item><item><title><![CDATA[TensorFlow Lite源码解析之三（委托）]]></title><link>https://blog.csdn.net/ZM_Yang/article/details/111059335</link><guid>https://blog.csdn.net/ZM_Yang/article/details/111059335</guid><author>ZM_Yang</author><pubDate>Sat, 12 Dec 2020 13:00:19 +0800</pubDate><description><![CDATA[1. 前言
所谓劳心者治人，劳力者治于人（所以“劳力士”又叫“打工人”？）。小农经济下自己什么都干，虽然饿不死，但是生产效率也肯定非常低下；只有让专业的人做专业的事，才能最大限度发挥每个人的价值。同理，对于一个推理引擎而言，完成一次计算，可以有多种选择，从头到尾都让CPU做运算理论上也不是什么问题。但是除了结果正确之外，还有另外一项关键指标：时间！密集计算确实非CPU所长，因此他该做的是协调资源，脏活累活让GPU、DSP这些替他干。一个精诚合作的团队力量是非常强大的。那么，TensorFlow Lite是怎]]></description><category></category></item><item><title><![CDATA[Chrom插件开发：什么是插件？]]></title><link>https://blog.csdn.net/ZM_Yang/article/details/111026496</link><guid>https://blog.csdn.net/ZM_Yang/article/details/111026496</guid><author>ZM_Yang</author><pubDate>Fri, 11 Dec 2020 00:05:11 +0800</pubDate><description><![CDATA[插件是一个可以自定义浏览体验的小应用程序。它们可以让用户根据自身需求或者喜好修改Chrome浏览器的功能以及行为。插件以HTML、JavaScript以及CSS等网络技术为基础。
插件需满足目的单一的要求，也就是一个插件只解决一个问题，并且应该易于理解。一个插件可以包含多个组件以及多个功能，但这些组件和功能应该服务于同一个目的。
用户界面应该尽可能小并且意图明显。它们可以小到仅仅是一个图标，例如下图所示的查收Google Mail的插件；也可以大到重写了整个页面。

用户下载安装的插件所包含的文件都被打包在]]></description><category></category></item><item><title><![CDATA[TensorFlow Lite源码解析之二（内存管理）]]></title><link>https://blog.csdn.net/ZM_Yang/article/details/110529943</link><guid>https://blog.csdn.net/ZM_Yang/article/details/110529943</guid><author>ZM_Yang</author><pubDate>Thu, 03 Dec 2020 14:14:27 +0800</pubDate><description><![CDATA[相关阅读
TensorFlow Lite源码解析之一

1. 前言
爱迪生说过，人工智能就是是百分之九十九的数据加上百分之一的算法。毕竟目前人工智能还没有达到T800这种以毁灭人类为己任的终结者级别，归根到底还是一个程序。这么一想，是不是觉得市面上说的AI要统治人类了根本就是危言耸听，对于弱人工智能，我治不住你，难道我的360强力卸载还治不住你？
言归正传。很显然，想要了解一个程序，理解它是怎么管理用于存储数据的内存是一个绕不开的话题。想要了解TensorFlow Lite是如何工作的，我们首先要弄清楚它.]]></description><category></category></item><item><title><![CDATA[TensorFlow Lite源码解析之一]]></title><link>https://blog.csdn.net/ZM_Yang/article/details/110382362</link><guid>https://blog.csdn.net/ZM_Yang/article/details/110382362</guid><author>ZM_Yang</author><pubDate>Mon, 30 Nov 2020 11:20:32 +0800</pubDate><description><![CDATA[每一个成功的人工智能背后，都有一个摸摸推理的引擎。想知道TFLite是怎么工作的么，戳我了解更多！]]></description><category></category></item><item><title><![CDATA[为Chrome插件Google Dictionary进行的一次小手术]]></title><link>https://blog.csdn.net/ZM_Yang/article/details/109609639</link><guid>https://blog.csdn.net/ZM_Yang/article/details/109609639</guid><author>ZM_Yang</author><pubDate>Tue, 10 Nov 2020 23:32:05 +0800</pubDate><description><![CDATA[一步一步教你如何修改Chrome插件]]></description><category></category></item><item><title><![CDATA[如何使用Python开发自己的编译器]]></title><link>https://blog.csdn.net/ZM_Yang/article/details/109099859</link><guid>https://blog.csdn.net/ZM_Yang/article/details/109099859</guid><author>ZM_Yang</author><pubDate>Thu, 15 Oct 2020 16:26:37 +0800</pubDate><description><![CDATA[1. 前言
总所周知，编译器是一个将一种语言（源语言）翻译成另一种语言（目标语言）的程序，如果我们只想使用它，我们只需要将它看作一个黑盒子即可不必关心它的实现，如图1所示。

但是如果你想发明一种新的语言，你就需要了解它的内部构造了，因为要发明一门新语言，其实你需要做的就是编写一个新的编译器。实际上，编译器将源程序翻译成目标程序的过程可以分为词法分析、语法分析、语义分析以及目标代码生成等多个阶段，如图2所示。通常，我们称词法分析、语法分析、语义分析以及中间代码生成这几个阶段为前端，而代码优化以及目标代码生成]]></description><category></category></item><item><title><![CDATA[Linux虚拟内存技术初窥]]></title><link>https://blog.csdn.net/ZM_Yang/article/details/108778966</link><guid>https://blog.csdn.net/ZM_Yang/article/details/108778966</guid><author>ZM_Yang</author><pubDate>Thu, 24 Sep 2020 17:31:05 +0800</pubDate><description><![CDATA[1. 为什么要用虚拟内存
总所周知，从做系统的主要作用是对计算机资源的管理以及程序调度，者其中就包括对内存的管理。现在很多的系统都是用虚拟内存技术来对内存的管理，所谓虚拟内存，就是一种让应用程序觉得它拥有一个很大的内存可以使用，例如对于一个64位的操作系统，操作系统会给应用程序制造一种它可以有2^64Bytes那么大的内存可以使用的假象，虽然实际情况可能是这个电脑上只有4G的内存。
对于一个多任务操作系统，如果不适用虚拟内存，计算机所拥有的那点内存显然不够分，虽然我们可以选择增加物理内存的方式让程序拥有更多]]></description><category></category></item><item><title><![CDATA[FlatBuffers：flatc源码简析]]></title><link>https://blog.csdn.net/ZM_Yang/article/details/108408062</link><guid>https://blog.csdn.net/ZM_Yang/article/details/108408062</guid><author>ZM_Yang</author><pubDate>Fri, 04 Sep 2020 17:21:17 +0800</pubDate><description><![CDATA[在简单的编译器他也是编译器]]></description><category></category></item><item><title><![CDATA[使用Node.js+React+EUI快速搭建网页应用]]></title><link>https://blog.csdn.net/ZM_Yang/article/details/108205108</link><guid>https://blog.csdn.net/ZM_Yang/article/details/108205108</guid><author>ZM_Yang</author><pubDate>Mon, 24 Aug 2020 18:51:09 +0800</pubDate><description><![CDATA[别再犹豫了，看一篇文章学三个框架它不香么？]]></description><category></category></item><item><title><![CDATA[RPMsg：协议简介]]></title><link>https://blog.csdn.net/ZM_Yang/article/details/107453233</link><guid>https://blog.csdn.net/ZM_Yang/article/details/107453233</guid><author>ZM_Yang</author><pubDate>Sun, 19 Jul 2020 22:42:33 +0800</pubDate><description><![CDATA[两台计算机可以通过TCP/IP进行通信，那么同一颗芯片上的两个核心怎么通信呢？]]></description><category></category></item><item><title><![CDATA[布隆过滤器简介]]></title><link>https://blog.csdn.net/ZM_Yang/article/details/107394576</link><guid>https://blog.csdn.net/ZM_Yang/article/details/107394576</guid><author>ZM_Yang</author><pubDate>Thu, 16 Jul 2020 21:40:11 +0800</pubDate><description><![CDATA[其实就像老师上课点名，没回答的肯定逃课了；回答的有可能也逃课了。。。。。。]]></description><category></category></item><item><title><![CDATA[从《七里香》到GCC as汇编语言]]></title><link>https://blog.csdn.net/ZM_Yang/article/details/106455557</link><guid>https://blog.csdn.net/ZM_Yang/article/details/106455557</guid><author>ZM_Yang</author><pubDate>Sun, 31 May 2020 14:59:08 +0800</pubDate><description><![CDATA[行走江湖，不会点汇编怎么行？]]></description><category></category></item><item><title><![CDATA[Kibana插件开发之环境搭建]]></title><link>https://blog.csdn.net/ZM_Yang/article/details/106016800</link><guid>https://blog.csdn.net/ZM_Yang/article/details/106016800</guid><author>ZM_Yang</author><pubDate>Sat, 09 May 2020 13:11:38 +0800</pubDate><description><![CDATA[教你怎么一步步搭建Kibana插件开发环境]]></description><category></category></item><item><title><![CDATA[RPC原理与FastRPC实现]]></title><link>https://blog.csdn.net/ZM_Yang/article/details/105877452</link><guid>https://blog.csdn.net/ZM_Yang/article/details/105877452</guid><author>ZM_Yang</author><pubDate>Fri, 01 May 2020 14:37:43 +0800</pubDate><description><![CDATA[你到一家餐厅吃饭，店里有一个服务员为你服务。你点完菜之后，服务员就走进了后厨。但是，服务员并不是直接将你点的菜告诉他们店里的厨师，相反的，他打电话到别的店点了外卖，外卖到了之后他将饭菜重新装盘，然后给你端了上来。但是你是不知道这个细节的，在你看来，这次吃饭和以往的任何一次没有区别，服务员端上的饭菜在哪里做的你是不知道的，你和平常一样点了菜然后菜就上了，你并不需要自己去关心怎么找到外卖电话，怎么将饭菜装盘。你只管点菜和吃，除了可能等的时间比以往略久，没有任何区别。这个栗子中，服务员就扮演着RPC 中代理的角色]]></description><category></category></item><item><title><![CDATA[一只Python小爬虫的Linux定时任务之旅]]></title><link>https://blog.csdn.net/ZM_Yang/article/details/105776723</link><guid>https://blog.csdn.net/ZM_Yang/article/details/105776723</guid><author>ZM_Yang</author><pubDate>Sun, 26 Apr 2020 20:50:51 +0800</pubDate><description><![CDATA[戳进来，告诉你怎么在Linux上设置定时任务。]]></description><category></category></item><item><title><![CDATA[Docker，系统影分身之术]]></title><link>https://blog.csdn.net/ZM_Yang/article/details/105739299</link><guid>https://blog.csdn.net/ZM_Yang/article/details/105739299</guid><author>ZM_Yang</author><pubDate>Fri, 24 Apr 2020 20:38:26 +0800</pubDate><description><![CDATA[容器化其实就是一种虚拟化技术，与传统虚拟机相比，它有着轻量、独立、可伸缩、可移植以及灵活等特点。容器直接运行于内核之上，多个容器共用系统的内核，直接通过内核获取系统资源，用多少取多少；而虚拟机则通过一个管理程序来获取宿主系统的资源，运行在其上的程序有着自己的内核，就算你跑的是个`Hello World`，它也占用这很大一块资源。拿吃饭打个比方，容器是按点的菜收钱：你点多少菜付多少钱；虚拟机是按人头收钱，只要你人在那，就算你只喝了一口水也照样收你这么多钱。]]></description><category></category></item><item><title><![CDATA[使用Github+Markdown搭键自己的笔记本]]></title><link>https://blog.csdn.net/ZM_Yang/article/details/105617607</link><guid>https://blog.csdn.net/ZM_Yang/article/details/105617607</guid><author>ZM_Yang</author><pubDate>Sun, 19 Apr 2020 16:39:00 +0800</pubDate><description><![CDATA[Github优点显而易见，因为本身已经熟悉了Git的常规操作，上传下载轻而易举。并且由于它核心是Git，可以轻松实现备份，最多写个脚本就好了，毕竟是自己的专业。Github一份、Gitee一份、本地还可以有一份，万一哪天Github真把中国区锁了（毕竟这个魔幻的年份），Gitee还有。如果三份一起丢失，那就是命吧。
另外由于它基于Git，文档一路的变迁都有迹可寻，只要修改提交了，就不用担心后续手贱删除了什么东西。是要`.git`这个地基还在，我们就能重建家园。]]></description><category></category></item></channel></rss>