字典学习(dictionary learning)

什么是字典学习

字典学习的目标,提取事物最本质的特征(类似于字典当中的字或词语),它对我们对物体得到的信息降维,减少了无关紧要信息对定义这个物体的干扰。

理论依据

稀疏模型

$x=D\cdot \alpha$,

x是输入图像(维度$d_{i}$)

D字典模型 ($d_{2}K$)

$\alpha$ 稀疏矩阵 (K)

$min\Vert \alpha\Vert$

$$
s=\psi z,(\psi \in \mathfrak{R}^{n\times k},z\in \mathfrak{R}^{k\times1},s\in\mathfrak{R}^{n\times 1})
$$

字典学习示意图1.png

离散余弦变换和离散小波变换

利用信号经过这两种变换后都会有稀疏性的特性,把这两种变换变成矩阵形式,让信号直接投影到具有稀疏性的空间上。

好处

  1. 不需要特别针对信号做不同$\psi $的选择,对于绝大部分信号可以直接使用。
  2. 并不需要前处理,可以直接使用。

坏处

  1. 限制了原信号的维度,必须满足$n=2^x$,x为任意正整数。
  2. 因为通用所有信号,故经过压缩感知还原算法后还原的信号质量较差。

字典学习

把$\psi$当作一本要学习的字典,不断的利用该信号和还原算法后的结果做字典的更新,直到找到一个$\psi$ 能够把信号投影到稀疏性空间上。

字典学习示意图.png

字典学习的流程:

1.设置字典学习iter

2.收集一定量的数据s,组成$S=[s_1,s_2\dots,s_L]$

3.固定$\psi $ 利用还原算法找出每一笔数据z 组成$Z=[z_1,z_2\dots ,z_L]$
$$
\min\limits_{c}\Vert S-\psi Z\Vert_F^2 s.t.\Vert Z_i\Vert_0 <K_{th} \forall i
$$
4.固定Z,利用3的Z来更新字典

Z固定时,定义误差$e_i=s_i-\psi z_i$组成$E=[e_1,e_2,\dots,e_L]$

整体的均方误差
$$
|\mathbf{E}|{F}^{2}=|[\mathrm{e}{1}, \mathrm{e}{2}, \ldots, \mathrm{e}{\mathrm{L}}]|{F}^{2}=|\mathbf{S}-\psi \mathbf{Z}|{F}^{2}
$$

固定Z使得E最小$(S-\psi Z)Z^T=0$ => $\psi =SZ^T(ZZ^T)^{-1}$

好处

  1. 因为针对该种类信号做学习,故还原后的质量较好。
  2. 对原信号的维度并没有任何限制。

坏处

  1. 需要事前收集该种类的信号做学习,不能未学习直接使用。
  2. 因为针对该种类信号做学习,故直接使用在不同种类信号效果较差/不适用。

[2018]Deep Convolutional AutoEncoder-based Lossy Image Compression

CAE convolutional autoencoder

PCA(principal components analysis)

12月看过的一些电影

电影

戏剧之王

冰雪奇缘2

利刃出鞘

爱尔兰人

随着Netflix 《爱尔兰人》的播放,国内豆瓣爱尔兰人瞬间成为本周口碑第一的电影。我期待这部电影已经很长时间了,这是Martin Scorsese(马丁·斯科塞斯)花了很长时间摄制的一部电影,确实是沉寂多年,现在重拳出击,据说马丁的下一部电影也要在明年年初开拍,阵容除了老搭档德尼罗之外,还把小李子拉了过来,这应该是德尼罗和小李子的时隔多年又一次合作了。回到《爱尔兰人》,这部电影给我最大的感触就是岁月如梭。

电影通过德尼罗老年口述的方式,闪回过往的画面。

CMake使用的一些基本操作

CMake使用的一些基本操作

cmake cookbook

https://chenxiaowei.gitbook.io/cmake-cookbook/5.0-chinese/5.6-chinese

cuda 模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#MakeLists.txt for G4CU project
project(test_cuda_project)
# required cmake version
cmake_minimum_required(VERSION 2.8)
# packages
find_package(CUDA)

if(${CUDA_FOUND})
include_directories(${CUDA_INCLUDE_DIRS})
link_directories($ENV{CUDA_PATH}/lib/x64)
else(${CUDA_FOUND})
MESSAGE(STATUS "cuda not found!")
endif(${CUDA_FOUND})
FIND_PACKAGE( OpenMP REQUIRED)
if(OPENMP_FOUND)
message("OPENMP FOUND")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
endif()

INCLUDE_DIRECTORIES(/usr/local/cuda/samples/common/inc)
INCLUDE_DIRECTORIES(/usr/local/cuda/include)
INCLUDE_DIRECTORIES(/usr/local/cuda/include)
# nvcc flags
#set(CUDA_NVCC_FLAGS -gencode arch=compute_20,code=sm_20;-G;-g)
#set(CUDA_NVCC_FLAGS -gencode arch=compute_52,code=sm_52;-G;-g)
# 添加要编译的库
#add_library(gpu SHARED ${CURRENT_HEADERS} ${CURRENT_SOURCES})
set_source_files_properties(test.cpp PROPERTIES CUDA_SOURCE_PROPERTY_FORMAT OBJ)
file(GLOB_RECURSE CURRENT_HEADERS *.h *.hpp *.cuh)
file(GLOB CURRENT_SOURCES *.cpp *.cu .cc)
source_group("Include" FILES ${CURRENT_HEADERS})
source_group("Source" FILES ${CURRENT_SOURCES})
link_directories(
/usr/local/cuda/lib64
)
CUDA_ADD_EXECUTABLE(test ${CURRENT_HEADERS} ${CURRENT_SOURCES})

target_link_libraries(test cudart)

Normal project

1
2
3
4
5
6
7
8
9
10
cmake_minimum_required(VERSION 2.8)
PROJECT (HELLO)
#SET(SRC_LIST container.cpp)
AUX_SOURCE_DIRECTORY(. SRC_LIST)
add_definitions("-Wall -std=c++11")
MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir " ${HELLO_SOURCE_DIR})
#ADD_SUBDIRECTORY(src)
set(SOURCES math/circle.cpp ./container.cpp)
ADD_EXECUTABLE(container ${SRC_LIST} ./math/circle.cpp)

选择windows studio指定版本编译

1
cmake -G "Visual Studio 14 2015 Win64" ..

conda 命令笔记

1
2
3
conda create --name your_env_name
conda create --cs231n python=3.7
conda create --name your_env_name numpy scipy

列举当前所有环境

1
2
conda info --envs
conda env list

复制某个环境

1
conda create --name new_env_name --clone old_env_name 1

删除某个环境

1
conda remove --name your_env_name --all

导出导入环境配置

1
2
conda env export > environment.yml
conda env create -f environment.yml

包管理

1
conda list

列举一个非当前活跃环境下的所有包

1
conda list -n your_env_name1

为指定环境安装某个包

1
conda install -n env_name package_name

发布自己的库到pypi

以下为测试

1
2
3
4
5
6
7
8
9
10
mkdir lbmblood_package
cd lbmblood_package/
mkdir lbmblood
cd lbmblood
new lbmblood.py
new __init__.py
cd ..
new setup.py
new LICENSE
new README.md
1
2
3
4
from __future__ import absolute_import
from .lbmblood import *

name= "lbmblood"
1
2
3
4
5
python -m pip install --user --upgrade setuptools wheel
python setup.py sdist bdist_wheel
python -m pip install --user --upgrade twine
python -m twine upload dist/*
pip install lbmblood==0.0.1

/usr/bin/ g++

阻尼边界条件

impedance boundary condition

To prevent reflection of the pressure wave, the rate of momentum change in the control
volume and the incoming momentum flux have to balance to zero:

Vy: this component is computed from the non-equilibrium bounce-back in vertical direction:

记录下8月阅读的一些内容

文学类

一千零一夜 第四季 尤利西斯

梁文道讲尤利西斯,爱尔兰非常崇拜乔伊斯。都柏林是文学之都,乔伊斯将一整个都柏林写在了此书中。他写到了这个城市每一个行业每一个人,发现人类的欲望,人的思想。很多人都没读完这本书,我也同样如此,才发现不是只我一人,买了很久一直没读完,不求全部读完,争取在8月将他看掉一些。

推荐阅读

乔纳森·斯威夫特《格列佛游记》

艾略特 - 《荒原》

正在阅读

勃朗特 - 《呼啸山庄》

人物关系图

毛姆 - 《人生的枷锁》

经典动漫

心理测量者

主要讲述的是一个未来的世界,所有的人都可以通过计算机某个智能系统的检测来测试你的心理情况,精神状态,是否出现反人类,不健康(番内称为浑浊)的现象。

其实,刚看几集就会觉得这是一件很可怕的事情,因为在那个世界,人们已经将自己的生命交给系统来判定。在考虑计算机没有变坏的前提下,计算机也许可以通过之前的数据来判定你是否正常,那也是基于一个经验的判决,他真的有资格来做法官么,他的标准是否是真的正确,就算一切都符合之前人类的常理,其实可以这样理解,人类突破自我的创新力、发展力有可能已经被阻碍了,这部动漫一直在突出,人已经在跟着计算机给你设定的路线行走,有一种被限制住的感觉。

以上科幻动漫中的假设,不要说在未来,只是在现在你就可以明显感受到,基于深度学习框架的这些应用对于你获取信息的领域是一种收敛的趋势,越来越狭隘,由于这种类型的app可以带来巨高的收益,可能以后如数据库类型的网站app都会转型,那会是更令人恐惧的了。这只是一方面,再说另一方面是隐私性的问题,正如黑镜中某一集(具体哪一集有点忘了…)中一样,一个人去便利店买东西,等到他要付款的时候,他想掏出现金付(实物货币),结果现金却比用虚拟方式付款贵上几倍,他现金没有那么多。他迫于某种原因关闭了虚拟支付的方式,现在急需的这个东西迫使他同意了虚拟支付的协议。虽然只是简单地扫了一下指纹,几百条用户协议和使用协议瞬间都签约同意了。这些公司这些支付平台其实都是在不断窃取你个人的信息的,网络的发达使得信息的价值一下子就提升上去,这些信息在经过现有的技术分析(包括机器学习、deep learning)会变得非常有用。这么一来每个人其实没有什么秘密的,都暴露在外面,每天为了获得正常的系统评分也就会展现出系统要求的那一面。

从E07开始,似乎出现了反派,正式的故事也似乎开始了….反派对世界的理解超乎你想象,感觉反派才是正派,他全身白色,就连头发也是白色的,一副自带天使光环的样子都令人怀疑他是不是反派了。他甚至自带正义属性,犯罪检测出来是0(也就是最低)。

当我看到结尾处西比拉系统的原型还是挺震惊的,竟然是这样组成的,但居然都是坏人,也能判断正确与否吗?

结尾部分感觉有点欠佳了,可能是为拍续集做准备,但如果就此完结可能会更加精彩一点。

电影

我的豆瓣

哪吒之魔童降世 / 哪吒降世 / Ne Zha

给与8分,动画片给人的感觉还是很棒的,外加许多中国元素,让人对中国动漫充满信心。可能主节奏和整体风格上还是给人不太连续和完整,所以给与8分。

最佳出价 / La migliore offerta / 寂寞拍卖师(台) / 最佳买卖

这部电影他首先给观众的印象分肯定很好,因为主人公是一个上层社会的超级精英老头,有着强烈的个人色彩,他是名画收藏品鉴定师,也可以说得上是艺术大家。然而他居然就这样被电话里面的女人一而再二而三的迷惑,最终居然跑到人家家里视奸别人,拍摄手法和角度其实还是挺有想法的,有一定的现实性。当你如此成功的时候可以再来受教这部电影的。

个人台式机(工作站)的推荐配置

类型 型号 价格
CPU 酷睿i7-8700 649
主板 微星B360M 1764
CPU风扇 酷冷至尊T400i 65
GPU 影驰rtx-2070 Gamer 3499
内存 金斯顿骇客神条8Gb*4 968
固态硬盘 西部数据 Sn750 500Gb 533
机械硬盘 东芝 3TB P300 489
机箱 先马黑洞 295
电源 酷冷至尊650w 469
网线 绿联千兆 12
蓝牙 绿联电脑pc外接蓝牙 29
8772

配置完成,总体上还是比较满意的。

值得一提的是我是做图形计算、并行计算这块的,所以显卡的显存、效率都很重要,rtx-2070 Gamer在我程序的测试下 ,可以跟实验室的Titan Xp有差不多的性能;并且这块显卡在游戏和并行计算上效率特别高,不愧是图灵系列的一块卡。

西部数据这块固态,速度非常快,切换窗口,打开文件速度都非常明显,推荐购买。

Boundary layer thickness

Physically Based Rendering

const float w_cas_cpu[27] = { 8.0f / 27, 2.0f / 27, 2.0f / 27, 2.0f / 27, 2.0f / 27, 2.0f / 27,
2.0f / 27, 1.0f / 54, 1.0f / 54, 1.0f / 54, 1.0f / 54, 1.0f / 54, 1.0f / 54, 1.0f / 54,
1.0f / 54, 1.0f / 54, 1.0f / 54, 1.0f / 54, 1.0f / 54,
1.0f / 216, 1.0f / 216, 1.0f / 216, 1.0f / 216, 1.0f / 216, 1.0f / 216, 1.0f / 216, 1.0f / 216 };

Inlet - Zouhe

normal boundary - bounce-back

outlet - Impedance characteristic-based boundary condition.

看看impedance-boundary condition.

计算channel flow boundary layer thickness

如何增加sample

根据channel flow boundary layer thickness 条件

分析两种情况管道变细,

1.分辨率较少如果sample点变少,会导致drag force增加,流速不一定增快。

2.分辨率足够,sample点变少,导致流速增快。

http://www.pbr-book.org/3ed-2018/contents.html

1564494442206

伍佰老师与他的一些歌

一直想写一些音乐推荐,伍佰老师从初中的时候我就开始听到了,当然最初听到的是《挪威的森林》,那就从这首作品开始。

初听《挪威的森林》,有种似曾相识的感觉,好像这歌从哪里听到过,但是仔细想想不太对,没有人会这么用力的唱歌,这样子的声音还是头一次听到。而后偶然的情况下,看到了挪威的森林的现场版MV,唱歌的人竟然用尽全身的力气在嘶吼,太有趣了,而到最后伍佰竟然全身被自己的汗水淋湿。

在这里推荐一些伍佰老师的好听歌曲

《路》、《蓝月》《太空弹》、《时光雨》

Survey:空间曲率问题

空间曲率问题

空间曲率问题是一个微分几何问题。

三角网格离散曲率估计和Taubin方法改进.pdf 这篇文章对于这块内容解释得非常仔细,总结了包括了基本知识、连续性推导公式求法再到离散化。

基本知识

在二维情况下,曲线$y=f(x)$ 其曲率为

$\kappa ={\frac {|f’’(x)|}{(1+f’^{2}(x))^{\frac{3}{2}}}}$

对于一个以参数化形式给出的空间曲线其曲率为$c(t)=(x(t),y(t),z(t))$

平均曲率:$(k_{1} +k_{2})/2$

主曲率 :$k_{max}$ ,$k_{min}$

高斯曲率:$k_{max} *k_{min}$

平均曲率是一个“外在的”弯曲测量标准,局部地描述了一个曲面嵌入周围空间(比如二维曲面嵌入三维欧几里得空间)的曲率。

参数曲面可以表示成:p(u , v)= p(x(u,v), y(u,v),z(u,v)) (u,v)∈[ 0 , 1 ] ×[ 0 , 1 ]

Read More