$x_1 + y_2 = 120$
命名实体识别: BiLSTM 之上的 CRF 层 - 1
注:本文翻译自 CreateMoMo 个人博客,暂未取得作者授权,仅做学习交流使用,如若侵权,立即删除。点击底部阅读原文可直达原博客。
链表
1.定义链表节点的结构体时,C 和 C++ 写法的差异
2.初始化链表,带不带头节点
头指针
尾指针
首节点
尾节点
With 头节点
操作同一
Without 头节点
链表合并方便
头插法
尾插法
实现两个带头节点的链表 L1 和 L2进行连接,L2 连接到 L2 末尾。
将两个有序链表合并为一个有序链表。
C++ Primer Note 2 变量和基本类型
数据类型是程序的基础:它告诉我们数据的意义以及我们能在数据上执行的操作。
基本数据类型
C++ 定义了一套包括 算数类型 和 空类型 在内点基本数据类型。其中 算术类型 包括 字符、整数型、布尔值和 浮点数。空类型不对应具体的值,仅用于一些特殊点场合,例如最常见点是,当函数不返回任何值时使用空类型作为返回类型。
在 C++ 中初始化是一个异常复杂的问题。
在 C++ 中 初始化 和 赋值 是两种完全不同的操作。
列表初始化
1 | int unit_num = 0; |
作为 C++11 新标准的一部分,用花括号初始化变量的到来全面的应用。
复合类型
引用和指针
2.6 自定义数据结构
预处理器
确保头文件多次包含仍然能正常工作的常用技术是预处理器(Preprocessor),它由 C++ 语言从 C语言中继承而来。
C++ Primer Note 1
在 C++ 中,我们通过定义一个 类(Class)来定义自己的数据结构。一个类定义的一种数据类型,以及相关联的一组操作。类机制是 C++ 中最重要的特性之一。实际上, C++ 在设计之初的考虑就是能够定义使用上如同内置类型一样自然的 类类型(Class Type)。每一个类实际上都定义了一种新的类型,其类型名就是类名。
类的定义一般放在头文件中,通常使用.h
作为头文件的后缀。标准库头文件一般不带后缀。
对于 #include
指令,包含来自标准库的头文件时,用尖括号 (<>)
包围头文件名。对于不属于标准库的头文件,则用双引号 ("")
包围。
文件重定向:将标准输入和标准输出与命名文件相关联起来。1
$ addItem <input_file >output_file
成员函数(member function)定义为类的一部分的函数,有时候也被称为方法(Method)。
点运算符 .
调用运算符 ()
ML & DL 资源汇总
https://github.com/spro/practical-pytorch
https://github.com/jadore801120/attention-is-all-you-need-pytorch
https://github.com/rguthrie3/DeepLearningForNLPInPytorch
https://github.com/yunjey/pytorch-tutorial
https://github.com/aaron-xichen/pytorch-playground
https://zhuanlan.zhihu.com/p/28448135
NLP
CV
为什么使用 Cross-Entropy Error ?
在使用神经网络进行分类和预测的时候,使用 Cross Entropy Error 来 evaluate 模型比使用 classification error 和 mean squared error 能取得更好的效果。为什么呢?让我来解释一下。基本的 idea 是非常简单的,但是目前有很多对其 main idea 存在误解的看法。首先说明一下我们正在用一个神经网络模型来进行分类任务,比如通过性别、年龄、年收入等预测一个人的党派属性(属于民主党、共和党或者其他党派)。我们不是在用神经网络进行回归任务(其预测值为数值型),或者一个时间序列的神经网络,又或者是其他的什么神经网络。
现在假设你有三个训练数据的样本。你的神经网络在输出层使用 softmax 激活函数将输出值转换为概率。假设神经网络的输出值和样本的实际值如下所示:1
2
3
4
5| computed | targets | correct? |
| -------------- |----------------------|----------|
| 0.3 0.3 0.4 | 0 0 1 (democrat) | yes |
| 0.3 0.4 0.3 | 0 1 0 (republican) | yes |
| 0.1 0.2 0.7 | 1 0 0 (other) | no |
这个神经网络的分类误差为 $\frac{1}{3} = 0.33$ ,其对应的分类准确率为 $\frac{2}{3}=0.67$ 。注意到这个神经网络仅仅将前两个样本分类正确,在第三个样本上却错的离谱。现在来看看另外一个神经网络:1
2
3
4
5computed | targets | correct?
-----------------------------------------------
0.1 0.2 0.7 | 0 0 1 (democrat) | yes
0.1 0.7 0.2 | 0 1 0 (republican) | yes
0.3 0.4 0.3 | 1 0 0 (other) | no
这个神经网络的分类误差也是 $\frac{1}{3} = 0.33$ 。但是这个神经网络的表现要比第一个要好,因为它预测正确分类的概率值要大,且对于第三个样本也仅仅是差一点就预测对了,不像第一个预测的那么离谱。由此看来,分类误差是一个很“粗暴”的误差度量指标。
现在我们看看 cross-entropy error。第一个神经网络对于第一个样本的交叉熵误差为:
注意到在这个神经网络分类中,计算有一点“怪异”,因为除了一项以外都是 0 。(网络上几个讲如何计算交叉熵的解释还不错。)所以,第一个神经网络的平均交叉熵误差计算如下:
第二个神经网络的平均交叉熵误差为:
Notice that the average cross-entropy error for the second, superior neural network is smaller than the ACE error for the first neural network. The ln() function in cross-entropy takes into account the closeness of a prediction and is a more granular way to compute error.