[原创]最优化/Optimization文章合集

最优化(Optimization)是应用数学的一个分支,它是研究在给定约束之下如何寻求某些因素(的量),以使某一(或某些)指标达到最优的一些学科的总称。我一直对最优化比较感兴趣,所以写过一些相关的笔记,可能有不正确的地方,但请学术派、技术流们多多包涵。

➤ 拟牛顿法/Quasi-Newton,DFP算法/Davidon-Fletcher-Powell,及BFGS算法/Broyden-Fletcher-Goldfarb-Shanno

➤ 最速下降法/steepest descent,牛顿法/newton,共轭方向法/conjugate direction,共轭梯度法/conjugate gradient 及其他

➤ Ridders求导算法

➤ 选主元的高斯-约当(Gauss-Jordan)消元法解线性方程组/求逆矩阵
文章来源:http://www.codelast.com/
➤ 关于 最优化/Optimization 的一些概念解释

➤ 最小二乘的理论依据

➤ Powell共轭方向集方法(Powell's Conjugate Direction Method)的实现
阅读更多

[原创]Raspberry Pi/树莓派 文章合集

注:带有 ♬♬♬♬♬ 标志的是文章合集。

Raspberry Pi是什么?
引用维基百科的一句话:

The Raspberry Pi is a credit card sized single-board computer developed in the UK by the Raspberry Pi Foundation with the intention of stimulating the teaching of basic computer science in schools.

简单地说,它就是一个基于ARM CPU的、信用卡那么大的迷你计算机。
下面是我在折腾Pi的过程中的一些记录,仅供参考。

➤ 树莓派视频教程

➤ Raspberry Pi(树莓派)配置记录/Configure the Arch Linux ARM on Raspberry Pi

➤ 在Raspberry Pi(树莓派)上用OpenCV来操纵摄像头拍照/Use OpenCV on Raspberry Pi to Controll a Webcam to Take Photos

➤ 通过Raspberry Pi(树莓派)的GPIO接口控制发光二极管/Control LED through the GPIO on Raspberry Pi

➤ 通过Raspberry Pi(树莓派)的GPIO接口控制步进电机/Control stepper motor through the GPIO on Raspberry Pi
阅读更多

[原创]Apache Pig中文教程合集

Apache Pig是用来处理大规模数据的高级查询语言,配合Hadoop使用,可以在处理海量数据时达到事半功倍的效果,比使用Java,C++等语言编写大规模数据处理程序的难度要小N倍,实现同样的效果的代码量也小N倍。

我根据自己在工作中的学习和总结,写了如下一些Apache Pig中文教程,供大家参考。
文章来源:http://www.codelast.com/
➤  Apache Pig的一些基础概念及用法总结(1)

➤  Apache Pig的一些基础概念及用法总结(2)

➤  Apache Pig中文教程(进阶)
阅读更多

[原创] 推荐一款编写数学公式的国产神器:AxMath,可与LATEX双向转换

latex

我一直都很佩服那些可以直接用LATEX语法打出各种复杂数学公式的人,反正我是记不住,而且也真的不想去记LATEX语法。
比如这个公式:
cauchy's inequality

有的人能直接用LATEX手写出来:
\left( \sum_{i=1}^n{a_ib_i} \right) ^2\leqslant \left( \sum_{i=1}^n{a_{i}^{2}} \right) \left( \sum_{i=1}^n{b_{i}^{2}} \right) , a_i,b_i\in \mathbb{R}
这还算简单的了,更复杂的公式大神们都可以直接手写LATEX。
就问你服不服。
在下自愧脑容量不足。
所以当我要输入数学公式的时候,MathType这个功能强大的可视化数学公式编辑器就是我认为最方便易用的软件。
阅读更多

[原创] selenium-java的wait.until(ExpectedConditions)编译出错问题

代码示例:

wait.until(ExpectedConditions.alertIsPresent());
Alert alert = driver.switchTo().alert();
alert.accept();

在升级了pom.xml中的selenium-java版本到3.141.59后,代码编译出错了(挂在第一行),错误信息:

无法将类 org.openqa.selenium.support.ui.FluentWait<T>中的方法 until应用到给定类型;
[ERROR]   需要: java.util.function.Function<? super org.openqa.selenium.WebDriver,V>
[ERROR]   找到: org.openqa.selenium.support.ui.ExpectedCondition<org.openqa.selenium.Alert>
[ERROR]   原因: 无法推断类型变量 V
[ERROR]     (参数不匹配; org.openqa.selenium.support.ui.ExpectedCondition<org.openqa.selenium.Alert>无法转换为java.util.function.Function<? super org.openqa.selenium.WebDriver,V>)

[原创] 使用 fastText 做中文文本分类(5)

查看本系列文章合集,请看这里

前面说的模型训练、预测过程,是用 fastText 可执行程序完成的。fastText提供了Python的接口,同样的功能也可以用Python实现。如果数据量比较小,单机做文本分类没啥问题。但我的数据量比较大,几十G的文本数据,单机加载模型、预测分类太耗资源了,而且速度慢。
并行这种事嘛,交给Map-Reduce job来做是最合适不过了,不过,要在Hadoop集群上安装fastText的Python包是不可能的,所以我只能找一下,fastText的模型怎么用Java加载,从而在M-R job中并行地去做预测。
阅读更多

[原创] 使用 fastText 做中文文本分类(4)

查看本系列文章合集,请看这里

 开始训练第一个文本分类模型
标注好的数据,其格式为:

__label__科技 月 10 日 网通 社从 高合 汽车 获悉 华人 运通 微软 2020 世界 人工智能 大会 云端 峰会 WAIC 2020 上 达成 战略 合作 依托 微软 小冰 人工智能 技术 高合 汽车 上 落地 全球 首个 主动式 人工智能 伙伴 HiPhiGo 用户 提供 更好 交通 出行 体验 人工智能 交通 行业 创新 融合 发展 探讨 成立 联合 智能 计算 实验室 智能 汽车 载体 智捷 交通 多个 领域 展开 深度 合作 人工智能 前瞻 技术 研发 推动 智慧 出行 社会 持续 发展 微软 亚洲 互联网 工程院 院长 王永东 微软 华人 运通 合作 使 人工智能 技术 切实可行 落地 场景 得以 转化 真实有效 生产力 发挥 更大 价值 微软 华人 运通 携手 推进 人工智能 新兴 科技 汽车 智慧 智慧 出行 领域 广泛应用 产业 升级 社会 持续 发展 注入 新 活力 华人 运通 董事长 丁磊 此次 合作 顶级 人工智能 企业 智能 汽车 公司 强强 联手 AI 多项 领先 技术 全球 汽车行业 首次 量产 落地 世界 内 技术 领先 性 首款 智能 汽车 高合 HiPhi 有条不紊 推进 全球 首条 车路 协同 自动 驾驶 智能化 城市道路 示范 项目 盐城 开通 试运行 再 全球 首个 车路 城 一体化 5G 无人驾驶 交通 运营 样板 上海 张江 未来 公园 成功 落地 华人 运通 以人为本 人性化 需求 出发 人性化 智慧 打造 智能 汽车 智捷 交通 智慧 城市 三智 战略 各项 业务 稳步 推进 高合 首款 量产 车 HiPhi 2020 年底 小批量 试生产 2021 年 上市 交付

按 fastText 的指南,把这份数据按大概 9:1 的比例,分成training集和validation集,然后开始训练模型:

./fasttext supervised -input labeled-data_train -output model

其中,labeled-data_train 是training集文件,model 是输出模型的文件名前缀。
经过一段时间的等待(速度很快),当前目录下就生成了模型文件:model.binmodel.vec
阅读更多

[原创] 使用 fastText 做中文文本分类(3)

查看本系列文章合集,请看这里

为 training 数据做标注,这可能是一个艰巨的任务,也可能是一个有捷径的任务。
有时候,我们可以依据一些已知的规则来标注文本,比如不同的数据是从不同的来源获取到的,从来源可以知道它们所属的类别,这是一个捷径。不过我这里不具备这样的条件。
我的数据来源是网上的各种新闻,不是某些专业领域的数据,这种比较常见的文本分类任务,可以利用国内的几大云服务商提供的免费接口来完成。阿里云、腾讯云都有这样的接口。
以腾讯云为例,其“人工智能→自然语言处理”产品提供了文本分类功能:

文本分类接口能够对用户输入的文本进行自动分类,将其映射到具体的类目上,用户只需要提供待分类的文本,而无需关注具体实现。
该功能基于千亿级大规模互联网语料和LSTM、BERT等深度神经网络模型进行训练,并持续迭代更新,以保证效果不断提升。
目前已提供:
● 通用领域分类体系,包括15个分类类目,分别是汽车、科技、健康、体育、旅行、教育、职业、文化、军事、房产、娱乐、女性、奥运、财经以及其他,适用于通用的场景。
● 新闻领域分类体系,包括37个一级分类类目,285个二级分类(详细请见 类目体系映射表),已应用于腾讯新闻的文章分类。
更多垂直领域的分类体系即将推出,敬请期待。
默认接口请求频率限制:20次/秒。
该API每天有50万次免费调用额度,用来标注数据够用了:
tencent cloud nlp free resource
如果你对这个接口的分类结果准确性有疑虑的话,可以亲自拿一些新闻的文本试一试,就会发现它的效果真的不错,完全可以用来当作人工标注的结果了,毕竟是大厂出品嘛。
阅读更多

[原创] 使用 fastText 做中文文本分类(2)

查看本系列文章合集,请看这里

做好文本预处理,才能输入fastText训练一个效果好的模型出来。

 原文示例
有时我们拿到的源数据是很粗糙的,带有很多会影响模型效果的内容,例如下面这样:

<p>罗望子,是豆科酸豆属唯一的种,是热带乔木,原产于东部非洲,包括马达加斯加落叶森林,但已被引入热带亚洲、拉丁美洲和加勒比海。柽柳是中国海南省三亚的一种城市树木。罗望子最适合生长在温度高、日照长、气候干燥、干湿季节分明的地区。</p><p><img src="http://p0.qhimg.com/t014b83dc78c7cc5000.jpg?size=741x320"/><br /></p><p>罗望子富含糖、乙酸、酒石酸、甲酸、柠檬酸等成分,主要用于调味品、饮料、果酱等食品领域。吃一点罗望子有很多好处。当我们吃罗望子时,罗望子中含有的多糖是一种非常好的抗光物质。当我们吃这种物质时,它可以防止紫外线辐射伤害皮肤。通常吃一点罗望子,饭前吃一点罗望子可以增进食欲,改善我们的饮食质量。在炎热的夏日,吃一点罗望子可以生津止渴,清热解毒,降低中暑的风险。</p><p><img src="http://p1.qhimg.com/t01ecdbbc26c329a78b.jpg?size=533x409"/><br /></p><p>罗望子种子含有丰富的抗氧化物质。多吃罗望子籽可以延缓人体衰老,保持皮肤湿润有光泽。罗望子种子还含有一些清热解毒、消炎的物质,可以帮助我们的人体抵抗一些有害细菌,保护我们的健康。

这里面不仅带有URL、大量的HTML标签,而且还有标点符号等,这些都要清洗掉。
阅读更多

[原创] 使用 fastText 做中文文本分类(1)

查看本系列文章合集,请看这里

 什么是“文本分类”

它是图书馆学, 信息学和计算机科学中的一个问题。其任务是将一个文档分配到一个或者多个类别中。

举例:

文本 类别
瑞幸咖啡今日发布声明称,瑞幸咖啡公司将于6月29日在纳斯达克停牌,并进行退市备案。声明表示,在国内消费市场方面,瑞幸咖啡全国4000多家门店将正常运营,近3万名员工仍将一如既往的为用户提供优质产品和服务。公司衷心感谢广大消费者的支持厚爱,并再次为事件造成的恶劣影响向社会各界诚挚道歉。 财经
明朝中后期西南沿海一个重要的问题就是倭寇的骚扰,这个问题本来是有希望被当时的浙江总督用和平的方法解决掉的,但是中途就出了个王本固这个插曲。 历史

其中,“类别”是事先定义好的。一段文本可以属于多个类别,例如,第2个例子可以同时属于“历史”和“明朝”这两个类别。
阅读更多

[原创] Hadoop 2.6.x 下Distributed Cache的用法

仔细记录一下Java的Map-Reduce job使用distributed cache的方法,毕竟以前一直都是copy paste ~

 适用的Hadoop版本
CDH 5.8.0(Hadoop 2.6.0)
别的版本没有测试过,但后面相近的版本应该也能用。

 准备工作:上传本地文件到HDFS
为了在Java代码中把一个文件加入 distributed cache,需要先把它上传到HDFS,之后应使用 HDFS 路径来加入 distributed cache。
假设要加入 distributed cache 的文件为 file.txt:

hadoop fs -put file.txt /your/hdfs/dir/

阅读更多

[原创] 调戏了一番度娘"最先进"的PLATO-2预训练模型之后,我还是回到了和人类交谈...

plato-2 network arch
(莫慌,这图是拿出来撑场面的,我可能和你一样看不懂)

前言:这是一篇很不严肃的实验文章。每一个会修电脑的人,都可以很容易地照着本文的描述,自己去操作一遍。

大概一周前,百度不是发布了一个“取得重要进展”的对话生成网络 PLATO-2 吗?我当时一看到那消息,精神就来了,为什么?这得先从解释一下“这玩意是干什么用的”说起——毕竟,这篇文章要让每一个群众都能看得懂,大家好才是真的好。

近日,百度发布对话生成网络 PLATO-2,宣布在开放域对话生成模型上迎来重要进展。PLATO-2 承袭 PLATO 隐变量进行回复多样化生成特性,模型参数高达 16 亿,涵盖中英文版本,可就开放域话题深度畅聊。实验结果显示,PLATO-2 中英文对话效果已超越谷歌 Meena、微软小冰和 Facebook Blender 等先进模型。

咳咳,这些专业术语说的是什么鬼?
如果你完全看不明白这段话,只需要知道:它说的是和NLP(自然语言处理,一门机器学习的分支学科)相关的一些东西。
可能有的人只听说过这段话里提到的“微软小冰”——她的主要功能就是一个【聊天机器人】,和小米的“小爱同学”颇为相似。
“小爱同学,帮我把空调打开!” “好的,开啦!”
——相信这样的场景,早已飞入我国千千万万寻常百姓家。
所以,百度发布的这个 PLATO-2,它可以用来做“小爱同学”的大脑,也就是最核心的那一块功能。不过现实中的“小爱同学”远比这个复杂,在这里只是做一个比喻而已。
阅读更多

[原创] PHP 7.0 升级到 7.3

✔ 为什么要升级PHP版本
就是这么逗逼,从PHP 5.4升级到7.0之后,WordPress又升了几次版本,让PHP 7.0又成了明日黄花(不是“昨日黄花”啊同志们,成语要用对),虽然7.0还能用,但是每次进WordPress后台看到的“PHP版本太旧”的提示很碍眼,于是我下定决心要把它升级到当前最主流的 7.3 版——本文写作之时,是2020年7月。
以下步骤只适用于CentOS 7系统(具体子版本不确定能支持到什么范围)。
 
 怎样升级PHP版本最方便
这回我就没有那么幸运了,虽然还是可以用yum来安装PHP相关的package,但是安装好之后有很多问题导致不能用,折腾了好些时间才搞定。作为一个平常工作中完全不用PHP的人,我太难了。
阅读更多

[原创] PHP 5.4 升级到 7.0

 为什么要升级PHP版本
WordPress版本升级,已经不支持5.4了,必须要升到7.x,就这一条理由就不得不面对现实。再说了,PHP 5.4是多么老旧的上古化石版本啊!
以下步骤只适用于CentOS 7系统(具体子版本不确定能支持到什么范围)。


 怎样升级PHP版本最方便
对我来说,原来的PHP是通过yum install安装的,因此,如果能通过yum来把旧版升级到新版,是最方便的了。源码编译什么的,那得多烦啊!
阅读更多

[原创] PyTorch做inference/prediction的时候如何使用GPU

话不多说,直接进入主题。

判断能不能使用GPU
可能有多种原因会导致不能使用GPU,比如PyTorch安装的是CPU版的,显卡驱动没有正确安装等。下面的 if 语句在正常的情况下会返回 True:

if torch.cuda.is_available():
    print('PyTorch can use GPU on current machine!')

文章来源:https://www.codelast.com/
 设置模型使用GPU

model = MyModel(*args, **kwargs)
model.load_state_dict(torch.load(your_model_file_path))
model.eval()  # 设置成evaluation模式
if torch.cuda.is_available():
    print('PyTorch can use GPU on current machine!')
    device = torch.device("cuda")
    model.to(device)

your_model_file_path 是模型文件的路径。
阅读更多