Java常用类
常用类1.Object类1.1 clone方法clone方法:clone方法执行的是浅拷贝
注:clone方法创建了一个新对象,但这个新对象和原始对象的引用变量相同(浅拷贝)。
验证clone方法是浅拷贝的:
1234567891011121314151617181920212223242526272829303132333435363738394041class Main { // 声明静态内部类 Body,实现 Cloneable 接口以支持克隆 static class Body implements Cloneable { public Head head; public Body() {} public Body(Head head) { this.head = head; } @Override protected Object clone() throws CloneNotSupportedExc ...
Java基础语法
Java基础语法1.浮点型拓展1.1浮点类型的舍入误差浮点类型float, double的数据不适合在不容许舍入误差的领域
123456789101112131415161718192021222324252627282930public class Main { public static void main(String[] args) { // 定义一个float类型变量f并赋值为0.1 float f = 0.1f; // 定义一个double类型变量d并赋值为1.0除以10,即0.1 double d = 1.0 / 10; System.out.println(f == d); // 输出:false,由于精度差异,比较结果为false float d1 = 2131231231f; // 定义一个float类型变量d2,将d1加1后的结果赋值给d2 float d2 = d1 + 1; System.out.println ...
虚拟环境命令
1.查看虚拟环境conda info —envs2.查看虚拟环境的Python版本python —version3.创建虚拟环境conda create —name 环境名4.激活环境conda activate 环境名5.使用pip下载特定版本的Python包pip install package_name==version_number6.查看虚拟环境中有哪些包conda list -n 7.创建虚拟环境并安装python所需要的版本conda create -n your_env_name python=x.x8.删除虚拟环境conda env remove -n pytorch_env9.pip指定环境安装包pip install —target=/Anaconda/envs/env_name/Lib/site-packages -r requirements.txt
UNeXt
UNeXt1.网络设计
分成卷积阶段、标记化MLP阶段
编码器:进行两倍的下采样(2×2的最大池化层)
解码器:进行两倍的上采样(双线性插值),使用双线性插值而不是转置卷积,因为转置卷积基本上是可学习的上采样,会增加更多可学习参数。
C为超参数,一般取C1=32、C2=64、C3=128、C4=160、C5=256(C的取值比UNet小,减少了参数和计算)
注:充分考虑了模型维度对参数量和计算量的影响,采用了更少的参数设计
卷积阶段:每个卷积块配备了一个卷积层、一个批量归一化层和ReLU激活函数,使用3×3的卷积核大小,步幅为1,填充为1,用于保持特征图的空间分辨率不变,同时允许网络学习提取不同位置的特征信息。
Tokenized MLP Stage:
Conv:kernel_size=3,stride=2,padding=1,同时输出通道数(E)大于输入通道数(E为超参数,token数量),把特征图大小缩小了一半,增加了通道数
Shifted MLP:让模型更加关注 local 的信息
先使用0填充特征图,填充过后在通道维度做切割,再做平移操作,然后将各个切片 ...
C++(3)
1.运算符1.1 单目运算符重载1234567891011121314151617181920212223242526272829303132333435363738#include<iostream>using namespace std;class MyNumber{ private: int value; public: MyNumber(int v):value(v){}; MyNumber& operator++()//重载前置递增运算符++,前置递增运算符返回引用(允许修改原始对象并立即访问修改后的对象) { value++; return *this; } MyNumber operator++(int)//重载后置递增运算符++,返回原始对象的副本,int 参数只是为了区分前置和后置递增运算符 { MyNumber t ...
Swin-Transformer
Swin-Transformer1.网络结构
注:使用Transformer取代卷积操作是因为卷积操作在每个位置只关注输入图像的局部感受野,即一个固定大小的区域,而难以有效地捕捉全局信息,Transformer架构引入了自注意力机制,允许模型在一定范围内建立像素之间的关联,可以更好地处理全局信息。
2.W-MSA使用窗口多头自注意力,将输入的图片划分成不重叠的窗口,在这样的局部的窗口中计算自注意力,减少计算量,其对于图像的大小具有线性的复杂度
$Ω(MSA) = 4hwC^2 + 2(hw)^2C; (1)$$Ω(W-MSA) = 4hwC^2 + 2M^2hwC; (2)$
注:
h,w:输入图像的高,宽
M:一个窗口中含有MxM个patch
C:超参数(linear embedding将patch的特征维度变成C)
3.SW-MSA虽然基于窗口计算自注意力能够很好的解决计算量大的问题,但是现在窗口与窗口之间没有联系,就达不到全局建模的能力,所以作者就提出了移动窗口的方式去解决
从Layer1移动到Layer1+1后存在的问题:每个窗口中的patch数量不同,窗口数增大了,会影 ...
RNN
1.RNN(递归神经网络)RNN:用于处理序列数据和时间序列数据。RNN具有循环连接,允许信息在网络内部传递。
1.1 RNN的结构:
注:权重矩阵 W就是隐藏层上一次的值作为这一次的输入的权重
1.2 RNN的优劣RNN的主要优点包括:
1.处理序列数据:RNN能够有效地处理变长序列数据,因为它的隐藏状态可以捕获先前时间步的信息。
2.上下文理解:RNN能够理解上下文信息。
RNN的缺点:
1.长期依赖问题:由于梯度消失或梯度爆炸的问题,传统的RNN在处理长序列时可能会失去对远距离时间步的依赖性。
2.计算效率:RNN的计算效率较低,难以处理大规模数据和长序列。
2.LSTM(长短期记忆)LSTM:为了解决RNN在长序列训练过程中的梯度消失和梯度爆炸问题。
2.1 LSTM的结构原理:输入:Z、输入门$Z_i$、输出门 $Z_o$、遗忘门 $Z_f$
输出:a
输入门$Z_i$:决定了哪些新信息要被存储到细胞状态中。它也考虑前一个时间步的隐藏状态和当前时间步的输入,以及一个候选值,用于更新细胞状态。
遗忘门 $Z_f$:决定了哪些信息要被遗忘或丢弃。输出一个介于0和1之间的值,表 ...
常用损失函数
损失函数1.损失函数的概念及使用场景损失函数:用于衡量模型预测结果与真实结果之间的差异或误差。
损失函数的使用场景:
模型训练:通过最小化损失函数,可以调整模型的参数,使其能够更好地拟合训练数据,提高模型的性能。
模型评估:通过计算模型在验证集或测试集上的损失值,可以判断模型的泛化能力和预测准确度,较小的损失值通常表示模型更好地适应了新数据。
优化算法:通过计算损失函数对模型参数的梯度,可以确定参数的更新方向和步长,以便优化模型。
模型选择和比较:选择合适的损失函数可以帮助优化模型性能,并对不同模型进行比较和选择。
2.分类任务2.1 交叉熵损失函数(Cross-Entropy Loss)二分类问题:二元交叉熵损失函数(Binary Cross-Entropy Loss)
计算公式:\large L(y, p) = -[y * log(p) + (1 - y) * log(1 - p)]
注:真实标签为 y(可以是0或1),模型的预测概率为 p(0 ≤ p ≤ 1)
多分类问题:多元交叉熵损失函数(Multiclass Cross-Entropy Loss)
...
nnUnet
nnUnet1.预处理1.1 CropCrop:裁剪去除图片的0区域,使用非0区域作为训练数据,对MRI数据能够显著降低其大小。
1.2 ResampleResample:CNN无法理解体素间距的概念,重采样使得数据集体素间距一致(使像素间所对应的真实的物理距离一致)。
注:在医学图像中要关注图像的物理距离,这关系到器官的大小。
2.训练2.1 Patch-Sampling:Patch-Training:对不同的图像裁剪固定的大小,组成一个batch进行训练(用于解决在统一体素间距后,出现的数据分辨率不一致的问题)。
Sampling:为了防止Patch中的数据全部是背景,保证batch中的数据有1/3包含前景。
2.2 Cross-ValidationnnUnet在训练集上使用五折交叉验证进行评估
3.网络设计nnUnet与Unet的结构类似,但nnUnet会根据数据集自适应调整网络结构。
3.1 Cascade-UnetCascade-Unet:使用patch-training,不完整的图片导致感受野受限,为了解决该问题,设计出Cascade-Unet。
Cascade-Un ...
C++基础(2)
1.复制函数1.1 浅复制浅复制:仅复制对象的成员变量的值,而不复制对象中的指针所指向的内容。
注:如果原始对象中包含指针,浅复制将导致多个对象共享同一内存块,从而可能引发潜在的问题。当原始对象的析构函数被调用时,如果没有适当地管理共享资源,可能会导致重复释放内存或内存泄漏等问题。
1.2 深复制深复制:不仅复制对象的成员变量的值,还要递归地复制对象中的指针所指向的内容,创建一个全新的数据拷贝。
注:新对象与原始对象彼此独立,不共享内存块,但需要更多的计算和内存开销。
12345678910111213141516171819202122232425262728293031323334353637#include <string.h> #include<iostream>using namespace std; class String{ private: char *data; public: String(const char *str) { data=new char[strlen(str)]+1; ...