日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

【深度学习】60题PyTorch简易入门指南,做技术的弄潮儿

發布時間:2025/3/12 pytorch 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【深度学习】60题PyTorch简易入门指南,做技术的弄潮儿 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 初識PyTorch

1.1 張量

1.導入pytorch包

import torch

2.創建一個空的5x3張量

x = torch.empty(5, 3) print(x)

3.創建一個隨機初始化的5x3張量

x = torch.rand(5, 3) print(x)

4.創建一個5x3的0張量,類型為long

x = torch.zeros(5, 3, dtype=torch.long) print(x)

5.直接從數組創建張量

x = torch.tensor([5.5, 3]) print(x)

6.創建一個5x3的單位張量,類型為double

x = torch.ones(5, 3, dtype=torch.double) print(x)

7.從已有的張量創建相同維度的新張量,并且重新定義類型為float

x = torch.randn_like(x, dtype=torch.float) print(x)

8.打印一個張量的維度

print(x.size())

9.將兩個張量相加

y = torch.rand(5, 3) print(x + y)# 方法二 # print(torch.add(x, y))# 方法三 # result = torch.empty(5, 3) # torch.add(x, y, out=result) # print(result)# 方法四 # y.add_(x) # print(y)

10.取張量的第一列

print(x[:, 1])

11.將一個4x4的張量resize成一個一維張量

x = torch.randn(4, 4) y = x.view(16) print(x.size(),y.size())

12.將一個4x4的張量,resize成一個2x8的張量

y = x.view(2, 8) print(x.size(),y.size())# 方法二 z = x.view(-1, 8) # 確定一個維度,-1的維度會被自動計算 print(x.size(),z.size())

13.從張量中取出數字

x = torch.randn(1) print(x) print(x.item())

1.2 Numpy的操作

14.將張量轉換成numpy數組

a = torch.ones(5) print(a)b = a.numpy() print(b)

15.將張量+1,并觀察上題中numpy數組的變化

a.add_(1) print(a) print(b)

16.從numpy數組創建張量

import numpy as np a = np.ones(5) b = torch.from_numpy(a) print(a) print(b)

17.將numpy數組+1并觀察上題中張量的變化

np.add(a, 1, out=a) print(a) print(b)

2 自動微分

2.1 張量的自動微分

18.新建一個張量,并設置requires_grad=True

x = torch.ones(2, 2, requires_grad=True) print(x)

19.對張量進行任意操作(y = x + 2)

y = x + 2 print(y) print(y.grad_fn) # y就多了一個AddBackward

20.再對y進行任意操作

z = y * y * 3 out = z.mean()print(z) # z多了MulBackward print(out) # out多了MeanBackward

2.2 梯度

21.對out進行反向傳播

out.backward()

22.打印梯度d(out)/dx

print(x.grad) #out=0.25*Σ3(x+2)^2

23.創建一個結果為矢量的計算過程(y=x*2^n)

x = torch.randn(3, requires_grad=True)y = x * 2 while y.data.norm() < 1000:y = y * 2print(y)

24.計算v = [0.1, 1.0, 0.0001]處的梯度

v = torch.tensor([0.1, 1.0, 0.0001], dtype=torch.float) y.backward(v)print(x.grad)

25.關閉梯度的功能

print(x.requires_grad) print((x ** 2).requires_grad)with torch.no_grad():print((x ** 2).requires_grad)# 方法二 # print(x.requires_grad) # y = x.detach() # print(y.requires_grad) # print(x.eq(y).all())

3 神經網絡

這部分會實現LeNet5,結構如下所示

3.1 定義網絡

import torch import torch.nn as nn import torch.nn.functional as Fclass Net(nn.Module):def __init__(self):super(Net, self).__init__()# 26.定義①的卷積層,輸入為32x32的圖像,卷積核大小5x5卷積核種類6self.conv1 = nn.Conv2d(3, 6, 5)# 27.定義③的卷積層,輸入為前一層6個特征,卷積核大小5x5,卷積核種類16self.conv2 = nn.Conv2d(6, 16, 5)# 28.定義⑤的全鏈接層,輸入為16*5*5,輸出為120self.fc1 = nn.Linear(16 * 5 * 5, 120) # 6*6 from image dimension# 29.定義⑥的全連接層,輸入為120,輸出為84self.fc2 = nn.Linear(120, 84)# 30.定義⑥的全連接層,輸入為84,輸出為10self.fc3 = nn.Linear(84, 10)def forward(self, x):# 31.完成input-S2,先卷積+relu,再2x2下采樣x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))# 32.完成S2-S4,先卷積+relu,再2x2下采樣x = F.max_pool2d(F.relu(self.conv2(x)), 2) #卷積核方形時,可以只寫一個維度# 33.將特征向量扁平成行向量x = x.view(-1, 16 * 5 * 5)# 34.使用fc1+relux = F.relu(self.fc1(x))# 35.使用fc2+relux = F.relu(self.fc2(x))# 36.使用fc3x = self.fc3(x)return xnet = Net() print(net)

37.打印網絡的參數

params = list(net.parameters()) # print(params) print(len(params))

38.打印某一層參數的形狀

print(params[0].size())

39.隨機輸入一個向量,查看前向傳播輸出

input = torch.randn(1, 1, 32, 32) out = net(input) print(out)

40.將梯度初始化

net.zero_grad()

41.隨機一個梯度進行反向傳播

out.backward(torch.randn(1, 10))

3.2 損失函數

42.用自帶的MSELoss()定義損失函數

criterion = nn.MSELoss()

43.隨機一個真值,并用隨機的輸入計算損失

target = torch.randn(10) # 隨機真值 target = target.view(1, -1) # 變成行向量output = net(input) # 用隨機輸入計算輸出loss = criterion(output, target) # 計算損失 print(loss)

44.將梯度初始化,計算上一步中loss的反向傳播

net.zero_grad()print('conv1.bias.grad before backward') print(net.conv1.bias.grad)

45.計算43中loss的反向傳播

loss.backward()print('conv1.bias.grad after backward') print(net.conv1.bias.grad)

3.3 更新權重

46.定義SGD優化器算法,學習率設置為0.01

import torch.optim as optim optimizer = optim.SGD(net.parameters(), lr=0.01)

47.使用優化器更新權重

optimizer.zero_grad() output = net(input) loss = criterion(output, target) loss.backward()# 更新權重 optimizer.step()

4 訓練一個分類器

4.1 讀取CIFAR10數據,做標準化

48.構造一個transform,將三通道(0,1)區間的數據轉換成(-1,1)的數據

import torchvision import torchvision.transforms as transformstransform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])

讀取數據集

trainset = cifar(root = './input/cifar10', segmentation='train', transforms=transform) testset = cifar(root = './input/cifar10', segmentation='test', transforms=transform) trainloader = torch.utils.data.DataLoader(trainset, batch_size=batch_size,shuffle=True, num_workers=2) testloader = torch.utils.data.DataLoader(testset, batch_size=batch_size,shuffle=False, num_workers=2)classes = ('plane', 'car', 'bird', 'cat','deer', 'dog', 'frog', 'horse', 'ship', 'truck')

4.2 建立網絡

這部分沿用前面的網絡

net2 = Net()

4.3 定義損失函數和優化器

49.定義交叉熵損失函數

criterion2 = nn.CrossEntropyLoss()

50.定義SGD優化器算法,學習率設置為0.001,momentum=0.9

optimizer2 = optim.SGD(net2.parameters(), lr=0.001, momentum=0.9)

4.4訓練網絡

for epoch in range(2):running_loss = 0.0for i, data in enumerate(trainloader, 0):# 獲取X,y對inputs, labels = data# 51.初始化梯度optimizer2.zero_grad()# 52.前饋outputs = net2(inputs)# 53.計算損失loss = criterion2(outputs, labels)# 54.計算梯度loss.backward()# 55.更新權值optimizer2.step()# 每2000個數據打印平均代價函數值running_loss += loss.item()if i % 2000 == 1999: # print every 2000 mini-batchesprint('[%d, %5d] loss: %.3f' %(epoch + 1, i + 1, running_loss / 2000))running_loss = 0.0print('Finished Training')

4.5 使用模型預測

取一些數據

dataiter = iter(testloader) images, labels = dataiter.next()# print images imshow(torchvision.utils.make_grid(images)) print('GroundTruth: ', ' '.join('%5s' % classes[labels[j]] for j in range(4)))

56.使用模型預測

outputs = net2(images)_, predicted = torch.max(outputs, 1)print('Predicted: ', ' '.join('%5s' % classes[predicted[j]]for j in range(4)))

57.在測試集上進行打分

correct = 0 total = 0 with torch.no_grad():for data in testloader:images, labels = dataoutputs = net2(images)_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()print('Accuracy of the network on the 10000 test images: %d %%' % (100 * correct / total))

4.6 存取模型

58.保存訓練好的模型

PATH = './cifar_net.pth' torch.save(net.state_dict(), PATH)

59.讀取保存的模型

pretrained_net = torch.load(PATH)

60.加載模型

net3 = Net()net3.load_state_dict(pretrained_net)

往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯黃海廣老師《機器學習課程》視頻課

本站qq群851320808,加入微信群請掃碼:

總結

以上是生活随笔為你收集整理的【深度学习】60题PyTorch简易入门指南,做技术的弄潮儿的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 超碰不卡 | 韩国伦理在线看 | 国产精品-色哟哟 | 日本不卡在线播放 | 91亚洲一线产区二线产区 | 欧美性大战久久久久久久蜜桃 | 亚洲图片在线 | 日本免费在线播放 | av综合在线观看 | 日韩的一区二区 | 欧美wwwwww| 麻豆一区在线 | 色乱码一区二区三区网站 | 狠狠干2021 | 一级黄色录像免费观看 | 国产美女永久免费 | 一级全黄裸体免费视频 | 欧美人狂配大交3d | 久久久久久免费精品 | 国产一区影院 | 色婷婷综合久久久久中文字幕 | 中国丰满人妻videoshd | 日日爱99| 久久久久久久久久成人 | 99久久久无码国产精品免费 | 国产免费看av | 国产夫妇交换聚会群4p | 久久国产视频网 | 国产欧美综合一区 | 精品久久久久久久久久岛国gif | 一区二区三区免费毛片 | 黄色网久久 | 亚洲系列 | 中文在线字幕观看 | 在线成人av | 国产aⅴ爽av久久久久成人 | 成人免费毛片网 | 成人精品 | 91精品国产99久久久久久 | 国产chinese男男网站大全 | 亚洲成人国产精品 | 黑丝av在线 | 91桃色网站 | 日韩激情一区二区 | 国产九九九精品 | 国产一区=区 | 国产成人精品综合久久久久99 | 国产毛片18| 搞中出| 国产欧美三级 | 国产视频一区二区在线观看 | 日韩国产在线观看 | 亚洲一区视频网站 | 国产色婷婷一区二区 | 天天躁夜夜躁狠狠是什么心态 | 国产精品高清无码在线观看 | 苍井空浴缸大战猛男120分钟 | www性 | 天天射天天搞 | 免费看黄色片的网站 | 特级西西人体444www高清 | 亚洲国产日韩在线观看 | 久久免费在线观看 | 男女视频在线观看免费 | 一区二区三区视频 | 人妖ts福利视频一二三区 | 中文字幕无线精品亚洲乱码一区 | 亚洲人交配 | 日本大尺度做爰呻吟 | 不卡一区二区三区四区 | 91麻豆精品91久久久久同性 | 国模少妇一区二区 | 国产午夜无码视频在线观看 | 日本在线一区二区三区 | 国语播放老妇呻吟对白 | 国产又粗又大又爽 | 成人一级大片 | 日本一区视频在线观看 | 女人扒开屁股让我添 | 超碰在线影院 | 邻家有女4完整版电影观看 欧美偷拍另类 | 国产日韩欧美自拍 | 一级大黄毛片 | 激情文学亚洲色图 | 亚欧美一区二区三区 | 日本69av | 成人动漫中文字幕 | 亚洲欧洲精品在线 | 久久影业 | 顶级黄色片 | 麻豆国产尤物av尤物在线观看 | 黄色av日韩 | 欧美图片自拍偷拍 | 韩国三级丰满少妇高潮 | 成人a级大片| 国产污污视频 | 欧美日韩三级在线观看 | 日本老妇高潮乱hd | hd极品free性xxx护士 |