使用 beego 一键生成 API

首先要吐槽一点:beego 的文档对于新手实在是太不友好了。

beego 的官方文档会出现一些问题,比如 tutorials 里面,应该是 beego run 而不是 beego run hello

beego 是啥

beego 是 golang 的一个 web 开发框架,集成了不少远 golang 没有的有价值的函数,对于快速开发高性能的 go 应用有不少帮助。

如果想开发简单的 go 应用,其实可以不使用 golang 框架,因为 go 本身就定义为云计算时代 C 语言,很多功能其实以及包含了,没有必要学习一个框架给自己增加不必要的麻烦。

Read More

手把手教你搭建 vue-cli

vuejs 这东西,实不相瞒,学习了很长时间,从看文档到使用,大概有一年的时间。当然,其实上手没有那么难,<script src="vue.js"></script>这样就搞定了。只是想要用的比较优雅,存在一定的难度。

但是硬核玩家肯定不能止步于此。于是就开始了vue-cli的探究。没想到这个探究如此之长,以至于我在很长一段时间内,都没有正儿八经的写过前端。

Read More

使用 Docker swarm 构建 PostgreSQL 集群

又是一个渣翻,Copyright belongs to the original text。

原文地址

背景

PostgreSQL 在 9.0 版本已经开始持续接收大量的增强,包括:

  1. 异步拓展
  2. 同步拓展
  3. 仲裁提交
  4. 级联拓展
  5. 逻辑拓展

PostgreSQL 文档也提供了一个 overview 以及 不同拓展方法的比较。详见PostgreSQL 集群策略比较

用于部署 PostgreSQL 的拓展的主拓展的方法论,是一个重要的工具来为你的数据库集群创建高可用的环境。需要一个合适的部署策略来确保你的数据被保存到不同磁盘,以及不同的数据中心。

Read More

beam search – 一个搜索策略

一个近似搜索策略,用于在候选可能中选择最好的结果 渣翻:https://hackernoon.com/beam-search-a-search-strategy-5d92fb7817f 一个常用例子,BS(beam search) 用于获得与机器翻译等价的结果。对于那些不了解机器翻译的人,也肯定知道 Google Translate。 这就是为啥要讲这个。这些系统都用 BS 技术来找到与结果最等价的翻译。阅读这个 Wiki 来了解相同文件的定义。 让我们讨论一下这个使用机器翻译案例的策略。如果你是一个喜欢研究现象背后原理的人,一定要读一下 google encoder-decoder 网络架构。这个东西我就不讲了,有很多人讲。例如,如果你不知道这个架构,看看这个 quora 上的回答。 一个视角 机器翻译模型可以被认为是一种 “条件语言模型”,对于… 让我们看一下… BS B(beam 宽度) 是唯一一个调整翻译结果的超参。 B 在一般情况决定了,在每一步,要记忆的单词的个数,来变换概率。 不翻译了。。这里有更直接的结果 beam search 时在每一个时间点选择 beam_width 个最大的可能类别,然后在每个时间点 beam_width 个类别组成的空间里寻找整体概率最大的一条路径,得到最后得识别输出。而 greedy search 则直接在每个时间点寻找概率最大的类别,然后依次组成这个路径。也就是说,greedy search 是 beam_width=1 版本的 beam search。上图是 CTC 论文里 greedy search 示意图。

Read More

对于 CTC 的一个直观理解与解释

渣翻 https://towardsdatascience.com/intuitively-understanding-connectionist-temporal-classification-3797e43a86c 通过 连接主义时间分类 loss 以及编码操作 如果想用使用计算机识别文字,神经网络很好用。使用一些列 CNN 从序列中提取特征,使用 RNN 来传播需略的信息。它会输出字符得分,给每个序列元素,通过一个简单的矩阵表示。现在,有两个事情我们想要对矩阵进行处理。 训练:计算损失值来训练神经网络 推理:解码矩阵来获得图片中的字符 两个任务可以同时被 CTC 操作完成。对于手写数字系统的描述,可以参见图像 1. 我们更进一步看看 CTC 操作,并且讨论一下它如完成的,以及它背后的公式是如此巧妙。最后,我将会指点你来找到 Python 代码以及不复杂的公式,如果你感兴趣的话。 为什么我们使用 CTC 当然我们可以创建一个数据集,这个数据集有文本行,然后指出每列属于哪一个字符,就像图 2 中展示的那样。然后,我们可以训练一个神经网络来输出每一列的得分。而然,对于这个简单的解法,这里有两个问题。 这个十分的耗时(以及无聊)来在字符层面上标注数据 我们仅仅能够得到字符的得分,因此还需要一些操作来获取最终的文本。一个简单地字符可以跨越多个位置,比如,我们得到 “ttooo”,是因为 “o” 是一个比较宽的字符。我们已经删除了多余的 “t” and “o”,但是,如果要识别的字符是 “too”,我们应该怎么办?如果删除了多余的 “o”,将会给我们错误的答案。我们应该如何处理呢? CTC 解决了几个问题 我们只需要告诉 CTC loss function,文本在图像中出现了,因此我们忽略位置和宽度文中在图像中。 不需要更多的文本识别处理 CTC 如何工作的 就像是我们已经讨论的,我们不希望在图像的每一列标注数据(这曾经被我们成为时间步)。神经网络的训练将会被 CTC 损失函数所指引。我们只需要把数据矩阵给 CTC 函数,以及对应的真实值即可。但是它是怎么知道每一个字符出现的呢?他不知道。相对而言,它尝试了图片中所有的真实文本,以及计算了所有的加和。通过这个方式, This way, the score of a GT text is high if the sum over the alignment-scores has a high value.

Read More

使用主动学习加速机器学习

一篇 medium 文章的渣翻 https://becominghuman.ai/accelerate-machine-learning-with-active-learning-96cea4b72fdb 让我们讨论一下主动学习。我相信这个方法可以极大的增速,以及减少许多机器学习工程的花费。这篇文章我将从两个部分说明这个问题。在第一部分,我给出了一个极高的层级的主动学习的说明,以及如何把它利用到机器学习工程中。在第二部分,深入到一个主动学习 demo 中。 第一部分 主动学习是如何工作的 让我们通过一个很简单的概览,来看看机器学习是如何工作地。 许多机器学习模型是巨大的猜疑机器——他们看了许多数据,计算出一个猜测的结果,检查他们的答案,微调一下,然后再试试。在许多数据之后,模型将会变得十分准确。 标记数据 … 主动学习 主动学习是一种方法,有时可以极大减少标记样本的数量。它通过专家标记样本来完成这个工作。 不使用全部的数据一次标注所有数据,主动学习优先处理那些让模型感到困惑的数据,并且仅仅需要好那些数据的标签。模型在小样本数据上进行训练,然后根据那些最令模型疑惑的数据,请求更多的标签。 通过优先处理那些最迷惑的样本,模型可以专注于提供一些最有价值的信息。这帮助模型训练的更快,并且让专家跳过那些对于模型帮助不是很大的数据。结果是,我们可以很大程度上减少标记样本的数量,并且我们仍然得到一个很好的模型。这意味着节省时间和金钱! 第二部分 MNIST 例子 让我们看一下实际的主动学习样本。 使用文档良好的 MNIST 数据集,以及经典的 Tensorflow 卷积神经完了过。一个聪明的模型和架构可以做的更好,但是我们想要直接使用这个模型。 MNIST 数据集是公开可获取得的数据集,包含了大量的手写数字,以及数值标签。它经常被使用于机器学习入门教程,因为他的标记数据质量很高,并且简单地模型也可以表现的不错。 设计 这个工程包含两个部分: 在训练模型的时候,模仿主动学习 在严格的模型上确定主动学习的效率 训练一个模型 我们使用 mini-batch 训练。这个模型仅仅在训练集中,看一个小数量样本,通过小数量样本进行学习。 这里,我们可以看到一个正常的(非 – 主动学习)的训练过程,模型在一个随机结合的小批次上进行训练。每在小 – 批次训练中的迭代,都在测试记上运行模型(不作为训练集的一部分)来追踪模型是怎样增长的。我提供了准确率以及 cross-entropy 损失(就像是平均误差一样)。在这里,每一个小批次有个 10 个例子,我运行了 2000 批次(20000 个标注)。 对于这个分类任务,我们试图把 0~9 的数字进行分类,意味着随机猜测仅有 10% 的准确率。简单的神经网络已经做的不错了。 模拟主动学习 获得主动学习结果有一点小技巧。我们不在数据集中的随机选择数据,相反,模型将会评估许多在训练集中的例子,然后将置信度最小的数据作为小 – 批次(在这个工程中,我查看了 1000 个在训练集中的随机样本,来确定置信度至少为 10)。在那里,模型将会像处理小 – 批次数据一样处理进行训练过程,它将会重复这个过程来更新模型。就像是在 “非 – 主动学习” 样例中,每经过一些迭代,我将会在测试记上运行模型,追踪模型的训练过程。

Read More

gollum 书写 wiki

使用 gollum 书写文档(github, gitlab, wiki)。Gollum 是通过 gitlab 发现的东西,可以把 gitlab 的 wiki 文档放在本地进行书写,对于“小”的wiki,以及API文档实在是再方便不过了。个人感觉比 Sphinx 更加容易上手。 显示 TOC [[_TOC_]] 安装 gem ruby-full, ruby-dev 切换 aliyun mirror 上网搜就行。https://gems.ruby-china.com/ 安装 gollum gem install gollum gollum wiki https://github.com/gollum/gollum/wiki similar things https://github.com/joeyespo/grip try todo [[_]] 测试

Read More

Pycharm Tips

最近使用 Pycharm ,有时候引用包的时候很不方便,错误的显示 package 不存在。出现这个问题的本质是因为:代码检查的位置没有设置好。 那么怎么解决这个问题呢?偶尔发现 Pycharm 的选项中,有一个选项是marked,因此选 marked 即可。 还有就是 Docker 的配置,以及 Python interpreter的配置。这两个都可以通过设置进行配置,然后修改默认的 Python 解释器。在 Python interpreter 中,还可以手动安装相关的包。 使用 Vim 使用 ideavim,可以将原来的按键映射到 Vim 按键上。 (有新的就更新。) 使用 Docker-compose https://www.jetbrains.com/help/pycharm/using-docker-compose-as-a-remote-interpreter.html 查看文件结构 https://www.v2ex.com/t/261934 点击左下角的 structure 即可。 转载请注明出处。

Read More