pytorch隨記(隨時更新)
阿新 • • 發佈:2019-01-03
1.①任何在原地(in-place)改變張量的操作都需要加一個’_’字尾。例如x.copy_(y), x.t_()
操作將改變x
②神經網路的典型訓練過程如下:
(一)
1. 定義神經網路模型,它有一些可學習的引數(或者權重);
2. 在資料集上迭代;
3. 通過神經網路處理輸入;
4. 計算損失(輸出結果和正確值的差距大小)
5. 將梯度反向傳播會網路的引數;
6. 更新網路的引數,主要使用如下簡單的更新原則: weight = weight - learning_rate * gradient
(二)
- 使用
torchvision
載入和歸一化CIFAR10訓練集和測試集. - 定義一個卷積神經網路
- 定義損失函式
- 在訓練集上訓練網路
- 在測試機上測試網路
③torch.nn中必須對單個樣本做x.unsqueeze(0)升維(由3->4):
torch.nn
只支援小批量輸入,整個torch.nn
包都只支援小批量樣本,而不支援單個樣本- 例如,
nn.Conv2d
將接受一個4維的張量,每一維分別是sSamples * nChannels * Height * Width(樣本數*通道數*高*寬). - 如果你有單個樣本,只需使用
input.unsqueeze(0)
④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)