pytorch随记(随时更新)

1.①任何在原地(in-place)改变张量的操作都需要加一个’_’后缀。例如x.copy_(y), x.t_()操作将改变x

②神经网络的典型训练过程如下:  

(一)
1. 定义神经网络模型,它有一些可学习的参数(或者权重); 
2. 在数据集上迭代; 
3. 通过神经网络处理输入; 
4. 计算损失(输出结果和正确值的差距大小) 
5. 将梯度反向传播会网络的参数; 
6. 更新网络的参数,主要使用如下简单的更新原则: 
weight = weight - learning_rate * gradient 

(二)

  1. 使用torchvision加载和归一化CIFAR10训练集和测试集.
  2. 定义一个卷积神经网络
  3. 定义损失函数
  4. 在训练集上训练网络
  5. 在测试机上测试网络

torch.nn中必须对单个样本做x.unsqueeze(0)升维(由3->4):

  1. torch.nn 只支持小批量输入,整个torch.nn包都只支持小批量样本,而不支持单个样本
  2. 例如,nn.Conv2d将接受一个4维的张量,每一维分别是sSamples * nChannels * Height * Width(样本数*通道数*高*宽).
  3. 如果你有单个样本,只需使用input.unsqueeze(0)来添加其它的维数(HWC->NHWC)

 ④torchvision的输出是[0,1]的PILImage图像,我们把它转换为归一化范围为[-1, 1]的张量:

transform = transforms.Compose( [transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])

def imshow(img):

img = img / 2 + 0.5 # unnormalize

npimg = img.numpy()

plt.imshow(np.transpose(npimg, (1, 2, 0)))

plt.show()

⑥彩图是3通道RGB,但是在opencv里的顺序默认是反的(BGR)

猜你喜欢

转载自blog.csdn.net/qq_39938666/article/details/85255954