Django tricks

关于 session

django.contrib.sessions.middleware | Django documentation | Django

session 是使用 cookie 来进行判断的,通过 session_cookie_name 来提取,然后通过 SessionStore() 来保存。

因此,Django 也是通过 sessionid 来区分用户;(或者其他什么名称)。

使用 cache 作为全局变量

cache.set(‘foo’, ‘bar’) # another function cache.get(‘foo’) # get ‘bar’

使用 cache , django-redis 是一个好方法。可以在使用 cache.lock变量,在应用层面加锁,来完成异步操作,还可以支持分布式应用,十分方便。

Ubuntu 多显示器方案

多显示器方案。
使用 `xrandr` ,输出当前存在的screen
Screen 0: minimum 8 x 8, current 7680 x 2160, maximum 16384 x 16384
DP-0 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
DP-3 connected 3840x2160+3840+0 (normal left inverted right x axis y axis) 510mm x 287mm
1920x1080 59.93*+ 59.94 
1680x1050 59.95 
1600x900 75.00 60.00 
1440x900 59.89 
1280x1024 75.02 70.00 60.02 
1280x720 59.94 
1152x864 75.00 
1024x768 75.03 70.07 60.00 
800x600 75.00 72.19 60.32 56.25 
720x480 59.94 59.94 
640x480 75.00 72.81 59.94 
DP-4 disconnected (normal left inverted right x axis y axis)
DP-5 disconnected (normal left inverted right x axis y axis)
eDP-1-1 connected primary 3840x2160+0+0 (normal left inverted right x axis y axis) 380mm x 210mm
3840x2160 60.00*+ 59.97
找到命运的显示器,然后输入
xrandr --output eDP-1-1 --auto --output DP-3 --auto --scale 2x2 --right-of eDP-1-1
问题解决。
—-
2019-01-19 补充
不怎么 work,总是闪屏。。

My Keras tricks.

记录了一些使用 keras 的技巧。

categorical_crossentropy vs sparse_categorical_crossentropy.

3. The Answer, In a Nutshell

  • If your targets are one-hot encoded, use categorical_crossentropy.
  • Examples of one-hot encodings:
  • [1,0,0]
  • [0,1,0]
  • [0,0,1]
  • But if your targets are integers, use sparse_categorical_crossentropy.
  • Examples of integer encodings (for the sake of completion):
    • 1, 2, 3

clip norm


https://wulc.me/2018/05/01/%E6%A2%AF%E5%BA%A6%E8%A3%81%E5%89%AA%E5%8F%8A%E5%85%B6%E4%BD%9C%E7%94%A8/
可以加速 RNN 训练

Multiple GPU

# https://keras.io/utils/#multi_gpu_model#

使用多GPU,注意使用 save 的时候,传参传 model (multi_gpu_model的model参数)

Encode Labels

可以把不同的字符[‘aa’, ‘bb’, ‘cc’, ‘aa’] 编码成 [0, 1, 2, 0]

1
2
3
4
5
6
# encode class values as integers
encoder = LabelEncoder()
encoder.fit(Y)
encoded_Y = encoder.transform(Y)
# convert integers to dummy variables (i.e. one hot encoded)
dummy_y = np_utils.to_categorical(encoded_Y)

训练中存在的问题

训练性能低了别急着调参,首先看看数据预处理有没有问题,评价指标是不是写错了。再一个,batch norm 要勤快点加上。

相似的文章还有:https://svtter.cn/2018/02/01/keras%e5%9d%91/

为你的 Docker 项目集成 ELK

https://github.com/twtrubiks/docker-elk-tutorial

基本上按照这个配置就可以了,创建 @timestamp 这一步,可以用如下脚本替代 Postman

$ curl -XPOST -D- 'http://localhost:5601/api/saved_objects/index-pattern' \
    -H 'Content-Type: application/json' \
    -H 'kbn-version: 6.5.4' \
    -d '{"attributes":{"title":"logstash-*","timeFieldName":"@timestamp"}}'

这也是 tutorials 中,使用的 ELK images 给出的。

https://github.com/deviantony/docker-elk

继续阅读

使用 beego 一键生成 API

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

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

beego 是啥

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

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

继续阅读

手把手教你搭建 vue-cli

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

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

继续阅读

使用 Docker swarm 构建 PostgreSQL 集群

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

原文地址

背景

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

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

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

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

继续阅读

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 示意图。