Unet
Unet网络结构
网络左边为contracting path(收缩路径),右边为expansive path(扩张路径)。
注:
1.Contracting path为常规的3×3卷积结构,与ReLU,还有2×2的max pooling。每次下采样,都将featuremap的channel变为之前的两倍。
2.Expansive path为上采样过程,每次都是22的上采样卷积过程,并且将相应的feature channel减少为之前的一半。
FCN
1.FCN网络1.1 核心思想
不含全连接层的全卷积网络,可适应任意尺寸输入;(可以为不同大小和分辨率的图像生成像素级别的预测)
反卷积层增大图像尺寸,输出精细结果;
结合不同深度层结果的跳级结构,确保鲁棒性和精确性。
1.2 网络结构
注:
1.全卷积部分为一些经典的CNN网络(如VGG,ResNet等),用于提取特征。
2.反卷积部分则是通过上采样得到原尺寸的语义分割图像。
3.FCN的输入可以为任意尺寸的彩色图像,输出与输入尺寸相同,通道数为n(目标类别数)+1(背景)。
2.实例2.1 创建一个全卷积网络12345678910111213141516171819202122232425262728293031323334%matplotlib inlineimport torchimport torchvisionfrom torch import nnfrom torch.nn import functional as Ffrom d2l import torch as d2l#加载预训练的ResNet-18模型来提取图像特征,并查看该模型的最后三个子模块的结构和参数pre ...
图像分割基础
1.图像分割语义分割:为每个像素都打上标签,只区分类别,但不区分类别中的具体单位。
实例分割:不光要区别类别,还要区分类别中的每一个个体。
2.Focal lossfocal loss从样本难易分类角度出发,解决样本非平衡带来的模型训练问题。
focal loss的具体形式:\large-\alpha(1-y_{pred})^{\gamma}y_{true}log(y_{pred})-(1-\alpha)y_{pred}^{\gamma}(1-y_{true})log(1-y_{pred})
注:
1.$\large\gamma$通常设置为2,$\large(1-y_{pred})^{\gamma}$相当于样本的难易度权值,$\large\alpha$为正负样本的比例
2.为了防止难易样本的频繁变化,应当选取小的学习率。防止学习率过大,造成w变化较大从而引起 $\large y_{pred}$的巨大变化,造成难易样本的改变。
3.转置卷积转置卷积:用来增大输入的高宽
3.1 转置卷积的计算方式计算方式一:
计算方式二(填充为0,步幅为1):
一般情况:
基本的转置卷积运算:
12 ...
C++基础(1)
1.常量1.1 使用 const 将变量声明为常量1const double pi = 3.14;
1.2 使用 constexpr 定义常量表达式12constexpr double GetPi() {return 3.14;}constexpr double TwicePi(){return 2* GetPi();}
1.3 使用关键字 enum 声明的枚举常量1234567891011121314151617181920212223#include<bits/stdc++.h>using namespace std;enum direct{ North=5, South, East, West };int main(){ direct f=North; cout<<f<<endl; cout<<South<<endl; cout<<East<< ...
torchvision.transforms使用详解
torchvision.transforms1. torchvision.transforms.Composetorchvision.transforms.Compose:是一个用于组合多个图像预处理操作的类,将多个预处理操作串联在一起,以便在数据加载时对图像进行连续的处理。
torchvision.transforms.Compose(transforms) 的参数是一个列表,其中包含要进行的图像预处理操作。
1234567891011121314import torchvision.transforms as transforms# 定义图像预处理操作transformations = transforms.Compose([ transforms.Resize(256), # 调整图像大小为256x256 transforms.RandomCrop(224), # 随机裁剪为224x224 transforms.RandomHorizontalFlip(), # 随机水平翻转 transforms.ToTen ...
线性回归
线性回归1.线性回归的从零开始实现1.1 构造数据集以参数w=[2,−3.4]⊤、b=4.2和噪声项ϵ生成数据集。
标签:y=Xw+b+ϵ
torch.normal():生成一个服从正态分布的随机张量。
torch.matmul:计算两个张量矩阵相乘(可以用利用广播机制进行不同维度的相乘操作)。
1234567891011121314def synthetic_data(w, b, num_examples): """生成 y = Xw + b + 噪声。""" X = torch.normal(0, 1, (num_examples, len(w))) #torch.normal()生成一个服从正态分布(均值为0,标准差为1)的随机张量X,大小为(num_examples, len(w)) #其中num_examples是样本数量,len(w)是特征数量。 y = torch.matmul(X, w) + b #函数通过矩阵乘法计算目标变量y。y是由X和w之间的线性关系构造的,并且加上 ...
数据预处理
数据预处理1.创建csv文件1.1 创建目录os.makedirs(): 这是一个用于递归创建目录的函数。它接受一个路径作为输入,并创建路径中所有缺失的目录
exist_ok=True: 这是os.makedirs()函数的一个可选参数。当设置为True时,如果目标目录已经存在,函数不会引发错误,而是默默地继续执行。
os.path.join():函数来连接两个路径部分:”..”(表示父目录) 和 “data”
1234os.makedirs(os.path.join('..', 'data'), exist_ok=True)#创建一个名为"data"的目录,该目录位于当前工作目录的父目录中data_file = os.path.join('..', 'data', 'house_tiny.csv')#创建一个名为data_file的变量,指向当前工作目录的上一级目录中的"data"目录下的"house_tiny.csv"文件
...
神经网络(1)
神经网络1. 激活函数激活函数:作用在于决定如何来激活输入信号的总和。
如,感知机的数学形式:
其亦可表达为:
h(x)函数会将输入信号的总和转换为输出信号,即为激活函数。
1.1 阶跃函数激活函数:以阈值为界,一旦输入超过阈值,就切换输出。
12345#当输入超过0时,输出1,否则输出0的阶跃函数def step_function(x): y = x > 0 return y.astype(np.int) #用astype()方法转换NumPy数组的类型
阶跃函数的图形
123456789import numpy as npimport matplotlib.pylab as pltdef step_function(x): return np.array(x > 0, dtype=np.int)x = np.arange(-5.0, 5.0, 0.1)y = step_function(x)plt.plot(x, y)plt.ylim(-0.1, 1.1) # 指定y轴的范围plt.show()
1.2 sigmoid函数sigmoid函数: $h(x)={ ...
matplotlib
1.plot()函数plot()函数会根据列表中的数据尝试绘制出有意义的图形
参数:
1234567x = np.arange(-6,6,0.1)#起点:-6,终点:6,步长:0.1y1 = np.sin(x)y2 = np.cos(x)plt.plot(x,y1)plt.plot(x,y2)plt.show()
plt的title()方法:添加图标标题
xlabel()、ylabel()方法:为每条轴设置标题、大小等参数
tick_params()方法:指定刻度标记的大小
12345678910x = np.arange(-6,6,0.1)#起点:-6,终点:6,步长:0.1y1 = np.sin(x)y2 = np.cos(x)plt.plot(x,y1)plt.plot(x,y2)plt.title("Figure 1",fontsize = 18,color = "red")plt.xlabel("x value",fontsize = 14)plt.ylabel("y value",fontsi ...
感知机
感知机感知机的概念 感知机是一种线性分类模型,属于判别模型,其使用一个线性方程所对应的超平面,将特征空间分成两部分。
例:有两个输入的感知机:
x1、x2是输入信号,y是输出信号,w1、w2是权重。图中的○称为“神经元”或者“节点”。输入信号被送往神经元时,会被分别乘以固定的权重(w1x1、w2x2)。神经元会计算传送过来的信号的总和,当这个总和超过了某个界限值时,才会输出1,否则输出0(二分类)。这也称为“神经元被激活”。这里将这个界限值称为阈值,用符号θ表示。
用数学公式表示为:
注:感知机的多个输入信号都有各自固有的权重,权重越大,对应该权重的信号的重要性就越高
单层感知机的局限性:单层感知机的局限性就在于它只能表示由一条直线分割的空间。(单层感知机无法分离非线性空间)
多层感知机:多层感知机可以表示非线性空间
感知机的损失函数感知机的损失函数:误分类点到超平面的距离,即$-{1 \over {||w||}}\sum \limits_{x_i\in M} y_i(w*x_i+b)$,其中M为误分类点的集合
注:对于误分类点,$y_i(wx_i+b)$<0 ...