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

转载请注明出处:https://www.codelast.com/

最优化(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)的实现Read More

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

转载请注明出处:https://www.codelast.com/

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

➤ 在树莓派上使用腾达(Tenda)W311MI迷你无线USB网卡(RT5370芯片)/Using Tenda W311MI mini wireless USB adapter(base on RT5370 chipset) on Raspberry Pi
文章来源:https://www.codelast.com/
➤ 制作一个简单的树莓派亚克力机箱(盒子)/Make a simple acrylic case for Raspberry Pi

➤ 树莓派杂谈/Some casual thoughts about Raspberry Pi

➤ 让树莓派自动上报IP地址到邮箱/Let Raspberry Pi to report its IP address via Email

➤ 在Raspberry Pi(树莓派)上调用V4L2来操纵摄像头拍照/Use V4L2 on Raspberry Pi to Controll a Webcam to Grab Images

➤ 基于微信和Raspberry Pi的远程监控系统/A Remote Monitoring System Based on WeChat & Raspberry Pi

➤ 树莓派出现在科技美剧《Mr.Read More

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

转载必须注明出处:http://www.codelast.com/

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

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

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

➤  Apache Pig中文教程(进阶)Read More

[原创] 如何查看一个Python进程在"干什么": py-spy 来帮忙

转载需注明出处:https://www.codelast.com/

如果你觉得一个运行中的Python程序有问题,例如它的耗时比你预想的要长很多,那么你可能会想知道它到底在“干什么”,有很多方法可以实现这个目的,但是很多都是需要修改Python代码来配合的,这显然是让人最不爽的方式。
而 py-spy 这个工具提供了一种无侵入的方式来达成这个目的:

py-spy是Python程序的采样分析器。 它使你可以直观地看到Python程序花费的时间,而无需重新启动程序或以任何方式修改代码。 py-spy的开销非常低:为了提高速度,它是用Rust编写的,并且它与被分析的Python程序不在同一进程中运行。 这意味着py-spy可以安全地用于生产环境的Python代码。

Read More

[原创] IntelliJ推出的语法检查插件Grazie,没有现实意义

转载需注明出处:https://www.codelast.com/

今天看到一篇推送的技术文章,说IntelliJ推出了一个语法检查插件Grazie,但它不是用于检查面向编译器的语法,而是用于检查面向人类的语法,比如引号里的字符串、注释语句里的语法,等等。我认为在当前的环境下,它没有意义——除非在一个有着严格要求(或者非常自律)的团队里,否则这种功能只能用来“折腾自己”,而不可能改善大家整体的代码状况。… Read More

[原创] 不要畏惧困难,提笔写作

转载需注明出处:https://www.codelast.com/

首先我得承认,我原来打算写的很多技术方面的“系列文章”,在写了若干篇之后就没有后文了,一方面是因为忙于工作和生活(毕竟不是富裕人家),另一方面也是由于总觉得没有积累到一定程度,还不能准确地把想要写的东西表达出来。这我得检讨。

“我要写的这些,是不是太简单了?写出来会不会显得太low?”
“我要写的这个,我不确定对不对,写出来误导别人怎么办?被人取笑怎么办?”
“我这篇文章会不会太短了?就这么点东西好意思发出来吗?”

带着这些想法,我又成功地毙掉了我准备下笔的一个决定。… Read More

[原创] 小心PyCharm的import带来的unresolved reference误导

转载需注明出处:https://www.codelast.com/

有时候你可能会遇到这样的故事:git clone一个Python的GitHub项目下来,配置好了对应的Anaconda环境,安装好了依赖的package,用PyCharm打开了项目,打开一个.py代码文件,发现PyCharm在文件开头几行就给标注了波浪线,提示unresolved reference XXX。而且,尽管PyCharm提示有错,你却可以运行代码。
“我完全就是按项目要求的版本装的各种依赖包,怎么会找不到这个定义?”你心里可能会很不爽。
这个时候,你要看清楚了,有可能是PyCharm给了你误导,其实你什么都做对了,只是PyCharm显示错了而已。… Read More

[原创] 伯克利人工智能研究所的开源[强化学习框架] rlpyt,让人眼前一亮

转载需注明出处:https://www.codelast.com/

BAIR(Berkeley Artificial Intelligence Research,伯克利人工智能研究所),开源了一个强化学习(RL)框架 rlpyt,并于2019.09.24在其主页上对它进行了很长篇幅的介绍(论文在这里)。
市面上开源强化学习框架已经很多了,这个框架是否值得你上车?我认为,未来怎样不好说,但至少现在(2019.10)看来是值得入手的,因为它确实有其他框架不具备/不完善的功能——最主要的就是对并行(parallelism)的良好支持。
在强化学习领域,agent与environment互动来收集training data的过程是最耗时的,如果能并行地用多个agent与多个environment互动来收集数据,那么速度可以极大提升。类似于Google Dopamine这样的RL框架,根本没有把 parallelism 作为设计理念的一部分,所以如果你入了Dopamine的坑,等你对模型训练速度有要求的时候再想着换框架,成本就高多了。… Read More

[原创] 关于Google的开源强化学习框架Dopamine,不建议上车

转载需注明出处:https://www.codelast.com/

Dopamine是Google在2018年8月的时候发布的强化学习开源框架,2019年2月的时候又发布了2.0版,由于是Google出品,因此会吸引比较多的关注,很多人会想去用它。但这个产品在目前(2019.10)值不值得用?就我目前的观察来看,不建议上车,原因如下。… Read More

[原创] 强化学习里的 on-policy 和 off-policy 的区别

转载需注明出处:https://www.codelast.com/

强化学习(Reinforcement Learning,简称RL)是机器学习的一个领域,刚接触的时候,大多数人可能会被它的应用领域领域所吸引,觉得非常有意思,比如用来训练AI玩游戏,用来让机器人学会做某些事情,等等,但是当你越往里看,就会发现跟传统机器学习相比,RL里面的名词简直太多了吧!多到完全可以绕晕人。比如RL里经常会提到的agent,environment,episode(rollout),policy,on-policy,off-policy,state,trajectory,reward,replay buffer,model-based,model-free,MD,TD,PG,AC,等等。强化学习的高手对这些词很熟悉,但对新手来说可能就很痛苦。
在RL领域,on-policy和off-policy是两个非常重要的概念,这两个词,把RL方法分成了两个类别。你可以从网上搜到很多很人提问on-policy的强化学习方法和off-policy的强化学习方法有什么区别,作为一个智商相当平庸的人,鬼知道我当初看了多少教程才认为自己大概搞清楚了它们之间的区别。
所以我在这篇文章里想把自己的肤浅理解分享出来,希望能帮助到少部分人。… Read More

[原创] 怎么理解DDPG(Deep Deterministic Policy Gradient)里的Deterministic

转载需注明出处:https://www.codelast.com/

DDPG(Deep Deterministic Policy Gradient,深度确定性策略梯度)是强化学习领域的一种知名算法。
如何理解其中的Deterministic(确定性)这个名词?
通俗地说,对一个状态(state)来说,根据这个state所采取的action有可能是带有随机性的。在两次与environment交互的时候,即使是一模一样的state,所采取的action也有可能不同,这就不是一种“确定性”的策略。
对一种“确定性”的策略来说,只要state相同,它给出的action必然相同。… Read More

[原创] 如何取出 tf.layers.dense 定义的全连接层的weight和bias参数值

转载需注明出处:https://www.codelast.com/

TensorFlow版本:1.14.0
Python版本:3.6.8

在TensorFlow中,tf.layers.dense 定义了一个全连接层,其实现的是(来自官方文档):

This layer implements the operation: outputs = activation(inputs * kernel + bias) Where activation is the activation function passed as the activation argument (if not None), kernel is a weights matrix created by the layer, and bias is a bias vector created by the layer (only if use_bias is True).

Read More

[原创] 如何打印出TensorFlow保存的checkpoint里的参数名

转载需注明出处:https://www.codelast.com/

TensorFlow版本:1.14.0
Python版本:3.6.8

checkpoint文件是TensorFlow保存出来的一种模型文件格式。通常save下来的时候会得到4个文件,例如:

checkpoint
model.ckpt-1.data-00000-of-00001
model.ckpt-1.index
model.ckpt-1.meta

如何查看这些文件里的模型参数名称呢?… Read More

[原创] tf.tile() 用法举例(TensorFlow)

转载需注明出处:https://www.codelast.com/

tile 的含义:

n. 瓦 / 瓷砖 / 软木片 / 亚麻油地毡片
v. 用瓦盖 / 贴砖于 / 铺以瓦 / 铺以瓷砖

函数定义:

def tile(input, multiples, name=None):

函数功能:

Constructs a tensor by tiling a given tensor.

即:通过“平铺”一个给定的 tensor 来构造一个新的 tensor。用人话讲就是:把输入的 tensor,在指定的维度上复制N遍(就像铺瓷砖一样),来创建出一个新的 tensor。
3个参数:
input:输入的tensor
multiples:在指定的维度上复制原tensor的次数
name:operation的名字
Read More

[原创] 如何减少map-only的Pig job的输出文件数

转载需注明出处:https://www.codelast.com/

如果一个Pig job是map-only的job,并且其输入文件数很多的话,那么输出的文件数也会同样多,此时,如果每个文件大小又比较小的话,长久下去就会对Haodoop NameNode造成很大压力。我们可以通过给Pig job添加一个reduce过程来减少输出文件数。… Read More