本文从非参数方法起源开始谈起,再到核方法对于线性回归问题的表示。再讲解核方法中,高斯过程以及其具体应用例子。最后推导svm。
先以prml中文版页码为准。
机器学习算法可以分为参数方法和无参数方法。
常用的无参数算法有: 近邻方法,核方法。
从$k$近邻方法为例来理解无参数方法。$k$近邻在训练阶段保存训练数据,在预测阶段,找到其最靠近的$k$个数据点,由这些点投票获得当前点的类别。
起因是在用mxnet写wgan的时候, wgan要求loss不去log。而mxnet的SoftmaxOutput, LogisticRegressionOutput 等都是直接将softmax和loss layer进行整合。
In the forward pass, the softmax output is returned. In the backward pass, the logit loss, also called cross-entroy loss, is added.
虽然可以通过MakeLoss来定义自己的损失函数,但是还是挺想知道mxnet内部是怎么做的。
去年在微博上看到这篇文章, 文中关于pad值的描述,关于global pooling的奇妙作用让我一直对global pooling年年不忘。 这两天正好看了一下cnn的pad值的valid,same(half), full模式。对cnn本身已经没有疑问,再回来研究一下这个问题。
研究发现这篇博客作者描述有点坑。对于知道border mode,知道global pooling的人来说,完全没有压力,但是对于不熟悉这些名词的人来说,可能会造成误解了。
反思一下造成这个情况的原因,如果不是直接看代码,有看文章的话,不至于这样。如果了解network in network的话,也不至于这样。如果对cnn基础border mode更熟悉的话,同样不至于造成这个问题。所以,即使更新前沿知识是很有必要的,跟踪代码不够,理论上还是要有制高点,否则容易有误解。
关于反卷积deconvolution这个说法是不准确的, 正确的术语应该是transposed convolution, 两者说的是一个东西,但是还是有一些框架在使用. 本文的主要参考资料是theano_doc, 关于cnn的中文推导以及相关索引资料可以参考这里. 还有一些尚未解决的疑问.待研究代码后解决.
本文写作时候2017.3.7,mxnet loss有点晦涩,写作本文梳理一下。mxnet讨论区说近期会重构loss layer. 待重构后再做更新。
本文记录编译superviseddescent库碰到的问题。问题本质在于使用不同编译器版本编译的库,有时候不能混用。
刚开始编译在ubuntu16.04下编译不通过,在ubuntu14.04编译通过。
在ubuntu16.04 + opencv3.1 + boost1.58下,报boost program_options链接错误。
在ubuntu14.04 + opencv2.4.8 + boost1.54下, 一次通过
一度怀疑是boost库链接问题,以为是不同版本boost不一样导致的。下载boost源码,发现没有CMake编译,暂时作罢。。后来使用下面脚本,发现应该不是boost库找不到造成的。
function(VerifyVarDefined)
foreach(lib ${ARGV})
if(DEFINED ${lib})
else(DEFINED ${lib})
message(SEND_ERROR "Variable ${lib} is not defined")
endif(DEFINED ${lib})
endforeach()
endfunction(VerifyVarDefined)
VerifyVarDefined(Boost_PROGRAM_OPTIONS_LIBRARY)
依稀记得以前编译OpenFace, 碰到过boost问题,好像是将gcc切换到5就搞定了的。至此把怀疑目光转向g++版本和opencv版本问题。
设置opencv搜索路径:
set(OpenCV_DIR "/home/sooda/tools/OpenCV/opencv-2.4.10/build")
做了以下测试:
在ubuntu16.04 + opencv2.4.10(用g++4.9编译) + boost1.58下,gcc4.9编译报boost program_options链接错误。
在ubuntu16.04 + opencv2.4.10(用g++4.9编译) + boost1.58下,切换编译器到g++5, 报opencv各种cv::error, cv::exception, cv::string等错误
查找文章怀疑是c++ ABI在不同版本之间不同导致的。也就是说,使用不同版本编译器编译出来的库未必能够通用。
将编译器切换到g++5,重新编译opencv,superviseddescent库顺利编译成功。
猜测ubuntu16.04上的boost1.58应该是用g++5编译的,这也解释了以前不少代码编译不通过,切换编译器之后就编译通过的情况。编译不通过可能不是代码版本不兼容,而是库版本不兼容!
本文将从传统基于拼接的语音合成,基于参数的语音合成讲到最新基于生成模型的语音合成。参数生成部分由于jimmy完成,声码器部分由lbq完成,wavenet部分由于mingAn完成.
本文简单记录碰到的c++11特性。不是全部。持续更新
2015年总结见这里。
2016年总结:
2017年目标:
学习工作
生活。多走出去。学习一项技能,乐器?绘画?练出腹肌。
本文简单记录tinyflow阅读源码笔记。待进一步整理。文末已列出待完善部分。
├── src
│ ├── c_api.cc
│ ├── op_nn.cc //跟网络结构相关的op。比如conv2d等
│ ├── op_special.cc
│ ├── op_tensor.cc //矩阵运算相关op. 大量用到makenode
│ ├── op_util.h //makenode,MakeBackwardGrads。 调用nnvm
│ ├── rtc
│ │ └── op_fusion.cc
│ ├── session.cc
│ └── torch
│ ├── op_nn_torch.cc
│ ├── op_special_torch.cc
│ ├── op_tensor_torch.cc
│ └── torch_util.h