cnn

先看一个DNN, CNN, RNN的比较

深度 输入 参数 输出
DNN 神经元堆叠层数 向量 连接 向量
RNN 序列长度 向量 连接 向量
CNN 一组操作(卷积, 池化) 特征图 连接, 卷积核 特征图

Q:CNN中原图和卷积生成的特征图的位置是对应的吗?

CNN-feature-map

转至: [Link]

CNN一个牛逼的地方就在于通过感受野权值共享减少了神经网络需要训练的参数的个数。总之,卷积网络的核心思想是将:局部感受野权值共享(或者权值复制)以及时间或空间亚采样这三种结构思想结合起来获得了某种程度的位移、尺度、形变不变性。

adversarial-model

损失函数

在GAN中, Adversarial Model的功能是判别样本是否来自于Generative Model.

而Generative Model的目标是最大化的混淆Adversarial Model.

谈一谈熵

在迁移学习中, 领域判别损失如下:

assets/cross-entropy-loss/1543385011496.png

咋一看还看不懂了, 交叉熵损失也就是logloss不是这个样子的吗:

$$ H(x)\ =\ -\sum_{i}p_{i}\log q_{i}\ =\ -y\log{\hat{y}}-(1-y)\log(1-{\hat{y}}) $$ 其实也是啊, 可以从两个角度进行解释:

stay-foolish

本科考研的时候, 我可能看上去比别人更努力一些. 为什么? 因为我知道我基础并不好, 所以我需要更多的努力. 俗话说, 笨鸟先飞, 我深深的铭记这句话. 每当他人问我为什么这么努力时, 我会说因为底子差, 比较笨, 所以需要更多努力, 笨鸟先飞嘛.

迁移学习资源整理

2018-11-5

关于迁移学习, 领域适应, 对抗学习的论文, 代码汇总

2019-1-3 update

https://xiaosean.github.io/posts/

台湾一名学生的主页, 主要包含一些阅读笔记, 包含的领域有领域适应, 生成对抗网络等.

pytorch tutorial

tutorial 地址: pytorch: Training a Classifier.

当使用新的数据集进行测试时, 出现的问题及解决的方法.

Problem 1

error:

1
RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 0. Got 484 and 549 in dimension 2 at /pytorch/aten/src/TH/generic/THTensorMath.cpp:3616

location:

1
images, labels = data_iter.next()

solution:

1
2
数据集中的图像大小不一致.
需要使用`transforms.Resize([height, width])`把所有图像缩放到同一大小.

Problem 2

error:

1
RuntimeError: invalid argument 2: size '[-1 x 400]' is invalid for input with 719104 elements at /pytorch/aten/src/TH/THStorage.cpp:80

location:

1
x = x.view(-1, 16 * 5 * 5)

solution:

 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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
`Tensor.view()` 相当于 `numpy.reshape()` 方法, 即重塑形状.
其中`-1`表示依据其他维度进行推理得出的维度.
这里的参数需要计算得出, 不同的输入尺寸需要计算对应的参数!
---
我们来计算一下, 计算公式见下面的图片.
---
input size = 3*32*32
-
class Net_t1(nn.Module):
    def __init__(self):
        super(Net_t1, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = F.relu(self.conv1(x))
        x = self.pool(x)
        x = F.relu(self.conv2(x))
        x = self.pool(x)
        x = x.view(-1, 16 * 5 * 5)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x
-
1 torch.Size([4, 6, 28, 28]), conv1, (32 - 5) / 1 + 1 = 28, padding=0
2 torch.Size([4, 6, 14, 14]), pool, 28 / 2 = 14
3 torch.Size([4, 16, 10, 10]), conv2, (14 - 5) / 1 + 1 = 10, padding=0
4 torch.Size([4, 16, 5, 5]), pool, 10 / 2 = 5
5 torch.Size([4, 400]), view, 16 * 5 * 5 = 400
6 torch.Size([4, 120]), full_connect
7 torch.Size([4, 84]), full_connect
8 torch.Size([4, 10]), full_connect
---
input size = 3*224*224
-
class Net_t2(nn.Module):
    def __init__(self):
        super(Net_t2, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 53 * 53, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 31)

    def forward(self, x):
        x = F.relu(self.conv1(x))
        x = self.pool(x)
        x = F.relu(self.conv2(x))
        x = self.pool(x)
        x = x.view(-1, 16 * 53 * 53)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x
-
1 torch.Size([4, 6, 220, 220]), conv1, (224 - 5) / 1 + 1 = 220, padding=0
2 torch.Size([4, 6, 110, 110]), pool, 220 / 2 = 110
3 torch.Size([4, 16, 106, 106]), conv2, (110 - 5) / 1 + 1 = 106, padding=0
4 torch.Size([4, 16, 53, 53]), pool, 106 / 2 = 53
5 torch.Size([4, 44944]), view, 16 * 53 * 53 = 44944
6 torch.Size([4, 120]), full_connect
7 torch.Size([4, 84]), full_connect
8 torch.Size([4, 31]), full_connect

assets/pytorch_tutorial/1540383351683.png

GPU是如何加速计算的?

Nvidia

https://www.nvidia.cn/object/what-is-gpu-computing-cn.html

GPU 与 CPU 性能比较

理解 GPU 和 CPU 之间区别的一种简单方式是比较它们如何处理任务。CPU 由专为顺序串行处理而优化的几个核心组成,而 GPU 则拥有一个由数以千计的更小、更高效的核心(专为同时处理多重任务而设计)组成的大规模并行计算架构

Attention

传说BERT牛皮得不行, 好奇看了看.

里面用到了Transformer Block, 这是什么结构? 其实也就是Attention as all you need的Transformer.

别闹心

前些天又准备开始写那个计划了很久的小软件。虽然是一个小软件,但是对于我这种技术还没到家的人也显得有些困难,而且时间有限,写得一点也不舒服。好不容易在网上找了一个,功能完全能满足我的需要。但是因为是歪果仁写的,很多功能需要依赖Google Services(你要知道,在天朝是不允许的)另外还有一些界面不是很满意的地方,然后就想尽办法想去改变这些。为了达到自己心中的状态,花费了一天时间,也没有达到自己满意的状态(虽然有一些改观)。