从有代码的课程开始讨论

【Pytorch深度学习实践】B站up刘二大人之LinearModel -代码理解与实现(1/9)

【Pytorch深度学习实践】B站up刘二大人之 Gradient Descend-代码理解与实现(2/9)

【Pytorch深度学习实践】B站up刘二大人之 BackPropagation-代码理解与实现(3/9)

【Pytorch深度学习实践】B站up刘二大人之LinearRegressionwithPyTorch-代码理解与实现(4/9)

【Pytorch深度学习实践】B站up刘二大人之LogisticsRegression-代码理解与实现(5/9)

【Pytorch深度学习实践】B站up刘二大人之MultipleDimensionLogisticRegressionModel-代码理解与实现(6/9)

【Pytorch深度学习实践】B站up刘二大人之Dataset&DataLoader-代码理解与实现(7/9)

【Pytorch深度学习实践】B站up刘二大人之SoftmaxClassifier-代码理解与实现(8/9)

【Pytorch深度学习实践】B站up刘二大人之BasicCNN & Advanced CNN -代码理解与实现(9/9)

Lecture02——Linear Model

详细过程:

  • 本课程的主要任务是构建一个完整的线性模型:

    • 导入numpymatplotlib库;
    • 导入数据 x_datay_data;
    • 定义前向传播函数:
      • forward:输出是预测值y_hat
    • 定义损失函数:
      • loss:损失函数定义为MSE:均方根误差
    • 创建两个空列表,因为后面绘图的时候要用:
      • 分别是横轴的w_list和纵轴的mse_list
    • 开始计算(我觉得这里没有训练的概念,只是单纯的计算每一个数据对应的预测值,然后让预测值跟真是y值根据MSE求损失):
      • 外层循环,创建40个横坐标自变量:

        • w表示;
        • 在0.0~4.0之间均匀取点,步长0.1;
      • 内层循环:核心计算内容
        • 从数据集中,按数据对儿取出自变量x_val和真实值y_val;
        • 先调用forward函数,计算预测值 w*x(y_hat)
        • 调用loss函数,计算单个数据的损失数值;
        • 累加损失,并记下来(此处要提前初始化一个值为0的变量,后面才能不报错);
        • 随意打印想要看到的内容,一般是打印x_valy_valloss_val
        • 在外层循环中(也就是每一个数据对儿计算的时候),都要把计算的结果,放进之前的空列表,用于绘图;
  • 在获得了打印所需的数据列表只有,模式化地打印图像:

plt.plot(w_list, mse_list)
plt.xlabel(‘w’)
plt.ylabel('Loss)
plt.show()

备注:本例中,只有计算的过程,并没有训练一说,我想我写到这,线性模型这个代码,我才算是全懂了。

详情请看:

【Pytorch深度学习实践】B站up刘二大人之LinearModel -代码理解与实现(1/9)


Lecture03——Gradient Descent 梯度下降(cost function)

说在前面:这部分分两块,一个是基于cost function的,也就是全数据集上的代价函数,另一个是从中随机抽取一个数据,基于loss function的,也就是损失函数,二者在forward、loss的函数构建、训练过程中的数据加载环节都有所区别,要注意区分,搞清搞透;

详细过程:

  • 本课程的主要任务是构建第一个带有初始权重和训练过程的梯度下降模型:

    • 导入numpymatplotlib库;
    • 导入数据 x_datay_data;
    • 定义前向传播函数:
      • forward:输出是预测值y_hat
    • 定义代价函数:
      • cost:损失函数定义为MSE:均方根误差
      • 此处要使用循环,把数据集中的数据对儿,一组一组地取出来,再做计算;
      • 返回值需要归一化至单个数据的损失值;
    • 定义梯度计算函数:
      • 这个函数gradient很有意思,也不简单:需要根据反向传播,计算出代价函数对于权重的梯度,计算结果为grad += 2 * x * (x * w - y);
      • 返回值同样需要归一化至单个数据的梯度;
    • 创建两个空列表,因为后面绘图的时候要用:
      • 分别是横轴的w_list和纵轴的mse_list
    • 开始训练:
      • 循环的次数epoch可以自定义:

        • 首先调用代价函数cost计算数据集的代价值,注意,这里要传入所有数据,而不是再去用·zip·函数配合·for·循环每次取一个,因为在`cost·函数当中,已经写过单个数据对儿从数据集调出的过程;
        • 再调用梯度计算函数grad,与上个函数相同;
        • 核心来了——更新权重:
          • 就是最经典的权重更新公式,用现有权重,减去学习率乘以梯度的乘积,每轮(epoch)训练都要循环更新;
          • 此处尚不涉及权重清零的问题,这个问题后面也要详细记录,务必搞得非常透彻,因为它涉及到计算图的是否构建,以及tensor数据类型具有data和grad两个属性的问题(TBD);
          • 随意打印想要看到的内容,一般是打印x_valy_valloss_val
          • 在循环中要把计算的结果,放进之前的空列表,用于绘图;
  • 在获得了打印所需的数据列表只有,模式化地打印图像:
    -略

Lecture03——Gradient Descent 梯度下降(loss function)

【Pytorch深度学习实践】B站up刘二大人之 Gradient Descend-代码理解与实现(2/9)

详细过程:

  • 回头仔细看了看代码,其实区别并不大;
  • 之前没理解的原因,不在于costloss的区别,而在于权重更新那里我没有懂透;
  • 区别:
    • forward函数没有变化;
    • lossgradient函数有变化,把cost当中,原本需要把数据对儿从数据集中取出的过程,全部转移到训练过程中,这个过程不是难点,不过刚动手写的时候,就会很困惑,尤其是别的地方也有困惑,就觉得难度很大,应付不过来;

详情请看:

【Pytorch深度学习实践】B站up刘二大人之 Gradient Descend-代码理解与实现(2/9)


Lecture04——BackPropagation 反向传播

【Pytorch深度学习实践】B站up刘二大人之 BackPropagation-代码理解与实现(3/9)

  • 本课程的主要任务是利用torch包的requires_grad自动求导,构建反向传播模型:

    • 导入numpymatplotlib库;

    • 导入数据 x_datay_data

    • 初始化一个w数值,这里要用torch.Tensor构建;

    • wrequires_grad 参数打开;(重点)

    • 定义前向传播函数:

      • forward:输出是预测值y_hat
    • 定义损失函数:

      • loss:损失函数定义为MSE:均方根误差
    • 定义梯度计算函数:

      • gradient: 需要根据反向传播,计算出代价函数对于权重的梯度,计算结果为grad += 2 * x * (x * w - y);
    • 创建两个空列表,因为后面绘图的时候要用:

    • 开始训练:

      • 外层循环,循环的次数epoch可以自定义:
      • 内层循环:核心计算内容
        • 从数据集中,按数据对儿取出自变量x_val和真实值y_val;
        • 直接调用loss函数,计算单个数据的损失数值;
        • backward函数直接对损失值做反向传播;
        • 核心来了——更新权重:
          • wgrad.data 做更新,这是重要一步,也是内容非常丰富的地方,不仅是更新了权重,里面还有关于 tensor 的其他基础知识, datagrad 的关系, data 是不会构建计算图的,而 grad 是在构建计算图模型;
        • 此处仍不涉及权重清零的问题(TBD);
        • 随意打印想要看到的内容,一般是打印x_valy_valloss_val
        • 在循环中要把计算的结果,放进之前的空列表,用于绘图;
  • 在获得了打印所需的数据列表只有,模式化地打印图像:

详情请看:

【Pytorch深度学习实践】B站up刘二大人之 BackPropagation-代码理解与实现(3/9)


Lecture05 —— LinearRegressionWithPyTorch 利用PyTorch实现线性回归模型

【Pytorch深度学习实践】B站up刘二大人之LinearRegressionwithPyTorch-代码理解与实现(4/9)

说在前面:

  • 这部分内容有不少更新指出:
    (1)构建数据集用到了torch中的Tensor;
    (2)通过创建python中的线性模型类,并实例化它,来构建模型;
    (3)损失函数通过torch.nn库调用其中的MSELoss;
    (4)优化器通过调用torch.optim库中的SGD实现;
    (5)训练过程稍有变化,这里面第一次出现了梯度清零这个问题,用到的是优化库optim中的zero_grad()方法;

详细过程:

  • 本课程的主要任务是利用torch包的requires_grad自动求导,构建反向传播模型:

    • 导入numpymatplotlibostorch库;

    • 导入数据 x_datay_data,注意这里有变化,用到了torch中的Tensor格式,与04课程相同,所以才会出现datagrad的重要区别;

    • 创建LinearModel类模型:

      • 初始化init中,只有一个linear函数;注意要提前继承(这一步直接写,不深究);
      • 前向传播forward方法,这是把之前的前向传播函数,拿进来做了类中的一个方法,返回预测值;
    • 实例化一个模型model

    • 创建损失函数:通过调用torch.nn库中的MSELoss实现;

    • 创建优化器:通过调用torch.optim库中的SGD实现;

    • 创建两个空列表,因为后面绘图的时候要用:

    • 创建循环,开始训练:循环的次数epoch可以自定义

      • y_hat用模型model计算;
      • 损失loss用创建好的损失函数计算;
      • 先用优化器对梯度清零(重要,要清楚什么时候该清零,为什么清零,原理是什么);
      • 令损失反向传播loss.backward
      • 执行一步权重更新操作,用到的函数optimizer.step( )很奇特,这里非常关键,理解起来不容易,见下面的链接;
    • 在循环中要把计算的结果,放进之前的空列表,用于绘图;

    • 在获得了打印所需的数据列表只有,模式化地打印图像:

详情请看:

【Pytorch深度学习实践】B站up刘二大人之LinearRegressionwithPyTorch-代码理解与实现(4/9)

本节重要参考:

理解optimizer.zero_grad(), loss.backward(), optimizer.step()的作用及原理


Lecture06 —— LogisticsRegression 逻辑回归模型

说在前面:

  • 虽然这叫回归模型,但是它分两种:能用于回归,也能用于分类;
  • 本节是讲的二分类,背景是:学习多少小时能够考试通过;
  • 训练好模型以后,直接用来预测,4小时的学习,能够通过的概率是多大?

详细过程(本节开始,只说与之前代码的不同之处):

  • 在加载工具包的时候,由于要使用 sigmoid 的函数,而这个函数,是在 torch.nn.functional 当中的,所以,先设置一个句柄等待使用: torch.nn.functional as F;
  • 导入的数据中,y_data的值,不再是原来的预测:学习多久,得多少分?而是: x_data 个小时,是否会通过考试,把原本的预测回归问题,转为预测分类问题,而且此处是二分类,最终预测结果只有01,要么通过,要么不通过;
  • 在用于创建模型的类中,需要把原本的前向传播,计算结果转为概率,那么就需要用到 sigmoid 函数,这个函数,值域是(0,1),把原本输出的得分数值转为能够通过考试的概率,就是在这里用到了 F 这个函数句柄,F.sigmoid;
  • 另一个变化是损失函数,这里不在使用原本的MSE函数,而是使用分类任务常用的交叉熵损失函数,这个里面的原理,需要懂,刘老师讲完一下子就理解了,用到了 torch,nn,BCELoss 函数;
  • 由于是分类任务,那么最后的预测,与之前的回归任务就不一样了,测试的时候,直接把一个需要预测的值传入模型当中:x_test = torch.Tensor([[4.0]]) y_test = model(x_test)

详情请看:

【Pytorch深度学习实践】B站up刘二大人之LogisticsRegression-代码理解与实现(5/9)


Lecture07 —— MultipleDimensionLogisticRegressionModel 多维输入的逻辑回归模型

【Pytorch深度学习实践】B站up刘二大人之MultipleDimensionLogisticRegressionModel-代码理解与实现(6/9)

说在前面:

  • 这部分内容有不少更新指出:
    (1)这节课的内容跟上一节的递进关系,在于输入数据的维度,不再是原本的一维数值(标量);
    (2)而是升级为多维向量,这更符合多个自变量共同影响输出的实际应用场景;
    (3)想起了吴恩达课程中的房价预测模型,卧室数量、厨房数量等,可以绑定在一起构成向量的形式,作为输入。

详细过程:

  • 本课程的主要任务是通过将原本简单的标量输入,升级为向量输入,构建线性传播模型:

    • 在导入数据阶段就有很大不同:

      • 由于课程中导入的数据是anaconda安装工具包中的自带的压缩文本数据,所以直接采用numpy中的loadtxt读取,这个函数可以直接读取Linux下压缩的格式,此处是.gz
      • 后面还有两个参数,一个是分隔的字符类型,此处是逗号,另一个是数据的类型,刘老师在课程中讲,只有高端的显卡,才会读取double类型的数据,而普通的显卡读取float32
    • 将导入的数据,分成自变量和label,这是在文本文件中已经确定好了的,最后一列为y_data,其余为x_data
    • 创建Model类模型(有巨大变化,非常重要):
      • 初始化init中,不再只有一个linear函数;

        • 要根据线性层的输入和输出要求,自定义不同的self.linear,此处是8 → 6 → 4 → 1;其中两个参数分别为in_channel数量和out_channel数量;
        • 接着,要跟一个Sigmoid函数,将最终的输出值,转为0-1区间上的概率值,这个内容是上一节中通过函数句柄F.sigmoid实现的,但此处的函数名称要大写,容易出错;
      • 前向传播forward中,直接调用init中定义好的各层,此处要注意,输入为x,返回值也定义为x吧:x = self.sigmoid(self.linear1(x)),否则出错了不好排除问题,并且sigmoid是小写开头,因为在init中,定义的时候,是以小写开头定义的,注意逻辑;
  • 此处跟后续修改内容有很强的联系,刘老师在本节课中没有做运行和输出训练损失曲线等,在其他笔记中找到了相关的内容,做了一个输出显示,在详情中可以查看;

详情请看:

【Pytorch深度学习实践】B站up刘二大人之MultipleDimensionLogisticRegressionModel-代码理解与实现(6/9)


Lecture08 —— Dataset&DataLoader 加载数据集

【Pytorch深度学习实践】B站up刘二大人之Dataset&DataLoader-代码理解与实现(7/9)

说在前面:

  • 本节内容,主要是把数据集写成了一个类,这个类要继承Dataset类,有点像DIY一个数据集的感觉,只有自定义了之后,才能实例化,然后把之前直接在文件夹中读取数据的方式进行了修改;

  • 后面加载数据的DataLoader(注意L大写),直接可以调用对数据集类做了实例化的对象,即把他当做一个参数,传入DataLoader当中;

详细过程:

  • 本课程的主要任务是通过将原本简单的标量输入,升级为向量输入,构建线性传播模型:

    • 在导入数据阶段就有很大不同:

      • 数据集类里面有三个函数,这三个函数较为固定,分别自己的作用;
    • 继承Dataset后我们必须实现三个函数:
      • __init__()是初始化函数,之后只要提供数据集路径,就可以进行数据的加载,也就是说,传入init的参数,只要有一个文件路径就可以了;
      • getitem__()通过索引找到某个样本;
      • __len__()返回数据集大小;

详情请看:

【Pytorch深度学习实践】B站up刘二大人之Dataset&DataLoader-代码理解与实现(7/9)


Lecture09 —— SoftmaxClassifier 多分类器的实现

【Pytorch深度学习实践】B站up刘二大人之SoftmaxClassifier-代码理解与实现(8/9)

说在前面:

  • 这节课的内容,主要是两个部分的修改:

    • 一是数据集:直接采用了内置的MNIST的数据集,那dataloaderdataset自然也是内置的,那也就不用自己写dataset再去继承Dataset类;
    • 再有是把traintest写成了函数形式,直接在main函数当中调用即可;
  • 除了本节课想要实现的代码,刘老师在本节课前一半讲了这些内容:
    • 下了很大功夫讲清楚了softmax这个函数的机理:y_pred = np.exp(z) / np.exp(z).sum();
    • 还有交叉熵损失函数是什么一回事,非常流畅简洁地给我讲懂了这个公式的意思:loss = (- y * np.log(y_pred)).sum();
    • 根据这两个函数的理论,用numpy的计算法则把公式实现了,之后才去调用了pytorch当中写好了的函数;
    • 还强调了NLL-Loss的概念,并且留了思考题,为什么会:CrossEntropyLoss <==> LogSoftmax + NLLLoss?
    • 到了pytorch当中,里面有SoftmaxSoftmax_log两个函数版本;

详情请看:

【Pytorch深度学习实践】B站up刘二大人之SoftmaxClassifier-代码理解与实现(8/9)


Lecture10 —— Basic & Advanced CNN 基础 & 高级-卷积神经网络

【Pytorch深度学习实践】B站up刘二大人之BasicCNN & Advanced CNN -代码理解与实现(9/9)

说在前面:

这节课的有两个部分,基础卷积神经网络和高级别卷积神经网络:

Basic CNN 卷积神经网络 基础

  • 对于基础知识,不写代码了,把所有讲到的知识点,和每个知识点该注意的,以及扩展知识整理记录:

    • 卷积的概念:

      • 从单通道卷积讲起:即input图像是单通道,卷积核kernel也是单通道,那么输出必然也是单通道。这里还没有讲到扩充padding和滑动步长stride,所以只关注输入和输出矩阵的尺寸大小;

      • 讲到这,刘老师介绍了CCD相机模型,这是一种通过光敏电阻,利用光强对电阻的阻值影响,对应地影响色彩亮度实现不同亮度等级像素采集的原件。三色图像是采用不同敏感度的光敏电阻实现的。

      • 还介绍了矢量图像(也就是PPT里通过圆心、边、填充信息描述而来的图像,而非采集的图像);

      • 接下来讲到三通道input图像的卷积操作:实为将三个通道的input分别与三个通道kernel对应相乘,再将对应位置相加,最后输出单通道output图像的过程;

      • 此处的input、kernel、output的形状,以及通道数channel,是要非常注意的,我们玩卷积神经网络,其中,向的卷积层中传递的参数,与这里的参数一一对应,要非常熟悉每一个参数位置,应该是谁的channel值,后面的full connected layer也是一样,传入的是位置参数,也就是说,每一个位置必须是所需对应的参数,决不能混乱;

      • 这里还有个我以前搞不清的地方,在刘老师的课上听明白了:就是这种图是什么意思,长宽高分别对应的是图像的宽高通道数,分别怎么对应的,我得插一张图了(这应该是篇博客第一章图):

      • 以上是单个卷积核的获取的结果,也就是说,上图中见kernel的位置,仅仅是一个(组)卷积核;如果我们要提取不同的特征,就需要不同(组)的卷积核,也就是说,会出现这样一种情况:

      • 于是,kernel其实是一个4维的tensor,每一个(组)filter是三维,多个这样的filters,就需要是4个dimension的概念,你,看懂了吗。

      • 接下来讲了卷积层建立的方式,以及代码的简单实现,详细内容见本节插入的链接;

      • 在后面讲了三个卷积的基本操作,扩充padding、步长stride和池化pooling

        • padding是为了让源图像最外一圈或多圈像素(取决于kernel的尺寸),能够被卷积核中心取到。这里有个描述很重要:想要使源图像(1,1)的位置作为第一个与kernel中心重合,参与计算的像素,想想看padding需要扩充多少层,这样就很好计算了吧;
        • stride操作指的是每次kernel窗口滑动的步长,默认值当然是1了,插句话,假设不使用扩充padding,output图像的尺寸就会缩小,想要使输出的尺寸与输入尺寸保持不变,看看上一个知识点的padding描述,就很好计算需要外圈加几圈去保证输出的尺寸了吧;
      • 这里插入一段代码,这段代码中inputkernel后面的view函数,输入的位置参数含义是不一样的,看图可知细节:

    • 接下来讲了一个简单的卷积神经网络的例子,这个例子需要记住并会用,详见节尾链接;只有一个地方需要特别注意的地方,就是整个网络建立完以后,是不关心输入图像的宽度和高度大小的,也就是说,无论来多大尺寸的图像,我(网络)都能处理,需要改动的仅是Fully Connected Layer(分类器)的输入,需要通过前面最后一层的计算来求得;而FCY的输出,是确定的(分10类就输出10);
    • 将模型送入GPU的过程,可以参看我其他的博客,关于这个知识点,我是觉得土堆的讲解更好,整个网络,有三个内容需要传入GPU去计算:[1]网络模型、[2]数据(inputlabel)、[3]损失函数loss。参见【PyTorch教程】P30 GPU加速;
  • 至此,刘老师Basic CNN这节课的全部知识点都在这里了,代码的简单实现见节尾链接。

Advanced CNN 卷积神经网络 高级

  • 进入高阶CNN,刘老师在这节课里讲了两个网络,一个是GoogLeNet,另一个是ResNet。分别记录重点:

    • GoogLeNet:以往无论的LinearModel还是SoftmaxClassifier,其网络结构都是一个线性且没有‘岔路’的传递形式,成为单线结构,但效果一般;
    • GoogLeNet是一种串行结构的复杂网络;想要实现复杂网络,并且较少代码冗余和多次重写相同功能的程序,面向过程的语言使用函数,面向对象的语言python使用,而在CNN当中,使用Moduleblock这种模块将具有复用价值的代码块封装成一块积木,供拼接使用;
    • GoogLeNet为自己框架里被重复使用的Module命名为Inception,这也电影盗梦空间的英文名,意为:梦中梦、嵌套;
    • GoogLeNet设计了四条通路支线,并要求他们保证图像的宽和高WH必须相同,只有通道数C可以不相同,因为各支线进行过卷积和池化等操作后,要将WH构成的面为粘合面,按照C的方向,拼接concatenate起来;
    • GoogLeNet的设计思路是:我把各种形式的都写进我的Block当中,至于每一个支路的权重,让网络训练的时候自己去搭配;
    • 1 * 1的卷积核:以往我只是表面上觉得,单位像素大小的卷积核,他的意义不过是调整输入和输出的通道数之间的关系;刘老师举了个例子,让我对这个卷积核有了新的认识:就是加速运算,他的作用的确是加速运算,不过其中的原理是:通过1*1的核处理过的图像,可以减少后续卷积层的输入通道数;
    • GoogLeNet代码当中需要注意的是卷积层的输入和输出通道数,里面涉及的细节与其他层之间的差异要特别注意;
    • 最后在cancatenate的时候,有一个参数是选择按照什么方向进行组合,这里的dim=1的原理在这:(B,C,W,H)按索引来讲,C指的是通道数,索引从零开始,C的位置是1,这个问题困扰了我好久,我一直都以为要死记硬背;
    • GoogLeNet最后留下了一个问题:通过测试,网络的层数会影响模型的精度,但当时没有意识到梯度消失的问题,所以GoogLeNet认为We Need To Go Deeper;直到何凯明大神的ResNet的出现,提出了层数越多,模型效果不一定越好的问题,并针对这个问题提出了解决方案ResNet网络结构。
    • ResNet之前,有过对梯度消失的解决方案:逐层训练。每当网络想要训练新一层的权重,就将其他层的权重锁住,逐渐将所有层的权重都确定下来,然而神经网络层数太多不容易做到,并且这也太蠢了,失去了人工智能的该有的智能;
    • 于是ResNet提出了这样一种方式,来避免深度神经网络在训练过程中出现梯度消失导致靠前面的层没有被充分训练:
    • 以往的网络模型是这种Plain Net形式:输入数据x,经过Weight Layer(可以是卷积层,也可以是池化或者线性层),再通过激活函数加入非线性影响因素,最后输出结果H(x);这种方式使得H(x)x的偏导数的值分布在(0,1)之间,这在反向传播复合函数的偏导数逐步累乘的过程中,必然会导致损失函数Lx的偏导数的值,趋近于0,而且,网络层数越深,这种现象就会越明显,最终导致最开始的(也就是靠近输入的)层没有获得有效的权重更新,甚至模型失效;
    • ResNet采用了一个非常巧妙的方式解决了H(x)对x的偏导数的值分布在(0,1)之间这个问题:在以往的框架中,加入一个跳跃,再原有的网络输出F(x)的基础上,将输入x累加到上面,这样一来,在最终输出H(x)输入数据x求偏导数的时候,这个结果就会分布在(1,2)之间,这样就不怕网络在更新权重梯度累乘的过程中,出现乘积越来越趋于0而导致的梯度消失问题;
    • GoogLeNet类似,ResNetResidual Block在搭建时,留了一个传入参数的机会,这个参数留给了通道数channelResidual Block的要求是输入与输出的CWH分别对应相同,B是一定要相同的,所以就是说,经过残差模块Residual Block处理过的图像,并不改变原有的尺寸和通道数;(TBD)
    • 其余就是老生常谈的参数问题,记准每一个参数的含义;
    • 课程最后刘老师推荐了两篇论文:
      • Identity Mappings in Deep Residual Networks:其中给出了很多不同种类的Residual Block变化的构造形式;
      • Densely Connected Convolutional Networks:大名鼎鼎的DenseNet,这个网络结构基于ResNet跳跃传递的思想,实现了多次跳跃的网络结构,以后很多通过神经网络提取多尺度多层级的特征,都在利用这种方式,通过Encoder对不同层级语义特征进行逐步提取,在穿插着传递到Decoder过程中不同的层级上去,旨在融合不同层级的特征,尽可能地挖掘图像全部的特征

详情请看:

【Pytorch深度学习实践】B站up刘二大人之BasicCNN & Advanced CNN -代码理解与实现(9/9)
【PyTorch教程】P30 GPU加速


总结来说,刘老师的课讲的非常透彻,不过,还是那句话,这并不是初学者一遍就能听懂的,要么有点基础,要么就得多听几遍。我想,最关键的要把握住:这节课讲了什么,是从numpy开始实现,还是调用pytorch调用已经写好的函数直接实现;他们的原理是一样,不过在代码里的表示还有很大不同。这只是我的一点感受。最后,再次感谢刘洪普老师的分享,收获非常大,受教了!

对于这个课程没有看完的同学,我的建议是抽出10个小时时间,1.25倍速看一遍,不要快进,刘老师的每一句话都要听,我准备写博客的时候,是看过全部视频,又重新看课件PPT的,看着我在PPT上的笔记,能想起每一页刘老师强调的内容,这一页注意的事项都能想得起来。这是方法论了,一周之前我才看完,所以记忆尤新。预期贪多再去看别的教程,不如先把看过的这套搞透,再遇到才不至于似懂非懂。我以后再关注别的课程,也会按照这个方式,先花点时间考察课程整体的质量,是否适合我目前的水平,一旦选中了,就花大力气集中时间吃透,只有这样,不懂的东西才会越来越少,学会一点,不懂的就少一点。

接下来我要回过头来去调试之前跑通完整模型里,看看之前哪些东西没有看懂的,通过这个课程之后现在能驾驭的了了。同时也要动手多敲代码了,从脑子里输出的才是进展,拿别人的都是泡沫。

【Pytorch深度学习实践】B站up刘二大人课程笔记——目录与索引(已完结)相关推荐

  1. 【Pytorch深度学习实践】B站up刘二大人之SoftmaxClassifier-代码理解与实现(8/9)

    这是刘二大人系列课程笔记的倒数第二个博客了,介绍的是多分类器的原理和代码实现,下一个笔记就是basicCNN和advancedCNN了: 写在前面: 这节课的内容,主要是两个部分的修改: 一是数据集: ...

  2. 【Pytorch深度学习实践】B站up刘二大人之 Gradient Descend-代码理解与实现(2/9)

    开篇几句题外话: 以往的代码,都是随便看看就过去了,没有这样较真过,以至于看了很久的深度学习和Python,都没有能够形成编程能力: 这次算是废寝忘食的深入进去了,踏实地把每一个代码都理解透,包括其中 ...

  3. 【Pytorch深度学习实践】B站up刘二大人之BasicCNN Advanced CNN -代码理解与实现(9/9)

    这是刘二大人系列课程笔记的 最后一个笔记了,介绍的是 BasicCNN 和 AdvancedCNN ,我做图像,所以后面的RNN我可能暂时不会花时间去了解了: 写在前面: 本节把基础个高级CNN放在一 ...

  4. PyTorch 深度学习实践 GPU版本B站 刘二大人第11讲卷积神经网络(高级篇)GPU版本

    第11讲 卷积神经网络(高级篇) GPU版本源代码 原理是基于B站 刘二大人 :传送门PyTorch深度学习实践--卷积神经网络(高级篇) 这篇基于博主错错莫:传送门 深度学习实践 第11讲博文 仅在 ...

  5. 笔记|(b站)刘二大人:pytorch深度学习实践(代码详细笔记,适合零基础)

    pytorch深度学习实践 笔记中的代码是根据b站刘二大人的课程所做的笔记,代码每一行都有注释方便理解,可以配套刘二大人视频一同使用. 用PyTorch实现线性回归 # 1.算预测值 # 2.算los ...

  6. 【PyTorch深度学习实践 | 刘二大人】B站视频教程笔记

    资料 [参考:<PyTorch深度学习实践>完结合集_哔哩哔哩_bilibili] [参考 分类专栏:PyTorch 深度学习实践_错错莫的博客-CSDN博客] 全[参考 分类专栏:PyT ...

  7. 刘二大人 PyTorch深度学习实践 笔记 P6 逻辑斯蒂回归

    刘二大人 PyTorch深度学习实践 笔记 P6 逻辑斯蒂回归 P6 逻辑斯蒂回归 1.torchversion 提供的数据集 2.基本概念 3.代码实现 P6 逻辑斯蒂回归 1.torchversi ...

  8. 【刘二大人】PyTorch深度学习实践

    文章目录 一.overview 1 机器学习 二.Linear_Model(线性模型) 1 例子引入 三.Gradient_Descent(梯度下降法) 1 梯度下降 2 梯度下降与随机梯度下降(SG ...

  9. PyTorch 深度学习实践 第13讲

    PyTorch 深度学习实践 第13讲 引言 代码 结果 引言 近期学习了B站 刘二大人的PyTorch深度学习实践,传送门PyTorch 深度学习实践--循环神经网络(高级篇),感觉受益匪浅,发现网 ...

最新文章

  1. 定时任务--mysql数据库备份
  2. 如何在MFC客户端调用COM DLL
  3. centos6.2安装五笔输入法
  4. P4562-[JXOI2018]游戏【数论,组合数学】
  5. ubuntu安装zookeeper和kafka
  6. pytorch torchvision.transforms.ToTensor
  7. ckeditor编辑的使用方法
  8. tensorflow精进之路(二十六)——人脸识别(上)(MTCNN原理)
  9. wifi万能钥匙自媒体平台开放注册(付注册流程)
  10. 利用WaitForInputIdle等待初始化完成CreateProcess
  11. 求职时,我问过的问题
  12. 【转】在淘宝一年测试工作的感悟
  13. 老毛子固件相关内容!
  14. 如何将png格式的图片缩小?png怎么缩小kb?
  15. 考研复试-数据库知识点速记
  16. 语音共振峰的获取python
  17. 项目经理的工具箱---走出软件作坊:三五个人十来条枪 如何成为开发正规军(三)...
  18. 【Python-Anaconda】jupyter notebook运行代码时出现异常——代码前面的[ ]中为空,跳转下一行,显示自动保存失败。面对这种情况该如何解决?
  19. 【VUE】浏览器消息通知(声音提醒,标题栏闪动,弹框提醒)
  20. 在基于ZYNQ MPSOC XCZU3CG自定义单板上运行DPU例程

热门文章

  1. 网络舆情事件热度如何的查询方法
  2. 网络通信技术(TCP/IP)
  3. TCP/IP协议基础(转)
  4. PS抠图:将猫咪图片打造成唯美星空效果图
  5. 四步完成离线部署wvs
  6. 数据结构--链栈的c语言实现(超详细注释/实验报告)
  7. 浪潮之巅,程序员如何拥抱新技术?
  8. 画质、分辨率、帧率之间有什么关系与区别?
  9. 出入库管理系统1(配件报表-后录编号)
  10. IllegalArgumentException: dataSource or dataSourceClassName or jdbcUrl is required