NoTrouble's Blog

我们一路奋战,不是为了改变世界,而是为了不让世界改变我们


  • 首页

  • 标签

  • 分类

  • 歌单

  • 搜索

矩阵方程AX=b

发表于 2023-10-07 | 分类于 Linear_Algebra

1.4 矩阵方程$Ax=b$

  线性代数中一个基本的思想是把向量的线性组合看作矩阵与向量的积.

定义 若$A$是$m\times n$矩阵,它的各列为$a_1,\cdots,a_n$.若$x$是$\mathbb{R}^n$中的向量,则$A$与$x$的积(记为$Ax$)就是$A$的各列以$x$中对应元素为权的线性组合,即

  注意$Ax$仅当$A$的列数等于$x$中的元素个数时才有定义.

阅读全文 »

向量方程

发表于 2023-09-24 | 分类于 Linear_Algebra

1.3 向量方程

  线性方程组的重要性质都可用向量概念与符号来描述。

$\mathbb{R}^2$中的向量

  仅含一列的矩阵称为列向量,或简称向量.包含两个元素的向量如下所示.
        $u=\begin{bmatrix}
3 \\
-1 \\
\end{bmatrix}$,$v=\begin{bmatrix}
0.2 \\
0.3 \\
\end{bmatrix}$,$w=\begin{bmatrix}
w_1 \\
w_2 \\
\end{bmatrix}$
其中$w_1$和$w_2$是任意实数.所有两个元素的向量的集记为$\mathbb{R}^2$,$\mathbb{R}$表示向量中的元素是实数,而指数2表示每个向量包含两个元素.
  $\mathbb{R}^2$中两个向量相等当且仅当其对应元素相等.因此,$\begin{bmatrix} 4\\ 7 \\ \end{bmatrix}$和$\begin{bmatrix} 7\\ 4 \\ \end{bmatrix}$是不相等的,因为$\mathbb{R}^2$中的向量是实数的有序对.

阅读全文 »

行化简与阶梯形矩阵

发表于 2023-09-21 | 分类于 Linear_Algebra

1.2 行化简与阶梯形矩阵

  行化简算法可用于任意矩阵,不管它是否为某一方程组的增广矩阵.首先需要引入两类重要的矩阵,包含1.1节中的“三角形”矩阵;在以下的定义中,矩阵中非零行或列指矩阵中至少包含一个非零元素的行或列;非零行的先导元素是指该行中最左边的非零元素.

定义 一个矩阵称为阶梯形(或行阶梯形),若它有以下三个性质:

  1. 每一非零行都在每一零行之上.
  2. 某一行的先导元素所在的列位于前一行先导元素的右边.
  3. 某一先导元素所在列下方元素都是零.
    若一个阶梯形矩阵还满足以下性质,则称它为简化阶梯形(或简化行阶梯形)
  4. 每一非零行的先导元素是1
  5. 每一先导元素1是该元素所在列的唯一非零元素.

  若一个矩阵具有阶梯形(简化阶梯形),就称它为阶梯形(简化阶梯形)矩阵.

阅读全文 »

线性方程组

发表于 2023-09-18 | 分类于 Linear_Algebra

1.1 线性方程组

  包含变量$x_1,x_2,\cdots ,x_n$的线性方程是形如:

的方程,其中$b$与系数$a_1,a_2\cdots,a_n$是实数或复数,通常是已知数.下标$n$可以是任意正整数.
  方程

都是线性方程。
  方程

都不是线性方程。

阅读全文 »

Advanced CNN

发表于 2023-08-16 | 分类于 DeepLearning

Advanced CNN

GoogleNet

实现复杂神经网络的思想:在面向对象语言中构造类,把相同的块封装成一个类来减少代码冗余

Inception Module
在构建神经网络中,往往对于网络的超参数比较难以选择,例如卷积核的大小。
可以并行使用卷积核,神经网络能够自动进行权重的选择,找到最优的卷积组合。

  1. concarenate:把张量拼接起来,必须保证特征的高度和宽度
  2. 均值池化:
  3. 信息融合:本质就是得到的值通过某些运算得到信息
  4. 1*1卷积:常用于改变特征通道数

卷积运算参数量计算:
$192@28\times 28 $ -> $5\times 5$Convolution -> $32@28\times 28$
Operations:$5^2\times 28^2 \times 192 \times 32$

代码实现Inception Module

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
# -*- coding: UTF-8 -*-
import torch
import torch.nn as nn
import torch.nn.functional as F

class InceptionA(nn.Module):
def __init__(self,in_channels):
super(InceptionA,self).__init__()
self.branch1x1 = nn.Conv2d(in_channels=in_channels,out_channels=16,kernel_size=1)

self.branch5x5_1 = nn.Conv2d(in_channels=in_channels,out_channels=16,kernel_size=1)
self.branch5x5_2 = nn.Conv2d(in_channels=16,out_channels=24,kernel_size=5,padding=2)

self.branch3x3_1 = nn.Conv2d(in_channels=in_channels,out_channels=16,kernel_size=1)
self.branch3x3_2 = nn.Conv2d(in_channels=16,out_channels=24,kernel_size=3,padding=1)
self.branch3x3_3 = nn.Conv2d(in_channels=24,out_channels=24,kernel_size=3,padding=1)

self.branch_pool = nn.Conv2d(in_channels=in_channels,out_channels=24,kernel_size=1)

def forward(self,x):
branch1x1 = self.branch1x1(x)

branch5x5 = self.branch5x5_1(x)
branch5x5 = self.branch5x5_2(branch5x5)

branch3x3 = self.branch3x3_1(x)
branch3x3 = self.branch3x3_2(branch3x3)
branch3x3 = self.branch3x3_3(branch3x3)

branch_pool = F.avg_pool2d(x,kernel_size=3,stride=1,padding = 1)
branch_pool = self.branch_pool(branch_pool)

out_puts = [branch1x1,branch5x5,branch3x3,branch_pool]

return torch.cat(out_puts,dim=1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Net(nn.Module):
def __init__(self):
super(Net,self).__init__()
self.conv1 = nn.Conv2d(1,10,kernel_size=5)
self.conv2 = nn.Conv2d(88,20,kernel_size=5)

self.incep1 = InceptionA(in_channels=10)
self.incep2 = InceptionA(in_channels=20)

self.mp = nn.MaxPool2d(2)
self.fc = nn.Linear(1408,10)

def forward(self,x):
in_size = x.size(0)
x = F.relu(self.mp(self.conv1(x)))
x = self.incep1(x)
x = F.relu(self.mp(self.conv2(x)))
x = self.incep2(x)

x = view(in_size,-1)
x = self.fc(x)

return x

Basic CNN

发表于 2023-08-14 | 分类于 DeepLearning

Basic CNN

基本概念

  1. 卷积:保留输入的空间特征
  2. 下采样:通道数不变,改变特征层的高度和宽度。目的就是减少数据量
  3. 全连接层:映射指定的特征维度

图像:$C\times W \times H$

卷积过程

单通道:卷积核与对应输入对应元素相乘求和,得到一个元素,然后从左至右,从上至下移动。
多通道:每个通道与对应卷积核做单通道运算,最终按元素求和;此外若想输出多个通道的特征层,则需要多个卷积核,可以增加通道数。

阅读全文 »

PyTorch解决多分类问题

发表于 2023-08-05 | 分类于 DeepLearning

PyTorch解决多分类问题

softmax函数

糖尿病数据集分类为0和1,MNIST数据集中有10个分类。

神经网络希望输出之前带有竞争性的结果,即所有概率之和为1,且所有概率均大于0,使用softmax可以实现这两个特点。
softmax函数
$p(y = i) = \frac{e^{Z_i}}{\Sigma_{j=0}^{K-1}e^{Z_j}},i\in \{0,…,K-1\}$

阅读全文 »

PyTroch加载数据集

发表于 2023-08-02 | 分类于 DeepLearning

PyTroch加载数据集

使用mini-batch的原因

SGD(随机梯度下降):只使用一个样本,具有较好的随机性,可以克服鞍点的问题,但是训练的时间较长
BATCH:最大化利用向量计算的优势,提升计算速率,但性能上会遇到问题。
解决办法:使用mini-batch来均衡速率与性能。

阅读全文 »

PyTorch处理多维特征输入

发表于 2023-07-31 | 分类于 DeepLearning

PyTorch处理多维特征输入

使用sklearn包中的糖尿病数据集
路径为:conda\\lib\\site-packages\\sklearn\\datasets\\data

阅读全文 »

LogisticRegression

发表于 2023-07-29 | 分类于 DeepLearning

LogisticRegression 逻辑斯蒂回归

Pytorch torchversion

torchversion工具包提供数据集

1
2
3
4
5
6
7
8
9
10
import torchvision

# MINIST数据集 手写数字识别
train_set = torchvision.datasets.MNIST(root='./datast/minist',train=True,download=True)
test_set = torchvision.datasets.MNIST(root='./datast/minist',train=False,download=True)


# cifar10数据集 10分类数据集,猫、狗...
train_set = torchvision.datasets.CIFAR10(root='./datast/cifar10',train=True,download=True)
train_set = torchvision.datasets.CIFAR10(root='./datast/cifar10',train=False,download=True)

阅读全文 »
12…13>

130 日志
31 分类
51 标签
GitHub E-Mail
© 2024 NoTrouble