https://codepen.io/

CSS/Canvas/SVG 动画的灵感

分享代码片段,

  • Github Gist
  • JS Fiddle
  • JS Bin
  • CodePen 跟jsbin差不多,好像上面的代码大多数是CSS相关的
  • HackerRank. 这个严格说是个比赛/面试环境,实时性不错,其它跟jsfiddle大同小异。我司电面御用。

【bazel系列】从源码安装tensorflow

为什么要通过源码安装tensorflow?

  1. 特定平台没有安装包,比如arm
  2. 对特定平台加速,(比如AVX指令集)
  3. 定制化 (OPENCL)
1
2
3
4
>>> import tensorflow as tf
>>> tf.Session()
2018-08-05 09:38:38.966050: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
# AVX是x86指令集的扩展,用于线性代数计算的加速(例如矩阵乘法、卷积等)
  1. 如果没有GPU,只在CPU上运行tensorflow的代码,那么最好从源码编译tensorflow,利用AVX、AVX2、FMA等进行优化。
  2. 有些tensorflow operation会在CPU上运行,不在GPU上运行。

    Placing input pipeline operations on the CPU can significantly improve performance. Utilizing the CPU for the input pipeline frees the GPU to focus on training.
    1.

下载tensorflow源码

1
2
3
4
# git clone http://10.31.39.11/xusong/tensorflow.git
git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
git checkout r1.8

启动Docker环境

1
2
3
4
5
NAME=xusong_tf_bazel2              # 命名你的容器
nvidia-docker run -it \
--name $NAME \
-v `pwd`:/root/tensorflow1.8.0 \
tensorflow/tensorflow:1.8.0-devel-gpu /bin/bash

编译tensorflow

1
2
3
4
5
6
cd tensorflow1.8.0
./configure # 全部采用默认配置
# 把tensorflow源码编译成whl文件,编译后保存在/tmp/tensorflow_pkg目录下
bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
#
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

成功后,会编译成一个.whl文件。

安装tensorflow

1
pip install /tmp/tensorflow_pkg/tensorflow-1.9.0-py2-none-any.whl

验证

1
2
3
4
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))

原理

核心主要在以下命令:

1
bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package

https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/pip_package

【bazel系列】tensorflow的自动化构建

bazel的作用

下载tensorflow源码

1
2
# 从github下载tensorflow源代码
git clone --recursive https://github.com/tensorflow/tensorflow

启动Docker环境

1
2
3
4
5
NAME=xusong_tf_bazel              # 命名你的容器
nvidia-docker run -it \
--name $NAME \
-v `pwd`:/root/tensorflow1.8.0 \
bitspeech/tensorflow:1.8.0-gpu-bazel /bin/bash

编译tensorflow

1
2
3
4
5
6
## 进入根目录后编译
# 编译生成.so文件, 编译C++ API的库 (建议)
bazel build //tensorflow:libtensorflow_cc.so

# 也可以选择,编译C API的库
bazel build //tensorflow:libtensorflow.so

1.

  1. 首先跑通 https://github.com/tensorflow/models/tree/master/research/lm_1b
  2. 按教程编译

2.

编译LM模型

BUILD文件配置

示例文件 -
https://github.com/tensorflow/models/blob/master/research/lm_1b/

https://github.com/tensorflow/tensorflow/blob/master/tools/bazel.rc

扩展阅读

编译成安装包whl

编译成动态链接库so 或 dll

编译成可执行文件

其他

Sequence Modeling With CTC

关于blank节点

一般CTC需要与RNN或DNN结合使用。DNN与CTC模型在输出层引入一个“blank(空白)”节点,将两个发音单元之间混淆或不确定的区域映射到“blank”节点(传统“固定对齐边界”的方法将该“模糊”区域“强制”分类为左边标签、右边标签或者短停顿,存在天然的缺陷),这样,将传统的“轨迹”建模转化为“差异性”建模,使得模型更加关注一个发音单元与其它发音单元之间的“差异性”,缓减了传统模型需要完整地描述该发音单元全部信息的建模负担,可以参考 [1]

工具包

疑问

tesseract是否采用的CTC方法

CTC是否适用seq2seq问题。

背景

CTC解决的问题是,输入序列和输出序列数目不同的问题。seq2seq(翻译模型)也是这样的。

解答

CTC适用于存在一一对应关系、主要利用局部context信息的问题,比如语音识别、OCR等。
seq2seq则更适用于需要利用全局的context信息的场合,比如翻译,因为经常从局部context得不到足够的信息。

CTC要解决的是sequence labeling的问题。

seq2seq解决的是序列到序列的广义上的翻译问题,看起来是可以解决ctc的问题,但是由于其往往需要把整个输入压成一个fixd-length vector,会导致丢失很多的信息,同时其并没有输入输出的强制对应关系,对于语音识别或者OCR这种任务来说,约束力太弱了,因此虽然这个框架可以执行ctc的任务,但是效果应该不会很好。

https://www.zhihu.com/question/49043625

我的注释

这个问题实质上是在问seq2seq和sequence labeling的区别。前者对生成的序列不需要顺序保持(例如机器翻译),后者是需要顺序保持(例如NER、OCR、语音识别)。

如果用CTC处理翻译模型,基本就是逐字翻译的效果了。貌似还不是这样,CTC是sequence labeling的问题,有序label,顺序不能变。

首先要区分seq2seq和sequence labeling这两个问题。
seq2seq解决的是序列到序列的广义上的翻译问题,

lstm+attention解决seq2seq问题,

参考

paper & blog

code

语音信号处理中基频提取算法

当语音是一个干净的语音时,大部分的基频提取算法的结果都很好,但是当语音中混有较强
的噪声,或者语音是多个语音的混合,从而同时含有多个基频的时候,很多现在的技术都表现得不好。

参考

  • 《语音信号处理中基频提取算法综述》