04 反向传播
- 为什么每一层都加入激活函数
答: 因为如果每一层都是线性层的话,连在一起实际上相当于只有一层,表达能力非常有限。加入非线性层可以复杂问题。
- 一个Tensor中既包括data还有grad,它俩也都是tensor类型。在更新标量的时候,不能直接用w.grad,这样会产生计算图,而是用w.grad.data。且如果w需要计算梯度,那构建的计算图中,跟w相关的tensor默认需要计算梯度。
05 用Pytorch实现线性回归

epoch: 在所有的训练样本上进行一次前向和反向传播
batch_size: 在一次前向和反向传播中训练的样本数量
iteration: 迭代次数,就是共进行几次传播(batch/batch_size)
总结一下,
epoch指的是次数,epoch = 10 指的是把整个数据集丢进神经网络训练10次。
batch size 指的是数据的个数,batch size = 10 指的是每次扔进神经网络训练的数据是10个。
iteration同样指的是次数,iteration = 10 指的是把整个数据集分成10次扔进神经网络。
mini-batch就是一个batch-size的数据
09.softmax多分类问题
- 普通的图像在输入神经网络之前,将进行转换。一般的图像的规格是HWC,也就是宽乘高乘通道数,但是这里在输入神经网络之前要转换成CHW,即将通道数放在最前面。(下面图片写错了)

10.basic cnn
- 卷积核的个数,卷积核的通道数,等等之间的关系
答: 对于一个任意通道的图像,只用一个卷积核,则只会输出一个单通道的图像。
详细点,就是每一个通道都有一个对应通道的核,分别卷积,然后各个通道的结果求和。
那如果想要获得一个多通道的输出呢,就用多个对应通道数的卷积核,然后concat,拼接在一起
总结一下,卷积核的通道数、卷积核的个数是不一样的概念。卷积核的通道数是由输入的通道数决定,而个数决定输出。注意下图应该是BCHW。
其中,W为输入的size,F为filter的size,S为步长,向上取整。
- 在pytorch当中,卷积过程中的padding操作和tensorflow不一样。padding为(m,n)指定的是,分别在行和列上填充几列。由padding_mode指定填充模式,默认是0填充。所以经过卷积后的尺寸变化也是和上面不一样的,

当然,一般情况下,卷积核尺寸和padding左右都相同,则输出结果为O = (I - K + 2P) / S + 1。在大部分情况下,为了让输入和输出保持相同高度和宽度,则特别设置P。若S=1,则2P=K-1。
填充和步幅都不只是一个标量,它包括了分别在行列方向上各自的参数。
- 池化对尺寸的影响。设输入图像尺寸为WxH,其中W:图像宽,H:图像高,D:图像深度(通道数),卷积核的尺寸为FxF,S:步长

有时候不想对其进行尺寸变化,但是要经过一个平均池化。(X-F+2*P)/S+1。
框架中默认的步幅是和池化窗口的大小相同,即每次池化都不会有重合的部分。
11.Advanced CNN
- 1*1卷积可以用来减少运算量但最后达到相同的卷积层数效果。主要不识别空间模式,用来融合通道

