草庐IT

Pytorch学习笔记(5):torch.nn---网络层介绍(卷积层、池化层、线性层、激活函数层)

目录 一、卷积层—ConvolutionLayers 1.1 1d/2d/3d卷积1.2卷积—nn.Conv2d()nn.Conv2d1.3 转置卷积—nn.ConvTransposenn.ConvTranspose2d 二、池化层—PoolingLayer(1)nn.MaxPool2d(2)nn.AvgPool2d(3)nn.MaxUnpool2d 三、线性层—LinearLayer nn.Linear 四、激活函数层—ActivateLayer(1)nn.Sigmoid (2)nn.tanh(3)nn.ReLU(4)nn.LeakyReLU(5)nn.PReLU(6)nn.RReLU前期回

pytorch中的reshape()、view()、nn.flatten()和flatten()

在使用pytorch定义神经网络结构时,经常会看到类似如下的.view()/flatten()用法,这里对其用法做出讲解与演示。torch.reshape用法reshape()可以由torch.reshape(),也可由torch.Tensor.reshape()调用,其作用是在不改变tensor元素数目的情况下改变tensor的shape。torch.reshape()需要两个参数,一个是待被改变的张量tensor,一个是想要改变的形状。torch.reshape(input,shape)→Tensorinput(Tensor)-要重塑的张量shape(python的元组:ints)-新形状

【pytorch】二元交叉熵损失函数 nn.BCELoss() 与 torch.nn.BCEWithLogitsLoss()

nn.BCELoss1、nn.BCELoss2、使用场景3、nn.BCELoss计算公式4、torch.nn.BCEWithLogitsLoss()与nn.BCELoss()的区别5、torch.nn.BCELoss()函数6、torch.nn.BCEWithLogitsLoss()函数1、nn.BCELossnn.BCELoss()是二元交叉熵损失函数(BinaryCrossEntropyLoss)适用于二分类问题,即模型的输出为一个概率值,表示样本属于某一类的概率标签为二元值:0或1nn.BCELoss()计算的是二元交叉熵损失,也称为对数损失,它将模型预测值和真实标签值之间的差异转化为一

torch.nn.functional.grid_sample(F.grid_sample)函数的说明 & 3D空间中的点向图像投影的易错点

由于二者有一定共通之处,因此放在一篇文章内介绍。1.关于torch.nn.functional.grid_sample函数的说明(F.grid_sample)  该函数的作用是在图像/体素空间中采样特征。1.1输入和输出:变量名数据类型默认值含义备注inputTensor-原始图像/体素空间的特征形状需为(B,C,H,W)(B,C,H,W)(B,C,H,W)或(B,C,D,H,W)(B,C,D,H,W)(B,C,D,H,W),分别表示在图像中采样特征和在3D体素空间中采样特征gridTensor-采样图像/体素空间的归一化坐标形状需为(B,h,w,2)(B,h,w,2)(B,h,w,2)(对应

nn.Dropout、DropPath的理解与pytorch代码

文章目录理论dropoutDropPath代码问题:dropout中为什么要除以keep_prob?​在vit的代码中看到了DropPath,想知道DropPath与nn.Dropout()有什么区别,于是查阅相关资料记录一下。理论dropout​dropout是最早的用于解决过拟合的方法,是所有drop类方法的大前辈。dropout在12年被Hinton提出,并且在《ImageNetClassificationwithDeepConvolutionalNeuralNetwork》工作AlexNet中使用到了dropout。原理:在前向传播的时候,让某个神经元激活以概率1-keep_prob(

loss = nn.CrossEntropyLoss(reduction=‘none‘)

nn.CrossEntropyLoss()函数是PyTorch中用于计算交叉熵损失的函数。其中reduction参数用于控制输出损失的形式。当reduction='none'时,函数会输出一个形状为(batch_size,num_classes)的矩阵,表示每个样本的每个类别的损失。当reduction='sum'时,函数会对矩阵求和,输出一个标量,表示所有样本的损失之和。当reduction='elementwise_mean'时,函数会对矩阵求平均,输出一个标量,表示所有样本的平均损失。在您的例子中,在使用reduction='none'时无法训练,是因为需要一个标量来表示整个训练集的损失

nn.LayerNorm解释

这个是层归一化。我们输入一个参数,这个参数就必须与最后一个维度对应。但是我们也可以输入多个维度,但是必须从后向前对应。importtorchimporttorch.nnasnna=torch.rand((100,5))c=nn.LayerNorm([5])print(c(a).shape)a=torch.rand((100,5,8,9))c=nn.LayerNorm([9])print(c(a).shape)a=torch.rand((100,5,8,9))c=nn.LayerNorm([8,9])print(c(a).shape)a=torch.rand((100,5,8,9))c=nn.L

【手动实现nn.Linear 】

线性变换参数可视化图classLinearLayer(nn.Module):def__init__(self,input_dim,output_dim):super(LinearLayer,self).__init__()self.weights=nn.Parameter(torch.Tensor(output_dim,input_dim))self.bias=nn.Parameter(torch.Tensor(output_dim))#初始化权重和偏置项self.reset_parameters()defreset_parameters(self):nn.init.xavier_unifor

用于内存有效张量的设计技巧NN

我使用python/numpy在CPU上运行一个简单的卷积神经网络,并在CPU上使用TensorFlow来加载磁盘的数据并进行准备。python/numpy零件几乎没有预期的记忆力,因为我只加载了321MB图像。但是,运行sess.run(AdamOptimizer)记忆使用率在天文学上达到峰值,如下所示memory_profiler输出,显示4个训练周期和一个测试周期。12GB峰限制了我的批次的大小,同时训练网络的数量或我的图层的大小。我相信这个峰与从Python到TF或正向激活的数据传输有关sess.run(accuracy)陈述。我可能设计不良的CNN图吗?有人可以指出我应该牢记的规则,

nn.BatchNorm讲解,nn.BatchNorm1d, nn.BatchNorm2d代码演示

1nn.BatchNorm       BatchNorm是深度网络中经常用到的加速神经网络训练,加速收敛速度及稳定性的算法,是深度网络训练必不可少的一部分,几乎成为标配;        BatchNorm即批规范化,是为了将每个batch的数据规范化为统一的分布,帮助网络训练,对输入数据做规范化,称为Covariateshift;       数据经过一层层网络计算后,数据的分布也在发生着变化,因为每一次参数迭代更新后,上一层网络输出数据,经过这一层网络参数的计算,数据的分布会发生变化,这就为下一层网络的学习带来困难--也就是在每一层都进行批规范化(InternalCovariateshif