Draft
提问方式
有时候搜索一些奇怪的语法搜索引擎支持的不好,尽量用一句完整的话来搜索:
Latex/Markdown
0.记号约定
以下参考《统计推断》--George Casella,《几何与代数》--胡国权,《神经网络与深度学习 》--邱锡鹏
markdown语法仅用到{\bf X}。字体仅用到大小写字母斜体与大小写字母正粗体。
概率统计
$X$ | 随机变量 |
$x$ | 样本/随机变量的取值 |
${\bf X}=(X_1,X_2,\ldots,X_p)^T$ | 随机向量 |
${\bf x}=(x_1,x_2,\ldots,x_p)^T$ | 样本/随机向量的取值 |
$L(\theta,{\bf x})$
$P(X=x),P({\bf X}={\bf x})$
$f_X(x),f_{\bf X}({\bf x})$
线性代数
$A$ | 矩阵 |
$\bf{x}$ | 向量 |
$x$ | 标量 |
$\bf{A}$ | 张量 |
机器学习
遵从线性代数的记号(矩阵向量标量张量)(仅用于暗示维度,其他不做任何约定)
例如:样本矩阵记作$A\in\mathbb{R}^{n\times p}$或者$A\in\mathbb{R}^{p\times n}$ 彩色图片记作${\bf A}\in\mathbb{R}^{a\times b\times c}$ 彩色图片集合记作${\bf A}\in\mathbb{R}^{a\times b\times c\times n}$
注意到维数较高的张量的记号还是会引起混淆,故可仅使用${\bf A}$表示三维张量,更高维可换其他记号。
注记:上述记号约定中大写字母的记号有冲突,但不至于引起混淆,所用的符号类型仅有4种,便于临时约定其他符号。
1.代码与对应的效果
$xy,\boldsymbol{xy},{\bf xy},XY,{\bf XY},\boldsymbol{XY}$
前向兼容与后向兼容(backward vs forward compatibility)
backward-vs-forward-compatibility
VSCode 使用大杂烩
快捷键
块状选择修改
将如下快速改为
方法为:将鼠标放在第一个 ->
处的 -
前面,按住 alt+shift
移动鼠标至第三个 ->
的 >
右侧,之后输入 <-
,即可替换成功,再按下 esc
退出此模式。(备注:类似于 vim 的块选择模式)
VSCode 离线安装扩展
有时会出现VSCode版本与扩展不兼容的问题, 此时需要手动下载vsix包进行下载, 下面的问答解释了一些关于怎么下载历史版本的jupyter扩展的问题, 顺带也有介绍一些GitHub流水线的知识, 供参考.
VSCode 设置项
VSCode设置File->Preferences->Settings
中的用户
优先级低于工作区
再低于文件夹, 实际上三者的可以设置的参数名是相同的. 优先级会决定哪个发挥作用. 也许逻辑是这样的, 用户的设置会体现在vscode安装目录下, 三者计算的结果会存在当前工作区的.vscose目录下. 有关于python的默认参数及含义可参见官网链接
VSCode写C++代码(Window MSVC)
Kafka
相关介绍可以参考博客1与博客2, 简单来说就是一个存东西的地方(类似于数据库或队列), 发行版分为 Apache kafka
与 Confluent kafka
两类,区别在概念上的理解可参考博客
我们把Kafka比作Linux的内核,Confluent就相当于Linux的某个发行版。Confluent提供了Kafka没有的组件和功能,比如完善的跨数据中心数据备份以及集群监控解决方案。Confluent还分开源版本和企业版本,企业版本中提供了对底层Kafka集群完整的可视化监控解决方案,以及一些辅助系统帮助管理集群。Confluent的开源版本和Apache社区的Kafka并无太大区别。用户完全可以使用Confluent Open Source替代Apache Kafka。
在使用上,用容器部署kafka服务,使用kafka-python包来生产和消费数据, 具体可参考demo
示例: 计算后将数据回写入kafka(写入过程不阻塞主服务)
代码参考: draft-src/kafka/write-kafka
关于kafka的KAFKA_CFG_LISTENERS
与KAFKA_CFG_ADVERTISED_LISTENERS
的设定问题,参考博客
IEEE 754 与 np.frombuffer
IEEE 754 表示法的描述参见 CSAPP, 简要描述如下:
浮点数的表示方法为:$V=(-1)^s\times M \times 2^E$, 其中 $M$ 表示 $[0, 2-\epsilon]$ 中的一个数, $E$ 表示一个整数, $s$ 表示 0(正数) 或 1(负数)。
以 float32 为例, 具体的编码方式为:
第 1 位表示符号
接下来的 $k=8$ 位 $exp = e_7e_6...e_0$ 表示指数 $E$ (exponent)
最后的 $n=23$ 位 $frac = f_{22}f_{21}f_0$ 表示系数 $M$ (significand)
具体的编码方式如下, 分为 3 类情形:
1. Normalized values
当指数位不为全0或全1时,属于此类。这种情况下,$E=exp-Bias$,$M=1+0.f_{23}f_{22}...f_{0}$。其中 $Bias=2^{k-1}-1=2^7-1=127$。
2. Denormalized values
当指数位全为0时,属于此类。这种情况下,$E=1-Bias=-126$, $M=0.f_{23}f_{22}...f_{0}$。
这类编码方式主要有两个目的:一是可以表示出0:+0.0被编码为全0, -0.0被编码为第一位是1,其余位全为0;而是可以表示数十分接近0的数字
3. Special values
当指数位全为1时,属于此类。当 $frac$ 全为 0 时,代表 $-\inf$ (如果符号位为1) 或 $+\inf$ (如果符号位为1);如果 $frac$ 不全为0,则代表 $NaN$
总结
从表示范围来看,三类值如下分布(一个数的正数表示与负数表示只相差符号位)
正数:
+0.0 (denormalized): $s=0$, $exp=00000000$, $frac=00...00$
最小正数 (denormalized): $\epsilon=2^{-2^{k-1}+2-n}=2^{-126-23}$, $s=0$, $exp=00000000$, $frac=00...01$
... (denormalized)
最大 denormalized 正数 (denormalized): $2^{-126} - \epsilon$, $s=0$, $exp=00000000$, $frac=11...11$
最小 normalized 正数 (normalized): $2^{-2^{k-1}+2}=2^{-126}$, $s=0$, $exp=00000001$, $frac=00...00$
... (normalized)
最大正数 (normalized): $(2-2^{-n})\times2^{(2^{k-1}-1)}=(2-2^{-23}) \times 2^{127}$, $s=0$, $exp=11111110$, $frac=11...11$
正无穷 (special): $s=0$, $exp=11111111$, $frac=00...00$
这样我们知道:
fp64: $k=11$, $n=52$, 最大正数为 $2^{1024}-2^{971}$, 最小正数为 $2^{-1074}$
fp32: $k=8$, $n=23$, 最大正数为 $2^{128}-2^{104}$, 最小正数为 $2^{-149}$
fp16: $k=5$, $n=10$, 最大正数为 $2^{16}-2^3=65536-32=65504$, 最小正数为 $2^{-24}$
例子:
np.frombuffer
关于机器的进程数
现代 CPU 的每个核一般都支持超线程。因此:
逻辑 CPU 数即为该机器并行的最大线程数。
在 Python 中,可以使用如下两种方式得到逻辑 CPU 数。(参考 Pytorch Dataloader 源码)
pdf 格式
bitmap, image, raster graphics:都指的是以像素点的像素值进行存储的图片
verctor graphics: 翻译为矢量图或位图,是电脑图形
pdf 的基本元素为
字符(单个字符及相应的位置)
位图(电脑图形)
图片
多媒体数据(例如动图)
其他(超链接,Javascript,form)
配置文件格式(待补充)
json
yaml
特殊语法
&NAME
表示后面的内容 abc
为“变量” NAME
,而 *NAME
表示引用变量 NAME
的值。
一个例子(节选):
另一个例子 (常见于 .pre-commit-config.yaml
):
以上解析出来是:
也可以简化点写作:
xml
ini
gitbook/gitbook.com/github page/Read the Docs
gitbook是用来制作书籍的软件. 为此需要先安装node.js, 之后安装gitbook CLI, 然后编写书籍的内容(一堆markdown文件), 之后利用安装好的gitbook来编译, 运行. 这样就可以启动一个本地服务, 就看到书籍了
gitbook.com是gitbook CLI的网页版, 也是官方现在维护的版本. 使用方式为首先在gitbook.com上注册一个账号, 在账号内新建一个空间, 之后在空间里添加笔记, 最终可以在类似如下网址看到创建的书籍网页
github page为个人创建网页的过程是: 在github上建立一个特殊的仓库, 仓库名为
之后在这个仓库里按普通仓库一样的方式添加文件, 最终可以在类似于
的网页看到创建的结果, github page可以为个人/组织/项目来创建
可以将gitbook编译后的东西放入github上的仓库, 从而形成页面
Read the Docs可以参考
计划:
使用github.io(github page)写零散的博客(暂无计划)
使用Read the Docs写代码文档或书(页面结构似乎只能有两层)gitbook.com与github仓库关联(写完整的笔记), 持续更新(页面结构似乎只能有两层)
自定义右键菜单栏
备注:win10系统
打开注册表:
win
+R
,输入regedit
点开如下目录:
计算机\HKEY_CLASSES_ROOT\Directory\Background\shell
注册表目录 | 描述 |
---|---|
| 右击目录时显示在菜单栏 |
| 右击文件是显示在菜单栏 |
| 点击空白位置显示在菜单栏 |
| 点击空白位置显示在菜单栏的次级目录 |
subderivative/subgradient
https://en.wikipedia.org/wiki/Subderivative
对于一个定义在开凸集上的凸函数$f:\mathbb{R}^n\to\mathbb{R},dom(f)=U$,设$x_0$是$U$的内点(因为$U$是开集,所以这里的内点相对于$U$或$\mathbb{R}^n$两者含义相同),$f$在$x_0$处的次导数(subgradient)是满足下述条件的向量$v$集合:
注记:在$x_0$处可微时,上述集合是单点集,即为普通的梯度。注意区分上述定义与凸函数的定义。这个定义的一个用途是找极值点。
一般函数(不必是凸的)的定义:待补充
回归问题中$R^2$的定义
设${y_i}_{i=1}^N$为真实值,${\hat{y}i}{i=1}^N$为模型输出的预测值。
$R^2$的取值范围为$(-\infty, 1]$。越大越好,最佳为1。一个baseline为$\hat{y}_i\equiv\bar{y}$,此时$R^2=0$。但可能会有模型预测结果的$R^2$为负值。
长尾分布(幂律分布)
长尾分布又称为幂律分布, 即分布函数存在不可忽略的尾巴(非指数). 可能会引起无限方差或均值(猜测准确说是相应的无穷限积分不是绝对收敛的, 故方差和期望没有定义), 严格定义待补充.
典型地: 正态分布不是长尾分布
在机器学习或其他领域中, 由于长尾分布的尾巴部分不可忽略, 但出现频率较低, 出现样本稀疏的情况, 不利于
Windows 10应用商店Ubuntu 18.04 LST
Windows操作系统搜索命令的顺序
先搜索当前目录,再搜索PATH
ipconfig命令的目录在C:\Windows\System32
SVD++(不完善)
论文题目: (2008)Factorization meets the neighborhood: a multifaceted collaborative filtering model.
问题背景: 给用户做商品推荐, 具体来说, 假定有$n$个用户, $m$种商品, 用户对商品的兴趣矩阵记作$R\in\mathbb{R}^{n\times m}$, 其中$R$的某些位置的元素是已知的, 但有些位置的元素是未知的.($r_{ij}\in[0,1]$, $r_{ij}$越大表示兴趣度越高), 目标是填补矩阵$R$的空白元素, 从而起到推荐的效果. 具体来说优化问题定义为:
其中$\mathcal{K}$表示已知的评分对, $q_i$与$p_j$分别表示用户$i$与商品$j$的向量表示.
具体应用时, 对上述目标还可以加入先验知识进行改进, 例如: 有些用户给分标准偏高, 某些物品得分偏低. 引入$b_i\in\mathbb{R}$与$c_j\in\mathbb{R}$表示这种偏见, 将优化目标改为
其中$\mu$为评分的均值. 上述打分标准的思想为: 打分=兴趣+偏见.
(SVD++)更进一步, 还可以加入更多的先验信息, 思想为: 打分=兴趣+偏见+隐式反馈. 其中隐式反馈可以代表点击次数, 浏览历史等, 即:
其中$N(i)$表示用户$i$的行为集合(浏览过哪些商品), $y_k$代表该行为表达的隐式反馈(猜想应该是事先定义好的规则, 例如浏览时间越长, $y_i$越大). 实现代码可去github上搜索即可.
graphviz安装
step 1: 首先下载安装程序https://graphviz.org/download/
step 2: 将graphviz的bin
目录加入系统PATH环境变量
step 3: 在python环境中
*step 4: 如果还出错, 尝试降低graphviz版本:
Windows命令行
shell脚本
实际上就是一条条可以在cmd中直接运行的命令, 保存为.cmd
或.bat
文件, 有两种启动方式
1) 双击该文件. 这种方式会新开一个命令窗口,运行结束后新开的命令窗口会自动关闭
2) 在cmd窗口中使用start xx.bat
命令. 这种方式会新开一个命令窗口, 运行结束后新开的窗口会被保留
关于快捷方式, 右键->属性->目标
, 右键->属性->起始位置
. 可以通过win+R
直接运行目标内的内容
Powershell脚本
.psl文件: PowerShell脚本文件
修改物理地址(危险操作)
公司外网电脑
原始物理地址: 00E17C688E5C 控制面板->网络和Internet->网络连接->右键以太网2->属性->配置->高级->Network Address
将值修改为: 00E17C688E6C
可以尝试在百度搜索引擎中输入ip查看当前ip.
数据库(可能会弄错MySQL与PostgreSQL)
语法实例
实际使用例子
注意: 左/右连接慎用
boost安装(VS2019)
将压缩文件boost_1_74_0.zip
解压后进入(使用x86_x64 Cross Tools Command Prompt for VS 2019命令行)
对需要使用boost的项目项目->属性->VC++目录
添加路径
gcc升级
参照这个后
graphviz安装
windows安装
step 1: 首先下载安装程序https://graphviz.org/download/
step 2: 将graphviz的bin
目录加入系统PATH环境变量
step 3: 在python环境中
*step 4: 如果还出错, 尝试降低graphviz版本:
多示例学习(Multiple-instance Learning)
简单地说, 标注数据是模糊的(例如: 在一段视频中, 只要有一帧出现了气球, 就给整个视频打上气球的标签)
transduction与induction
有疑惑可以搜索维基与知乎, 以下为一些解释
transduction表示训练时已经见过了需要测试的数据。常见的情形有
聚类(给定一些数据, 任务是对这些数据划分为不同的簇, 但不要求做以下任务: 新来一个样本, 判断其簇的归属问题);
半监督学习情况下,训练集为$\mathcal{D}={\mathbf{X}{tr},\mathbf{y}{tr},\mathbf{X}{un}}$,另有数据集$\mathbf{X}{te}$。假设目前的任务是对$\mathbf{X}{un}$预测标签,那么它是一个transductive semi-supervised learning;如果任务是预测$\mathbf{X}{te}$的标签,则它是一个induction semi-supervised learning
induction表示通过训练数据总结一般的规律,每来一个新的数据就可以利用这个规律进行预测。常见的有:
监督学习
C++整数除法
C++整数除法总是向零取整, %运算符的结果满足被除数=商*除数+余数
.
C/Python/np/tf/pytorch数据类型对照表
C | 字节数(C) | python 3.7.4 | numpy 1.17 | torch 1.3.0 |
---|---|---|---|---|
bool | bool | numpy.bool | torch.bool | |
int | 4 | int | numpy.int32(1 default) | torch.int32 or torch.int |
double | 8 | float | numpy.float64(1. default) | torch.float64 or torch.double |
float | 4 | - | numpy.float32 | torch.float32 or torch.float (1. default) |
long long | 8 | - | numpy.int64 | torch.int64 or torch.long (1 default) |
unsigned char | 1 | - | torch.uint8 | |
char | 1 | - | torch.int8 | |
short [int] | 2 | - | torch.int16 or torch.short | |
unsigned short [int] | 2 | - | - | |
unsigned [int] | 4 | - | - | |
[signed] long [int] | 4 | - | - | |
unsigned long [int] | 4 | - | - | |
torch.float16 | ||||
numpy/pytorch/tensorflow常用接口对照
numpy | torch | tensorflow |
---|---|---|
max/min (参数: axis) | max/min (参数: dim) | |
maximum/minimum | max/min | |
ndarray.astype(类型转换) | ndarray.to(类型转换) | |
::-1/flip(数组负数步长切片) | flip(tensor负数步长切片) | |
reshape | reshape/view | |
copy | clone/copy_/detach/detach_ | |
concatenate(已有维度)/stack(新维度) | cat/stack | |
数组下标的数据类型int32等 | int64等(不能为int32) | |
transpose(颠倒多个维度) | permute(颠倒多个维度) |
pytorch.utils.checkpoint?(已弃用?)
pytorch 的 checkpoint 是一种用时间换显存的技术,一般训练模式下,pytorch 每次运算后会保留一些中间变量用于求导,而使用 checkpoint 的函数,则不会保留中间变量,中间变量会在求导时再计算一次,因此减少了显存占用,跟 tensorflow 的 checkpoint 是完全不同的东西。
https://blog.csdn.net/ONE_SIX_MIX/article/details/93937091
目标检测相关论文调研
ImageNet的图像分类任务
1000类,共1200*1000张图片,50,000张验证图片,150,000张测试图片。
torchvision.ops中内置有nms, rol_pooling等操作
论文 | 年份 | 类别 | 说明 |
---|---|---|---|
Alexnet | 2012 | 分类 | ImageNet 2012冠军(分类任务) |
ZFnet | 2013 | backbone | ImageNet 2013分类任务冠军 |
Overfeat | 2013 | backbone | ImageNet 2013定位任务冠军 |
VGG | 2014 | backbone | ImageNet 2014第二名 |
NIN | 2014 | Network in Network, 1*1 conv | |
GoogLenet | 2014 | backbone | ImageNet 2014第一名, 1*1conv |
HighwayNet | 2015.5 | ||
Resnet | 2015.12 | backbone | ImageNet 2015 |
Wide Resnet | 2016.5(arxiv) | ||
DenseNet | 2016.8(arxiv) | CVPR 2017, dense connect Net | |
MobileNet v1 | 2017.4(arxiv) | MobileNet v2(2018.1 arxiv) | |
SENet | 2017.9(arxiv) | ImageNet 2017 | |
SIFT | 2004 | 尺度不变特征 | |
selective search | 2011- | proposal region | 非深度方法 |
EdgeBox | 2014(ECCV) | proposal region | |
Adam | 2014.12(arxiv) | 优化算法 | |
RCNN | 2013.10(arxiv) | 目标检测 | bounding box regression |
SPPnet | 2014.6(arxiv) | 分类,目标检测等 | 提到卷积层可以适应任意大小输入, 大概早于ImageNet 2014, SPP层用于输出固定维数特征 |
FCN | 2014.11(arxiv) | 语义分割 | CVPR 2015 best paper提名 |
FastRCNN | 2015.4(arxiv) | 目标检测 | ROI-pooling |
FasterRCNN | 2015.6(arxiv) | 目标检测 | RPN层替换掉原来的selective search等方法 |
Yolo v1 | 2015.6(arxiv) | 目标检测 | first one-stage detector in deep learning era |
SSD | 2015.12(arxiv) | 目标检测 | one-stage detector |
Yolo v2 | 2016.12(arxiv) | 目标检测 | |
Yolo v3 | 2018.4(arxiv)? | 目标检测 | |
Mask RCNN | 2017.3(arxiv) | 实例分割 | ROI-align |
FPN | 2016.12(arxiv) | 目标检测 | |
训练数据(有无数据增强),测试数据。另外VOC数据集还有difficult的问题。以VOC数据集为例,2007与2012都有train, val, test数据
https://arleyzhang.github.io/articles/1dc20586/
论文中针对 VOC2007和VOC2012 的具体用法有以下几种:
只用VOC2007的trainval 训练,使用VOC2007的test测试
只用VOC2012的trainval 训练,使用VOC2012的test测试,这种用法很少使用,因为大家都会结合VOC2007使用
使用 VOC2007 的 train+val 和 VOC2012的 train+val 训练,然后使用 VOC2007的test测试,这个用法是论文中经常看到的 07+12 ,研究者可以自己测试在VOC2007上的结果,因为VOC2007的test是公开的。
使用 VOC2007 的 train+val+test 和 VOC2012的 train+val训练,然后使用 VOC2012的test测试,这个用法是论文中经常看到的 07++12 ,这种方法需提交到VOC官方服务器上评估结果,因为VOC2012 test没有公布。
先在 MS COCO 的 trainval 上预训练,再使用 VOC2007 的 train+val、 VOC2012的 train+val 微调训练,然后使用 VOC2007的test测试,这个用法是论文中经常看到的 07+12+COCO 。
先在 MS COCO 的 trainval 上预训练,再使用 VOC2007 的 train+val+test 、 VOC2012的 train+val 微调训练,然后使用 VOC2012的test测试 ,这个用法是论文中经常看到的 07++12+COCO,这种方法需提交到VOC官方服务器上评估结果,因为VOC2012 test没有公布。
在各自数据集上分别进行建模和评测的用法比较少,基本上在早期论文里出现就是起个对照作用;现在的大部分论文都会为了增加数据量而将二者合起来使用。
t-sne: http://www.datakit.cn/blog/2017/02/05/t_sne_full.html
注: t-sne只能用作fit-transform, 而不能用作先fit再transform. 简单来说, t-sne的目标是将高维向量降低至2维或3维, 保持高维空间的向量的相似度关系, 这种相似度关系利用概率分布来体现, 损失是利用KL散度迫使高维空间的分布与低维空间一致. 缺陷是新来的样本没有办法进行降维.
spatial transform networks: https://kevinzakka.github.io/2017/01/10/stn-part1/
注: 简单来说, 假设某层的输入为$X\in\mathbb{R}^{H,W,C}$, STN会使用$X$得到6个参数, 使用这6个参数对$X$进行仿射变换得到$X'\in\mathbb{R}^{H',W',C}$, 其中$H’,W'$为网络超参数, 而后利用正常的卷积:$Y=f_{conv}(X')$, 其中$Y$为下一层的输入.
windows设置软件快捷方式
右键启动软件的图标,选择属性->快捷方式ctrl+alt+C
windows快捷键
Win + Tab
:切换应用窗口。用方向键
选择,Enter
确定。(会显示历史窗口)
Alt + Tab
:切换应用窗口。按住Alt
键,用Tab
选择,松开Alt
键确定。
windows terminal使用
增加shell: 参考
快捷键:
Ctrl+Alt+数字
切换打开的控制台 ctrl+shift+数字
打开新的控制台(参见windows terminal的设置栏) shift+alt+=/+
横向打开新控制台 shift+alt+_/-
纵向打开新控制台 alt+方向键
在本标签页内切换控制台 ctrl+shift+w
关闭当前控制台
[toc]
翻译软件/工具/模型
常见的翻译工具/软件有: 谷歌翻译, 百度翻译, 有道翻译, 微软翻译
翻译模型
颜色值的表示
对照表详情参见wiki
C/C++动态分配内存
一个积分计算
TODO: 潜在狄利克雷分配(LDA: Latent Dirichlet Allocation)
输入一堆文档, 其中每个文档指的是一个词语列表. 输出一个文档-话题矩阵与一个话题-词语矩阵, 其中每个文档的所有话题相加等于1, 每个话题的所有词语相加等于1
softplus函数
$(-\infty,+\infty)\to(0,+\infty)$, 可以看作是对$\text{relu}(x)=[x]_+=\max(0,x)$的软化, 但需要较大的计算量.
资源描述框架(RDF: Resource Description Framework)
RDF中有三类"东西": IRI(International Resource Identifiers, 类似于URI), blank nodes, literals(字面量), 其中知识用
来描述, 简称SPO. 其中S可以是IRI或者blank node, P是IRI, O三种都可以. 因此字面量只能充当叶子节点.
参考链接: http://www.ruanyifeng.com/blog/2008/02/rdf.html
RDF的基本思想很简单, 就是说任何网络资源都可以唯一地用URI(统一资源标识符,Uniform Resource Identifier)来表示. 在这里, 可以简化地将URI理解成网址URL. 比如Yahoo, 首页的网址是http://www.yahoo.com/, 那么它的首页就可以用这个网址来唯一代表. 有了这个识别符以后,网络资源的其他特性都用"属性(Property)"="属性值(Property value)"这样的形式来表示.
根据RDF的定义, 资源本身是主语(subject), 属性名称是谓语(predicate), 属性值是宾语(object). RDF本身用xml文件表示, 下面是两个例子
例子1(简化后不规范的xml文件)
例子2()
这是一个规范的xml文件,可以实际使用。请注意标成黑体的那几行。首行"rdf:Description",这是RDF规定使用的标签,表示主语subject,后来的"rdf:about"属性用来表示资源的标识符,也就是url,它唯一地确定了一个网络资源。其他属性中的dc:title、dc:identifier、dc:subject、dc:description、dc:creator和dc:date,分别表示题目、标识符、主题、简介、创造者、日期,这几项都属于都柏林核心,等号后面是相应的值。至于trackback:ping属性,这一项在都柏林核心中没有规定,但是也可以加上去,从中可以看到RDF资源描述框架的灵活和强大。
都柏林核心(Dublin Core): 描述网络资源的一些常用的谓词(参考博客)
C++重写/重载/覆盖
override(覆盖): 基类函数带有显式或隐式的virtual
, 子类中定义一个函数名与参数列表与之完全一致的函数, 则基类中的函数被覆盖. 即无法通过任何方式通过子类访问基类的该函数.
overwrite(重写):
子类中定义了一个与父类函数名与参数列表完全相同的函数, 但子类函数不是虚函数(不带显式或隐式的
virtual
)与父类函数名相同, 但参数列表不相同
以上两种情况均为重写, 即需要通过sub_class_obj.Base::foo()
方式进行函数调用
overload(重载)
在同一作用域内(例如一个类内), 函数名相同, 参数列表不完全相同, 构成重载.
收藏夹里吃灰的开源项目
序号 | 描述及链接 | 状态 | 记录时间 |
---|---|---|---|
1. timm | pytorch-image-models: CV领域的SOTA backbone | 持续更新中 | 2021-03-02 |
2. pytorch-lighting | PyTorchLightning: 待调研, 似乎是用于将Pytorch代码规范化 | 持续更新中 | 2021-03-11 |
3. bert4keras | bert4keras: 用几个文件实现transformer的代码, 长期维护, 兼容Keras与TensorFlow 1或2 | 持续更新中 | 2021-03-10 |
4. OfficeToPDF | OfficeToPDF: Office系列套件的文件转换为pdf格式, 纯C#实现. 可惜对于 | 不更新 | 2021-03-11 |
5.triNNity | triNNity: C++实现了80种卷积运算 | 持续更新中 | 2021-3-20 |
6. fairseq | fairseq: 序列模型包(github pytorch组织下的项目, 由facebook维护) | 持续更新中 | 2021-3-22 |
7. tesseract | 持续更新中(39.6k star) | 2021-4-15 | |
8. pdfkit | wkhtmltopdf是一个将html转换为pdf的库, pdfkit是一个基于它的python包 | 几乎不更新 | 2021-4-20 |
收藏夹里吃灰的网络文档
序号及链接 | 描述 | 记录时间 |
---|---|---|
python项目打包 | 2021-4-1 | |
latex作图包tikz例子 | 2021-4-14 | |
一些野博客,包,工具
序号及链接 | 描述 | 记录时间 |
---|---|---|
科学空间(苏建林), 一些关于AI尤其是NLP相关的博客值得一看, 特点是数学味道比较浓. 但实际上, 工程实践上也很细致 | 2021-6-2 | |
一些笔记包含PRML、Python-Cookbook等 | 2021-4-13 | |
一个用于做录制视频时ppt自动进行动画播放的工具 | 2021-4-13 | |
一门算法课程(附有很多python实现代码, 但似乎没有上课视频), CS161好像确实是一门stanford推荐的算法课程, 但不是这个网址 | 2021-4-14 | |
4. dash(plotly) | python模块, 可以生成交互式数据可视化Web应用, 基于 Flask (Python) + React 的 web 框架, 其中dash基于plotly | 2021-5-7 |
5. pyecharts | 2021-5-7 | |
阮一峰的博客 | 2021-6-2 | |
博客(包含Python、Linux等系列博客)、博客园排名前两百 | 2021-9-12 |
callback
callback函数: call back意指"回电话". 例子: 在编写一个对数组排序的函数时, 需要传入一个元素比较函数(这个比较函数就是callback function): 以下引用自algs4 part1 第二周ppt
Callback = reference to executable code.
Client passes array of objects to sort() function.
The sort() functioncallback calls back object's compareTo() method as needed
Implementing callbacks.(不同编程语言如何实现回调函数)
Java: interfaces.
C: function pointers.
C++: class-type functors. --- (例如std::qsort函数的元素比较参数传入的是一个重载了圆括号运算符的类)
C#: delegates.
Python, Perl, ML, Javascript: first-class functions. --- (当函数可以作为别的函数的参数, 即函数可以当作变量一样用时, 称这门语言拥有头等函数, 即first-class function)
杂录
OpenCL, OpenGL, OpenAL
C++ AMP, CUDA C, OpenCL
三者都可用于GPU并行计算
C++ AMP (C++ Accelerated Massive Parallelism): 跨GPU种类(只要支持DirectX 11), 只适用于windows
OpenCL: 跨GPU种类, 跨操作系统(windows/linux)
CUDA C: 只适用于Nvidia GPU, 跨操作系统(windows/linux)
Last updated