久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

基于深度學(xué)習(xí)框架pytorch搭建循環(huán)神經(jīng)網(wǎng)絡(luò)LSTM完成手寫字體識別

 山峰云繞 2023-06-06 發(fā)布于貴州

https://www.toutiao.com/article/7234857571612738059/?log_from=5751e0e133b62_1686057077081


1. 數(shù)據(jù)準(zhǔn)備

首先,,我們需要準(zhǔn)備手寫數(shù)字的數(shù)據(jù)集,。在這里,,我們將使用MNIST數(shù)據(jù)集,它包含了60000個訓(xùn)練樣本和10000個測試樣本,,每個樣本都是一個28x28像素的灰度圖像,,表示一個手寫數(shù)字。我們可以使用pytorch內(nèi)置的torchvision庫來下載和加載MNIST數(shù)據(jù)集,。

```python

import torch
import torchvision
import torchvision.transforms as transforms
# 定義數(shù)據(jù)轉(zhuǎn)換
transform = transforms.Compose(
[transforms.ToTensor(),
transforms.Normalize((0.5,), (0.5,))])
# 加載訓(xùn)練集
trainset = torchvision.datasets.MNIST(root='./data', train=True,
download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64,
shuffle=True, num_workers=2)
# 加載測試集
testset = torchvision.datasets.MNIST(root='./data', train=False,
download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=64,
shuffle=False, num_workers=2)

```

在這段代碼中,,我們定義了一個數(shù)據(jù)轉(zhuǎn)換transform,它將圖像轉(zhuǎn)換為張量,,并對每個像素進(jìn)行歸一化,。然后,我們使用
torchvision.datasets.MNIST函數(shù)加載MNIST數(shù)據(jù)集,,設(shè)置訓(xùn)練集和測試集的參數(shù),,使用DataLoader函數(shù)將數(shù)據(jù)集轉(zhuǎn)換為可迭代的數(shù)據(jù)加載器,。

2. 構(gòu)建模型

接下來,我們需要構(gòu)建一個循環(huán)神經(jīng)網(wǎng)絡(luò)LSTM模型,。在這里,,我們將使用pytorch內(nèi)置的nn.LSTM模塊來實(shí)現(xiàn)。

專欄
深度學(xué)習(xí)PyTorch極簡入門
作者:人工智能技術(shù)分享AI
19.9幣
328人已購
查看
import torch.nn as nn
class LSTM(nn.Module):
def __init__(self, input_dim, hidden_dim, layer_dim, output_dim):
super(LSTM, self).__init__()
# 輸入維度
self.input_dim = input_dim
# 隱藏層維度
self.hidden_dim = hidden_dim
# LSTM層數(shù)
self.layer_dim = layer_dim
# LSTM
self.lstm = nn.LSTM(input_dim, hidden_dim, layer_dim, batch_first=True)
# 輸出層
self.fc = nn.Linear(hidden_dim, output_dim)

def forward(self, x):
# 初始化隱藏狀態(tài)和單元狀態(tài)
h0 = torch.zeros(self.layer_dim, x.size(0), self.hidden_dim).requires_grad_()
c0 = torch.zeros(self.layer_dim, x.size(0), self.hidden_dim).requires_grad_()
# 前向傳播
out, (hn, cn) = self.lstm(x, (h0.detach(), c0.detach()))
# 取最后一個時(shí)間步的輸出
out = self.fc(out[:, -1, :])
return out

在這段代碼中,,我們定義了一個LSTM類,,它繼承自nn.Module類,重寫了__init__和forward方法,。在__init__方法中,,我們定義了LSTM的輸入維度、隱藏層維度,、LSTM層數(shù)和輸出維度,,并使用nn.LSTM模塊構(gòu)建了LSTM層和輸出層。在forward方法中,,我們首先初始化了隱藏狀態(tài)和單元狀態(tài),,然后將輸入x傳入LSTM層,得到輸出out和最后一個時(shí)間步的隱藏狀態(tài)和單元狀態(tài)hn和cn,,最后將out傳入輸出層得到預(yù)測結(jié)果,。

3. 訓(xùn)練模型

接下來,我們需要訓(xùn)練我們的模型,。在這里,,我們將使用交叉熵?fù)p失函數(shù)和隨機(jī)梯度下降優(yōu)化器。

```python

# 定義模型,、損失函數(shù)和優(yōu)化器
input_dim = 28
hidden_dim = 100
layer_dim = 1
output_dim = 10
model = LSTM(input_dim, hidden_dim, layer_dim, output_dim)
criterion = nn.CrossEntropyLoss()
learning_rate = 0.1
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)
# 訓(xùn)練模型
num_epochs = 5
for epoch in range(num_epochs):
for i, (images, labels) in enumerate(trainloader):
# 將數(shù)據(jù)加載到GPU上
images = images.view(-1, 28, 28).requires_grad_().cuda()
labels = labels.cuda()
# 前向傳播
outputs = model(images)
# 計(jì)算損失
loss = criterion(outputs, labels)
# 反向傳播和優(yōu)化
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 每100個batch輸出一次損失
if (i+1) % 100 == 0:
print('Epoch [{}/{}], Batch [{}/{}], Loss: {:.4f}'
.format(epoch+1, num_epochs, i+1, len(trainloader), loss.item()))

```

在這段代碼中,,我們首先定義了模型、損失函數(shù)和優(yōu)化器,。然后,,我們使用for循環(huán)和enumerate函數(shù)遍歷訓(xùn)練集中的每個batch,將數(shù)據(jù)加載到GPU上,,進(jìn)行前向傳播,,計(jì)算損失,進(jìn)行反向傳播和優(yōu)化,。最后,我們每100個batch輸出一次損失,。

4. 測試模型

最后,,我們需要測試我們的模型。在這里,,我們將使用測試集來評估模型的性能,。

```python

# 測試模型
correct = 0
total = 0
with torch.no_grad():
for images, labels in testloader:
# 將數(shù)據(jù)加載到GPU上
images = images.view(-1, 28, 28).cuda()
labels = labels.cuda()
# 前向傳播
outputs = model(images)
# 取預(yù)測結(jié)果中最大值的索引作為預(yù)測標(biāo)簽
_, predicted = torch.max(outputs.data, 1)
# 統(tǒng)計(jì)正確預(yù)測的數(shù)量和總數(shù)量
total += labels.size(0)
correct += (predicted == labels).sum().item()
print('Test Accuracy of the model on the 10000 test images: {} %'.format(100 * correct / total))

```

在這段代碼中,,我們首先定義了correct和total變量,用于統(tǒng)計(jì)正確預(yù)測的數(shù)量和總數(shù)量,。然后,,我們使用with torch.no_grad()語句禁用梯度計(jì)算,遍歷測試集中的每個樣本,,進(jìn)行前向傳播,,取預(yù)測結(jié)果中最大值的索引作為預(yù)測標(biāo)簽,統(tǒng)計(jì)正確預(yù)測的數(shù)量和總數(shù)量,。最后,,我們輸出模型在測試集上的準(zhǔn)確率。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多