婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Pytorch實現圖像識別之數字識別(附詳細注釋)

Pytorch實現圖像識別之數字識別(附詳細注釋)

熱門標簽:騰訊外呼線路 激戰2地圖標注 哈爾濱ai外呼系統定制 陜西金融外呼系統 公司電話機器人 白銀外呼系統 海南400電話如何申請 廣告地圖標注app 唐山智能外呼系統一般多少錢

使用了兩個卷積層加上兩個全連接層實現
本來打算從頭手撕的,但是調試太耗時間了,改天有時間在從頭寫一份
詳細過程看代碼注釋,參考了下一個博主的文章,但是鏈接沒注意關了找不到了,博主看到了聯系下我,我加上
代碼相關的問題可以評論私聊,也可以翻看博客里的文章,部分有詳細解釋

Python實現代碼:

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
import torchvision
from torch.autograd import Variable
from torch.utils.data import DataLoader
import cv2

# 下載訓練集
train_dataset = datasets.MNIST(root='E:\mnist',
                               train=True,
                               transform=transforms.ToTensor(),
                               download=True)
# 下載測試集
test_dataset = datasets.MNIST(root='E:\mnist',
                              train=False,
                              transform=transforms.ToTensor(),
                              download=True)

# dataset 參數用于指定我們載入的數據集名稱
# batch_size參數設置了每個包中的圖片數據個數
# 在裝載的過程會將數據隨機打亂順序并進打包
batch_size = 64
# 建立一個數據迭代器
# 裝載訓練集
train_loader = torch.utils.data.DataLoader(dataset=train_dataset,
                                           batch_size=batch_size,
                                           shuffle=True)
# 裝載測試集
test_loader = torch.utils.data.DataLoader(dataset=test_dataset,
                                          batch_size=batch_size,
                                          shuffle=True)


# 卷積層使用 torch.nn.Conv2d
# 激活層使用 torch.nn.ReLU
# 池化層使用 torch.nn.MaxPool2d
# 全連接層使用 torch.nn.Linear
class LeNet(nn.Module):
    def __init__(self):
        super(LeNet, self).__init__()
        self.conv1 = nn.Sequential(nn.Conv2d(1, 6, 3, 1, 2),
                                   nn.ReLU(), nn.MaxPool2d(2, 2))

        self.conv2 = nn.Sequential(nn.Conv2d(6, 16, 5), nn.ReLU(),
                                   nn.MaxPool2d(2, 2))

        self.fc1 = nn.Sequential(nn.Linear(16 * 5 * 5, 120),
                                 nn.BatchNorm1d(120), nn.ReLU())

        self.fc2 = nn.Sequential(
            nn.Linear(120, 84),
            nn.BatchNorm1d(84),
            nn.ReLU(),
            nn.Linear(84, 10))
        # 最后的結果一定要變為 10,因為數字的選項是 0 ~ 9

    def forward(self, x):
        x = self.conv1(x)
        # print("1:", x.shape)
        # 1: torch.Size([64, 6, 30, 30])
        # max pooling
        # 1: torch.Size([64, 6, 15, 15])
        x = self.conv2(x)
        # print("2:", x.shape)
        # 2: torch.Size([64, 16, 5, 5])
        # 對參數實現扁平化
        x = x.view(x.size()[0], -1)
        x = self.fc1(x)
        x = self.fc2(x)
        return x


def test_image_data(images, labels):
    # 初始輸出為一段數字圖像序列
    # 將一段圖像序列整合到一張圖片上 (make_grid會默認將圖片變成三通道,默認值為0)
    # images: torch.Size([64, 1, 28, 28])
    img = torchvision.utils.make_grid(images)
    # img: torch.Size([3, 242, 242])
    # 將通道維度置在第三個維度
    img = img.numpy().transpose(1, 2, 0)
    # img: torch.Size([242, 242, 3])
    # 減小圖像對比度
    std = [0.5, 0.5, 0.5]
    mean = [0.5, 0.5, 0.5]
    img = img * std + mean
    # print(labels)
    cv2.imshow('win2', img)
    key_pressed = cv2.waitKey(0)


# 初始化設備信息
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
# 學習速率
LR = 0.001
# 初始化網絡
net = LeNet().to(device)
# 損失函數使用交叉熵
criterion = nn.CrossEntropyLoss()
# 優化函數使用 Adam 自適應優化算法
optimizer = optim.Adam(net.parameters(), lr=LR, )
epoch = 1
if __name__ == '__main__':
    for epoch in range(epoch):
        print("GPU:", torch.cuda.is_available())
        sum_loss = 0.0
        for i, data in enumerate(train_loader):
            inputs, labels = data
            # print(inputs.shape)
            # torch.Size([64, 1, 28, 28])
            # 將內存中的數據復制到gpu顯存中去
            inputs, labels = Variable(inputs).cuda(), Variable(labels).cuda()
            # 將梯度歸零
            optimizer.zero_grad()
            # 將數據傳入網絡進行前向運算
            outputs = net(inputs)
            # 得到損失函數
            loss = criterion(outputs, labels)
            # 反向傳播
            loss.backward()
            # 通過梯度做一步參數更新
            optimizer.step()
            # print(loss)
            sum_loss += loss.item()
            if i % 100 == 99:
                print('[%d,%d] loss:%.03f' % (epoch + 1, i + 1, sum_loss / 100))
                sum_loss = 0.0
                # 將模型變換為測試模式
        net.eval()
        correct = 0
        total = 0
        for data_test in test_loader:
            _images, _labels = data_test
            # 將內存中的數據復制到gpu顯存中去
            images, labels = Variable(_images).cuda(), Variable(_labels).cuda()
            # 圖像預測結果
            output_test = net(images)
            # torch.Size([64, 10])
            # 從每行中找到最大預測索引
            _, predicted = torch.max(output_test, 1)
            # 圖像可視化
            # print("predicted:", predicted)
            # test_image_data(_images, _labels)
            # 預測數據的數量
            total += labels.size(0)
            # 預測正確的數量
            correct += (predicted == labels).sum()
        print("correct1: ", correct)
        print("Test acc: {0}".format(correct.item() / total))

測試結果:

可以通過調用test_image_data函數查看測試圖片


可以看到最后預測的準確度可以達到98%

到此這篇關于Pytorch實現圖像識別之數字識別(附詳細注釋)的文章就介紹到這了,更多相關Pytorch 數字識別內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 使用pytorch完成kaggle貓狗圖像識別方式
  • PyTorch一小時掌握之圖像識別實戰篇

標簽:黑龍江 鷹潭 益陽 上海 四川 黔西 常德 惠州

巨人網絡通訊聲明:本文標題《Pytorch實現圖像識別之數字識別(附詳細注釋)》,本文關鍵詞  Pytorch,實現,圖像,識別,之,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Pytorch實現圖像識別之數字識別(附詳細注釋)》相關的同類信息!
  • 本頁收集關于Pytorch實現圖像識別之數字識別(附詳細注釋)的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    成人一区二区三区视频| www.在线欧美| 久久九九久精品国产免费直播| 色88888久久久久久影院按摩| 欧美成人精品1314www| 欧美视频精品在线观看| 91影院在线观看| 91在线丨porny丨国产| 成人永久看片免费视频天堂| 成人av网站在线观看| 国产麻豆精品一区二区| 国产一区久久久| 北条麻妃一区二区三区| 精品国产1区2区3区| 欧美视频一区在线观看| 欧美日本在线播放| 69久久99精品久久久久婷婷| 欧美一区二区二区| 2023国产精华国产精品| 91精品国产综合久久久久久久| 欧美日韩国产小视频| 99热精品国产| 亚洲精品国产一区二区精华液| 国产亚洲一本大道中文在线| 欧美精品第一页| 日韩欧美综合一区| 国产精品看片你懂得| 日韩精品一二三| 色婷婷av一区二区三区gif| 久久久99精品免费观看| 精品一区二区在线观看| 欧美一区三区二区| 亚洲一二三专区| 欧美亚洲免费在线一区| 一区二区日韩电影| 99久久er热在这里只有精品15| 成人av在线一区二区三区| 一区在线中文字幕| 国产99久久久国产精品潘金 | 26uuu国产在线精品一区二区| 亚洲人午夜精品天堂一二香蕉| 波多野结衣亚洲| 最新国产精品久久精品| 国产美女视频91| 欧洲av在线精品| 亚洲大片免费看| 精品国产一区二区三区不卡| 久草中文综合在线| 久久综合视频网| 成人性生交大片免费看中文 | kk眼镜猥琐国模调教系列一区二区| 久久亚区不卡日本| 亚洲国产精品激情在线观看| 中文字幕欧美三区| 国产精品99久| 国产不卡视频一区| 亚洲精品国产无套在线观| 欧美老人xxxx18| 国产成人无遮挡在线视频| 国产精品区一区二区三| 一本久久综合亚洲鲁鲁五月天 | 亚洲欧美激情小说另类| 蜜桃久久av一区| 7777精品久久久大香线蕉| 精品一区二区三区在线播放| 欧美激情在线一区二区三区| 在线观看日韩电影| 激情综合色综合久久| 成人免费一区二区三区视频 | 天堂影院一区二区| 欧美成人乱码一区二区三区| 国产精品萝li| 日本高清无吗v一区| 欧美日韩国产a| 成人av网站免费| 成人国产一区二区三区精品| 九九九精品视频| 午夜精品久久久久久久99水蜜桃 | 日韩极品在线观看| 欧美妇女性影城| 色国产精品一区在线观看| jlzzjlzz国产精品久久| 国产成人日日夜夜| 国产河南妇女毛片精品久久久| 免费av网站大全久久| 亚洲综合清纯丝袜自拍| 夜夜操天天操亚洲| 亚洲国产毛片aaaaa无费看| 亚洲制服丝袜av| 日韩精品一二区| 国产成人午夜精品影院观看视频| 久久综合网色—综合色88| 欧美日韩一区不卡| 日韩制服丝袜av| 亚洲国产视频一区二区| 91免费视频网| 91国偷自产一区二区三区观看| 色婷婷狠狠综合| 日韩午夜激情av| 欧美色涩在线第一页| 26uuu国产日韩综合| 91免费看`日韩一区二区| 成人黄色小视频| 91精品国产综合久久精品麻豆| 在线成人av影院| 久久久青草青青国产亚洲免观| 久久精品欧美一区二区三区不卡 | 久久久久免费观看| 亚洲视频网在线直播| 亚洲va韩国va欧美va精品| 日韩欧美亚洲一区二区| 日本一区二区三区电影| 亚洲免费视频成人| 久久综合九色综合欧美亚洲| 日韩一区欧美一区| 久久精品国产77777蜜臀| 日本少妇一区二区| 91美女在线视频| 日本一区二区三区免费乱视频| 亚洲成人免费视| 久久久久久久久岛国免费| 欧美性一二三区| 国产精品久久久久久久久果冻传媒| 婷婷激情综合网| 欧美日韩一区二区三区在线| 久久久国产一区二区三区四区小说 | 国产欧美久久久精品影院 | 欧美激情中文字幕| 韩国一区二区在线观看| 欧美不卡一二三| 精品国产一区二区亚洲人成毛片| 国产黄色精品网站| 日韩视频免费观看高清完整版| 日韩和欧美一区二区三区| 欧美日韩一本到| 亚洲专区一二三| 日韩欧美一二三| 成人av在线网| 国产精品高清亚洲| 欧美三级中文字| 国产在线精品一区二区| 成人高清视频在线观看| 国产精品国产馆在线真实露脸| 国产成人综合自拍| 久久综合九色综合97婷婷女人| 中文一区在线播放| 欧美日本韩国一区二区三区视频| 久久99在线观看| 亚洲电影一级黄| 精品国偷自产国产一区| 99久久精品一区| 亚洲国产精品视频| 亚洲天堂中文字幕| 91精品国产综合久久香蕉麻豆| 久久新电视剧免费观看| 99精品视频一区二区三区| 亚洲品质自拍视频网站| 日本不卡一二三| 亚洲日本在线看| 久久精品一区二区| 欧美性猛交xxxx乱大交退制版| 懂色av一区二区三区免费观看| 亚洲福利视频一区二区| 亚洲国产岛国毛片在线| 洋洋av久久久久久久一区| 色伊人久久综合中文字幕| 美女性感视频久久| 日本人妖一区二区| 日韩高清在线一区| 日韩主播视频在线| 日韩一区欧美二区| 亚洲国产欧美日韩另类综合| 国产精品福利一区二区三区| 精品对白一区国产伦| 欧美精品一区二区蜜臀亚洲| 欧美成人在线直播| 欧美一区二区在线不卡| 欧美色电影在线| 在线观看亚洲a| 91精品久久久久久久99蜜桃| 久草在线在线精品观看| 99久久免费精品高清特色大片| 在线视频观看一区| 久久综合国产精品| 国产精品资源在线| 91麻豆文化传媒在线观看| 欧美精选一区二区| 中文字幕中文字幕一区| 奇米888四色在线精品| 成人av在线资源网| 2021国产精品久久精品| 精品亚洲免费视频| 国产精品99久久久久久宅男| 欧美精品在线视频| 亚洲视频电影在线| 成人毛片在线观看| 精品国产乱码久久久久久蜜臀| 一区二区三区欧美日| 99久久久免费精品国产一区二区| 精品毛片乱码1区2区3区|