最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pytorch三層全連接層實(shí)現(xiàn)手寫字母識(shí)別方式

 更新時(shí)間:2020年01月14日 16:21:41   作者:沙雅云  
今天小編就為大家分享一篇pytorch三層全連接層實(shí)現(xiàn)手寫字母識(shí)別方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

先用最簡單的三層全連接神經(jīng)網(wǎng)絡(luò),然后添加激活層查看實(shí)驗(yàn)結(jié)果,最后加上批標(biāo)準(zhǔn)化驗(yàn)證是否有效

首先根據(jù)已有的模板定義網(wǎng)絡(luò)結(jié)構(gòu)SimpleNet,命名為net.py

import torch
from torch.autograd import Variable
import numpy as np
import matplotlib.pyplot as plt
from torch import nn,optim
from torch.utils.data import DataLoader
from torchvision import datasets,transforms
#定義三層全連接神經(jīng)網(wǎng)絡(luò)
class simpleNet(nn.Module):
 def __init__(self,in_dim,n_hidden_1,n_hidden_2,out_dim):#輸入維度,第一層的神經(jīng)元個(gè)數(shù)、第二層的神經(jīng)元個(gè)數(shù),以及第三層的神經(jīng)元個(gè)數(shù)
  super(simpleNet,self).__init__()
  self.layer1=nn.Linear(in_dim,n_hidden_1)
  self.layer2=nn.Linear(n_hidden_1,n_hidden_2)
  self.layer3=nn.Linear(n_hidden_2,out_dim)
 def forward(self,x):
  x=self.layer1(x)
  x=self.layer2(x)
  x=self.layer3(x)
  return x
 
 
#添加激活函數(shù)
class Activation_Net(nn.Module):
 def __init__(self,in_dim,n_hidden_1,n_hidden_2,out_dim):
  super(NeutalNetwork,self).__init__()
  self.layer1=nn.Sequential(#Sequential組合結(jié)構(gòu)
  nn.Linear(in_dim,n_hidden_1),nn.ReLU(True))
  self.layer2=nn.Sequential(
  nn.Linear(n_hidden_1,n_hidden_2),nn.ReLU(True))
  self.layer3=nn.Sequential(
  nn.Linear(n_hidden_2,out_dim))
 def forward(self,x):
  x=self.layer1(x)
  x=self.layer2(x)
  x=self.layer3(x)
  return x
#添加批標(biāo)準(zhǔn)化處理模塊,皮標(biāo)準(zhǔn)化放在全連接的后面,非線性的前面
class Batch_Net(nn.Module):
 def _init__(self,in_dim,n_hidden_1,n_hidden_2,out_dim):
  super(Batch_net,self).__init__()
  self.layer1=nn.Sequential(nn.Linear(in_dim,n_hidden_1),nn.BatchNormld(n_hidden_1),nn.ReLU(True))
  self.layer2=nn.Sequential(nn.Linear(n_hidden_1,n_hidden_2),nn.BatchNormld(n_hidden_2),nn.ReLU(True))
  self.layer3=nn.Sequential(nn.Linear(n_hidden_2,out_dim))
 def forword(self,x):
  x=self.layer1(x)
  x=self.layer2(x)
  x=self.layer3(x)
  return x
  
  

訓(xùn)練網(wǎng)絡(luò),

import torch
from torch.autograd import Variable
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from torch import nn,optim
from torch.utils.data import DataLoader
from torchvision import datasets,transforms
#定義一些超參數(shù)
import net
batch_size=64
learning_rate=1e-2
num_epoches=20
#預(yù)處理
data_tf=transforms.Compose(
[transforms.ToTensor(),transforms.Normalize([0.5],[0.5])])#將圖像轉(zhuǎn)化成tensor,然后繼續(xù)標(biāo)準(zhǔn)化,就是減均值,除以方差

#讀取數(shù)據(jù)集
train_dataset=datasets.MNIST(root='./data',train=True,transform=data_tf,download=True)
test_dataset=datasets.MNIST(root='./data',train=False,transform=data_tf)
#使用內(nèi)置的函數(shù)導(dǎo)入數(shù)據(jù)集
train_loader=DataLoader(train_dataset,batch_size=batch_size,shuffle=True)
test_loader=DataLoader(test_dataset,batch_size=batch_size,shuffle=False)

#導(dǎo)入網(wǎng)絡(luò),定義損失函數(shù)和優(yōu)化方法
model=net.simpleNet(28*28,300,100,10)
if torch.cuda.is_available():#是否使用cuda加速
 model=model.cuda()
criterion=nn.CrossEntropyLoss()
optimizer=optim.SGD(model.parameters(),lr=learning_rate)
import net
n_epochs=5
for epoch in range(n_epochs):
 running_loss=0.0
 running_correct=0
 print("epoch {}/{}".format(epoch,n_epochs))
 print("-"*10)
 for data in train_loader:
  img,label=data
  img=img.view(img.size(0),-1)
  if torch.cuda.is_available():
   img=img.cuda()
   label=label.cuda()
  else:
   img=Variable(img)
   label=Variable(label)
  out=model(img)#得到前向傳播的結(jié)果
  loss=criterion(out,label)#得到損失函數(shù)
  print_loss=loss.data.item()
  optimizer.zero_grad()#歸0梯度
  loss.backward()#反向傳播
  optimizer.step()#優(yōu)化
  running_loss+=loss.item()
  epoch+=1
  if epoch%50==0:
   print('epoch:{},loss:{:.4f}'.format(epoch,loss.data.item()))
 



訓(xùn)練的結(jié)果截圖如下:

測試網(wǎng)絡(luò)

#測試網(wǎng)絡(luò)
model.eval()#將模型變成測試模式
eval_loss=0
eval_acc=0
for data in test_loader:
 img,label=data
 img=img.view(img.size(0),-1)#測試集不需要反向傳播,所以可以在前項(xiàng)傳播的時(shí)候釋放內(nèi)存,節(jié)約內(nèi)存空間
 if torch.cuda.is_available():
  img=Variable(img,volatile=True).cuda()
  label=Variable(label,volatile=True).cuda()
 else:
  img=Variable(img,volatile=True)
  label=Variable(label,volatile=True)
 out=model(img)
 loss=criterion(out,label)
 eval_loss+=loss.item()*label.size(0)
 _,pred=torch.max(out,1)
 num_correct=(pred==label).sum()
 eval_acc+=num_correct.item()
print('test loss:{:.6f},ac:{:.6f}'.format(eval_loss/(len(test_dataset)),eval_acc/(len(test_dataset))))

訓(xùn)練的時(shí)候,還可以加入一些dropout,正則化,修改隱藏層神經(jīng)元的個(gè)數(shù),增加隱藏層數(shù),可以自己添加。

以上這篇pytorch三層全連接層實(shí)現(xiàn)手寫字母識(shí)別方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python利用socket實(shí)現(xiàn)udp文件傳輸功能

    python利用socket實(shí)現(xiàn)udp文件傳輸功能

    這篇文章主要為大家詳細(xì)介紹了python利用socket實(shí)現(xiàn)udp文件傳輸功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 我用Python抓取了7000 多本電子書案例詳解

    我用Python抓取了7000 多本電子書案例詳解

    這篇文章主要介紹了我用Python抓取了7000 多本電子書案例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • python和anaconda區(qū)別以及先后安裝的問題詳解

    python和anaconda區(qū)別以及先后安裝的問題詳解

    Anaconda(開源的Python包管理器)是一個(gè)python發(fā)行版,包含了conda、Python等180多個(gè)科學(xué)包及其依賴項(xiàng),下面這篇文章主要給大家介紹了關(guān)于python和anaconda區(qū)別以及先后安裝問題的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • 在python中寫個(gè)自定義數(shù)據(jù)包協(xié)議的打包和解包測試

    在python中寫個(gè)自定義數(shù)據(jù)包協(xié)議的打包和解包測試

    這篇文章主要介紹了在python中寫個(gè)自定義數(shù)據(jù)包協(xié)議的打包和解包測試,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • python 實(shí)現(xiàn)圖片上傳接口開發(fā) 并生成可以訪問的圖片url

    python 實(shí)現(xiàn)圖片上傳接口開發(fā) 并生成可以訪問的圖片url

    今天小編就為大家分享一篇python 實(shí)現(xiàn)圖片上傳接口開發(fā) 并生成可以訪問的圖片url,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Django的數(shù)據(jù)模型訪問多對多鍵值的方法

    Django的數(shù)據(jù)模型訪問多對多鍵值的方法

    這篇文章主要介紹了Django的數(shù)據(jù)模型訪問多對多鍵值的方法,Django是Python豐富多彩的web框架中最具人氣的一個(gè),需要的朋友可以參考下
    2015-07-07
  • Pandas庫之DataFrame使用的學(xué)習(xí)筆記

    Pandas庫之DataFrame使用的學(xué)習(xí)筆記

    這篇文章主要介紹了Pandas庫之DataFrame使用的學(xué)習(xí)筆記,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • python PyQt5的窗口界面的各種交互邏輯實(shí)現(xiàn)

    python PyQt5的窗口界面的各種交互邏輯實(shí)現(xiàn)

    PyQt5是一個(gè)Python綁定庫,用于Qt C++ GUI框架,它允許開發(fā)者使用Python語言創(chuàng)建跨平臺(tái)的應(yīng)用程序,并利用豐富的Qt圖形用戶界面功能,本文介紹了python中PyQt5窗口界面的各種交互邏輯實(shí)現(xiàn),需要的朋友可以參考下
    2024-07-07
  • Pandas在數(shù)據(jù)分析和機(jī)器學(xué)習(xí)中的應(yīng)用及優(yōu)勢

    Pandas在數(shù)據(jù)分析和機(jī)器學(xué)習(xí)中的應(yīng)用及優(yōu)勢

    Pandas是Python中用于數(shù)據(jù)處理和數(shù)據(jù)分析的庫,它提供了靈活的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)操作工具,包括Series和DataFrame等。Pandas還支持大量數(shù)據(jù)操作和數(shù)據(jù)分析功能,包括數(shù)據(jù)清洗、轉(zhuǎn)換、篩選、聚合、透視表、時(shí)間序列分析等
    2023-04-04
  • 簡單學(xué)習(xí)Python time模塊

    簡單學(xué)習(xí)Python time模塊

    這篇文章主要和大家一起簡單學(xué)習(xí)一下Python time模塊,Python time模塊提供了一些用于管理時(shí)間和日期的C庫函數(shù),對time模塊感興趣的小伙伴們可以參考一下
    2016-04-04

最新評論

东港市| 富宁县| 比如县| 岳池县| 金沙县| 新宁县| 鄂托克旗| 汪清县| 乐清市| 唐山市| 宜良县| 晋江市| 澳门| 关岭| 锡林郭勒盟| 怀远县| 绥江县| 凤翔县| 肥乡县| 永修县| 龙川县| 施甸县| 陆河县| 蕲春县| 镇平县| 桃江县| 莒南县| 鄢陵县| 石首市| 江北区| 平乡县| 荥阳市| 波密县| 西平县| 天水市| 湟中县| 淅川县| 含山县| 关岭| 巴青县| 余干县|