跳到主要内容

《我和 LabVIEW》更新总结

· 阅读需 7 分钟

大约去年这个时候,我把《我和 LabVIEW》这本书做成电子书发布在了网站上。当时已经计划每年会做一些更新,今天回顾了一下这一年来的改动,实际上改进的内容比我预估的还更多一些。

刚开始做准备的时候,我担心我的 LabVIEW 编程技术已经忘光了,也担心这十年来 LabVIEW 变化太大,打开之后都不认识了。但后来发现,我开始的预计都有些太悲观了。我的编程技术确实退化了,但基本的方法都还记得,恢复的很快;LabVIEW 也并没有太大变化,基本操作几乎一模一样。

变化比较大的是网上的中文资料。10 年前网上关于 LabVIEW 的中文资料少得可怜。但现在,无论哪一方面都能搜到一大堆资料,而且很多资料的质量也是相当高的。这些年也有不少关于 LabVIEW 的中文书籍出版,网上评价也不错。如果我在国内的话,肯定当时就买来看看了,不过现在人在国外考虑到运费,嗯,还是等下回回国再说吧。

再有,就是近几年视频逐步崛起,成了网上最重要的知识分享方式。但是考虑到我个人还是会继续以文字加图片的方式分享自己的编程经验。这主要是因为视频制作要花费更多的精力,如果我有时间,还是倾向于增添更多的内容。另外,就是我分享的很多东西也不是太成熟的,发布后还会经常改来改去。文字改起来非常容易,视频要改其中部分内容就麻烦多了。

在搜索 LabVIEW 中文内容的过程中,我还特意尝试用了很多国内的搜索引擎,结果大失所望。百度是国内市场占有率最大的搜索引擎了,先不说它垃圾广告的问题,单说搜索质量也是十分差劲。搜索一些技术内容,返回的常常都是灌水文,最后只能换回 Google。

相比起写纸质书,我还是更喜欢这种类似博客的电子书发布方式的。最主要的原因是可以及时和读者交流。从读者的反馈和问题可以直接了解到自己那里写的不清楚,甚至写错了,然后可以及时纠正。除了读者留言,我还使用了网站统计工具来查看这本书被阅读的情况,工具可能并不精确,但大致可以反应读者的分布。

首先让我觉得比较吃惊的是,这本书最大的流量来源是 Google,尽管在国内无法直接访问 Google。这一说明了搜索引擎对一个网站的流量作用极大,可惜的是,国内的一众搜索引擎都不能搜索我的网站,可能是歧视我没钱买关键词吧。唯一一个我发现能搜索我的网站的国产搜索引擎是 https://fsoufsou.com/ 。也试了一下用这个网站搜索技术文章,比百度的结果好太多了。可惜它的用户量太少,几乎可以忽略不计。希望这个搜索引擎能继续坚持做下去。

除了 Google,比较多的来源网站是知乎和微信。知乎上网友的推荐贴给本书带来了不少流量。微信的对话和群都是封闭的,而我又不在任何群里,就无法得知网友们都在讨论啥了。

再有就是发现绝大多数读者关注的还是基础内容,而不是 LabVIEW 一些高级用法。除首页外,访问量前五的章节是《数值和布尔数据》,《Hello World 程序》,《图形化显示数据》,《什么是 LabVIEW》,《数组和循环》。除首页外,Google 点击页面的前五分别是:《图形化显示数据》,《界面设计实例》,《什么是 LabVIEW》,《安装 LabVIEW》,《事件结构和程序界面》。深入一些的内容比如性能优化,面向对象等访问量比起基础内容零头都不到。我想想也是有道理的,那些比较高级的用法,可能并不是看看书就会用的,最好还是要有交流,有个专门的人来指导一下。相反写书的话更适合介绍一些基础知识。所以我也调整了自己的更新维护计划。今年上半年的时候,我重写了整个面向对象一章,也是为了让零基础读者能更容易理解。后来,就把主要时间用来从头更新那些基础章节了。

查看或添加留言

AI 的梦境 1 - 绘画流派

· 阅读需 1 分钟

我喜欢让 AI 自由发挥,胡乱画一些东西,画一些现实中不存在的,甚至完全没有的东西。当然,大多数这类画作都是模糊一团,但也有一些挺有意思的。我把他们大致归类了一下,贴出来。

这个帖子里的画作都还不算太远离真实世界。它们看上去更像是某种艺术流派的作品,我对绘画艺术一窍不通,都不知道有哪些流派,只是感觉这些 AI 画作类似某些艺术作品。

我很喜欢这个创意,把头发和烟雾融合在了一起:

降临派:

查看或添加留言

查理十世

· 阅读需 2 分钟

旅法学者赵越胜对兰西国王查理十世的一段评价:

我们在历史中见过不少领导人,他的知识结构、文化水平、政治判断力和价值选择,会停留在青少年时期的某一阶段。然后不管他活多久,也不管世上发生多少变化,他都表现为某一时刻的僵尸。如果有某个机缘,让他登上大位,他一定会从他智力、知识发展过程中停止的那个时刻去寻找资源,构造他的政治理念、价值选择和治国方略。这种人的性格一般都执拗、偏执,并且愚蠢地自信,愚而自用,以为他捍卫了某种价值,能开辟国家发展的新方向。其实,他们往往穿着古代的戏装,却在现代舞台上表演,像坟墓中的幽灵突然出现在光天化日之下,人人都知道他是幽灵,他却以为自己是真神。但是,他选择的理念,推行的政策,无一不是发霉的旧货。

查看或添加留言

AI 生成的一些图片

· 阅读需 4 分钟

最近,我在个人电脑上尝试运行了 Stable Diffusion 模型,生成了一些有趣的 AI 图片。

与 Dall.E 等大模型相比,Stable Diffusion 的模型体积相对较小,因此能够在配置不高的个人电脑上运行。即便如此,我的电脑也仅能生成 512x512 分辨率的图像。虽然这些作品在效果上可能无法与专业级大模型媲美,但其中一些已经展现出惊人的逼真度。我前一段时间的实验主要集中在生成写实风格人像,以及探索其与“二次元”动漫风格人像之间的相互转换。值得一提的是,目前 Stable Diffusion 模型在直接生成高度逼真的人像方面尚有不足,需要配合 GFPGAN 模型对程序生成的人像进行优化。在人像生成的过程中,我个人感觉该模型似乎更擅长创作白人年轻女性的图像。我也尝试生成了一些中国人的面孔,但效果往往不尽如人意,多数图像显得有些不自然。这或许是因为模型的训练数据集中包含了更多白人年轻女性的样本,也可能是我作为在中国长大的人,对中国人的面貌特征更为熟悉和敏感,更容易察觉到细微的差异。

首先,展示两张由 AI 生成的仿旧风格照片,其逼真程度令人印象深刻:

接下来几组图片,都是首先生成了左边的真实照片风格的图片,再根据照片转换成了右边二次元图片:

真实照片风格二次元风格

下面这两组图片是先生成的左边的二次元风格图片,再根据它生成右侧的真实照片风格图片:

二次元风格真实照片风格

可以明显感觉到,生成真实照片要困难很多。可能是因为人脑对所谓“真实”照片更挑剔吧。

下面两组是风景图片,感觉两种风格生成出来的图片区别远没有人像的区别那么大

二次元风格真实照片风格
查看或添加留言

权力的毒瘾

· 阅读需 3 分钟

于是废先王之道,燔百家之言,以愚黔首;隳名城,杀豪俊,收天下之兵,聚之咸阳,销锋铸鐻,以为金人十二,以弱天下之民。然后践华为城,因河为池,据亿丈之城,临不测之渊以为固。良将劲弩,守要害之处;信臣精卒,陈利兵而谁何!天下已定,始皇之心,自以为关中之固,金城千里,子孙帝王万世之业也。

秦二世而亡的时候,大家就意识到了,始皇帝这套制度不那么灵验。本来计划是千秋万代的,结果却是断子绝孙。但是,之后的两千年里,各朝各代的君王们还是不由自主的采用了秦制。这在中国接触到西方现代文明之前,也还可以理解:秦制就算不好,也没见过更好的制度啊。没办法,只能拿它来修修补补继续用吧。修补妥当,可以有两百来年国运;修补不好,可能比秦朝还短。

两百年前,中国人终于开始意识到世界上还有其他文明的存在,甚至还有更好的政治制度。然而,这之后的领袖们依然还是摆脱不了秦始皇的魔咒,处心积虑就是想登基。有人在野的时候,说起民主自由来,比唱的还好听。一旦掌权,焚书坑儒、专制独裁有过之而无不及。我不禁想起了宋美龄评价政敌的一句话:“他们还没有尝过权力的滋味”。这么看起来,权力和毒品倒是挺像的,即便是原本有美好理想和追求的青年,一旦尝过了无上的权利,这世间其它的一切都立刻就变得索然无味了。唯一能安抚内心躁动的,就只有更大剂量的权力。

查看或添加留言

《独行月球》

· 阅读需 5 分钟

最近一段时间忙于工作,鲜有闲暇光顾影院。今日得空,便补上了这部早有耳闻的《独行月球》。观影之后,心情颇为复杂,影片整体表现平平,并未达到我的预期。不过,我发现了一个有趣的巧合:跟影片中的男主角一样,我的保险也是在齐齐哈尔上的。

提到沈腾和马丽这对喜剧搭档,他们的巅峰之作无疑是《夏洛特烦恼》。据说,在将其搬上大银幕之前,他们已经在话剧舞台上倾情演绎过无数次,对每一个细节都进行了精雕细琢,力求达到完美。或许正是因为倾注了如此巨大的心血,他们似乎很难再有动力在另一部作品中投入同样的精力。相比之下,《独行月球》在喜剧效果上就显得逊色不少,笑点较为平淡,难以引起观众的共鸣。

在我看来,《独行月球》的失利,部分原因在于其故事背景的设定。幽默的产生往往需要贴近大众的生活,引发观众的共情。而将故事的主场景设置在遥远的月球上,本身就与普通观众的生活经验相去甚远,难以产生强烈的代入感。更何况,影片还将主角与其他人为地分隔开来,使其长时间处于孤立无援的状态,这进一步削弱了喜剧的感染力。此外,马丽在片中饰演的是一位冷静严肃的指挥官,这一角色设定也限制了她喜剧天赋的发挥,几乎没有任何可以展现幽默的余地。

影片结尾高潮部分的“炸小行星”情节更是让我感到失望。在许多电影中,我们都能看到类似的桥段:一旦涉及到关键的炸药包,就必然无法通过远程遥控引爆,而必须由主角或配角亲赴险境,手动引爆。我最早接触到这类情节还是在《董存瑞》的故事里,初次接触时确实深受震撼,感动不已。然而,再经典的情节,重复使用也会让观众产生审美疲劳。同样的“炸”小行星,早在几十年前的好莱坞大片中就屡见不鲜,之后的电影更是变本加厉,从炸地心、炸外星飞船,到炸火山、炸月亮……类似的桥段层出不穷,令人审美疲劳。为什么还要继续使用如此老套的梗呢?这不仅显得缺乏创意,也难以给观众带来新鲜感。

总而言之,《独行月球》作为一部喜剧片,其喜剧效果并不尽如人意;作为一部科幻片,其科幻设定和情节也缺乏新意。影片虽然在特效制作上有所投入,但却未能掩盖其在剧本和创意上的不足。或许,对于沈腾和马丽这对深受观众喜爱的黄金搭档而言,与其一味追求大场面,不如回归本真,选择更贴近生活、能触动观众内心的故事,让幽默与情感更加自然地融入影片中。

查看或添加留言

训练一个黑白棋模型

· 阅读需 7 分钟

之前用 LabVIEW 编写了一个黑白棋程序,作为学习 XControl 的示例。那个程序基本完整,但是缺少一个 AI 自动走子的功能。最近抽空尝试训练了一个网络模型,添加到了演示程序中。

所有AI下棋的思路都是非常类似的:根据当前的盘面,给每个可以落子的位置打分,选取分数最高的那个走法。这里的关键就是设计一个最为合理的打分算法。

黑白棋最终判定胜负的标准是看谁的子多,所以最符合直觉的打分方法是:在一个位置落子后,把己方的棋子数目作为这个位置的分数。这个算法有个缺陷,就是当前棋子数最多的走法不见得就能保证将来也棋子数最多。

解决这个缺陷的思路有两条:其一是,不要为当前这一步打分,而是向后预测几步。比如,把双方各下三步棋(也就是总够六步)后的所有可能出现的局面都列出来,然后看那个局面得分最高。考虑的步数越深,棋力也就越高,极端情况,如果预测的足够深,甚至可以找到必胜的下法。这个方法的缺点是预算量非常高,增加预测的深度,计算量会指数级增加。可以通过剪枝做一些优化,但效果有限。

第二条思路是采用更复杂的打分算法,如果只考虑棋子数量还不够好,那么就也同时考虑落子的位置,稳定的棋子的个数,周围空间的个数等等。在这众多的因素中哪些更重要,如何分配权重,对于我这种非专业棋手来说是很难做选择的。不过这部分可以利用机器学习算法,让电脑自己找到最优解。

当然以上两条思路可以结合使用:先找到一个最优的打分算法,再尽量预测到更深的步数。

我尝试训练了一个基于神经网路的打分模型。

我采用的是一个只有一层隐藏层,64节点的全链接神经网络。单隐藏层64节点的神经网络对于解决黑白棋来说,有点太小了。我也不能确定多大才合适,但估计至少也应该采用一个七八层的CNN,才能达到不错的效果。不过,我的目标不是最好的效果,而是只要试验一下可行性。并且,我需要把训练好的模型移植到 LabVIEW 代码上,复杂模型移植起来太麻烦。所以我选择了这个最简单的模型。

模型的输入数据是当前棋盘状态(每个位置棋子的颜色)和一个准备落子的位置,模型输出一个实数表示得分。

训练模型的大致思路是:让模型分别持黑子和白子,自己跟自己下棋,并且记录下每一步的走法。最终胜利一方所有走过的位置都获得正标签,失败一方所有走过的位置都是负标签。用这些标签训练模型,然后重复以上过程。

在训练模型的过程中,我遇到了一些以前从未考虑过的问题。比如,采用何种激活函数。我开始采用的 ReLU 函数,但模型始终无法被训练到预期效果。调试后发现,是 ReLU 的神经元坏死造成的。ReLU 在输入值小于零时,梯度永远为0,这个神经元很可能再也不会被任何数据激活了。这对于目前常见的有着几万乃至几百亿节点的大规模模型来说,根本不是问题。但是对于一个本来就没几个节点的小型模型来说,损失神经元是非常致命的。我把激活函数换成 Sigmoid 之后,效果就好了很多。

我训练模型的方法效率非常低下。在下棋过程中,大多数的步骤可能都不是太重要,不论走这还是走那,对最终结果影响都不大。关键的就那么少数几步,可以决定输赢。但是在训练时候,我也不知道每一步的权重应该有多大,只能假设所有步数都是一样的权重。那些垃圾步不但占用资源,也会影响训练结果。

模型训练好之后,我把它移植到了之前编写好的 LabVIEW 黑白棋 VI 中。棋力算不上很好,但至少是明显优于随机落子。等我空闲的时候,看看还能不能进一步优化下。

程序在: https://github.com/ruanqizhen/labview_book/tree/main/code/%E7%95%8C%E9%9D%A2%E8%AE%BE%E8%AE%A1/Xcontrol/Othello

查看或添加留言