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

Pytorch實現(xiàn)神經(jīng)網(wǎng)絡(luò)的分類方式

 更新時間:2020年01月08日 08:39:44   作者:attitude_yu  
今天小編就為大家分享一篇Pytorch實現(xiàn)神經(jīng)網(wǎng)絡(luò)的分類方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

本文用于利用Pytorch實現(xiàn)神經(jīng)網(wǎng)絡(luò)的分類?。?!

1.訓練神經(jīng)網(wǎng)絡(luò)分類模型

import torch
from torch.autograd import Variable
import matplotlib.pyplot as plt
import torch.nn.functional as F
import torch.utils.data as Data
torch.manual_seed(1)#設(shè)置隨機種子,使得每次生成的隨機數(shù)是確定的
BATCH_SIZE = 5#設(shè)置batch size
 
#1.制作兩類數(shù)據(jù)
n_data = torch.ones( 1000,2 )
x0 = torch.normal( 1.5*n_data, 1 )#均值為2 標準差為1
y0 = torch.zeros( 1000 )
 
x1 = torch.normal( -1.5*n_data,1 )#均值為-2 標準差為1
y1 = torch.ones( 1000 )
print("數(shù)據(jù)集維度:",x0.size(),y0.size())
 
#合并訓練數(shù)據(jù)集,并轉(zhuǎn)化數(shù)據(jù)類型為浮點型或整型
x = torch.cat( (x0,x1),0 ).type( torch.FloatTensor )
y = torch.cat( (y0,y1) ).type( torch.LongTensor )
print( "合并后的數(shù)據(jù)集維度:",x.data.size(), y.data.size() )
 
#當不使用batch size訓練數(shù)據(jù)時,將Tensor放入Variable中
# x,y = Variable(x), Variable(y)
#繪制訓練數(shù)據(jù)
# plt.scatter( x.data.numpy()[:,0], x.data.numpy()[:,1], c=y.data.numpy())
# plt.show()
 
#當使用batch size訓練數(shù)據(jù)時,首先將tensor轉(zhuǎn)化為Dataset格式
torch_dataset = Data.TensorDataset(x, y)
 
#將dataset放入DataLoader中
loader = Data.DataLoader(
 dataset=torch_dataset,
 batch_size = BATCH_SIZE,#設(shè)置batch size
 shuffle=True,#打亂數(shù)據(jù)
 num_workers=2#多線程讀取數(shù)據(jù)
)
 
#2.前向傳播過程
class Net(torch.nn.Module):#繼承基類Module的屬性和方法
 def __init__(self, input, hidden, output):
  super(Net, self).__init__()#繼承__init__功能
  self.hidden = torch.nn.Linear(input, hidden)#隱層的線性輸出
  self.out = torch.nn.Linear(hidden, output)#輸出層線性輸出
 def forward(self, x):
  x = F.relu(self.hidden(x))
  x = self.out(x)
  return x
 
# 訓練模型的同時保存網(wǎng)絡(luò)模型參數(shù)
def save():
 #3.利用自定義的前向傳播過程設(shè)計網(wǎng)絡(luò),設(shè)置各層神經(jīng)元數(shù)量
 # net = Net(input=2, hidden=10, output=2)
 # print("神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu):",net)
 
 #3.快速搭建神經(jīng)網(wǎng)絡(luò)模型
 net = torch.nn.Sequential(
  torch.nn.Linear(2,10),#指定輸入層和隱層結(jié)點,獲得隱層線性輸出
  torch.nn.ReLU(),#隱層非線性化
  torch.nn.Linear(10,2)#指定隱層和輸出層結(jié)點,獲得輸出層線性輸出
 )
 
 #4.設(shè)置優(yōu)化算法、學習率
 # optimizer = torch.optim.SGD( net.parameters(), lr=0.2 )
 # optimizer = torch.optim.SGD( net.parameters(), lr=0.2, momentum=0.8 )
 # optimizer = torch.optim.RMSprop( net.parameters(), lr=0.2, alpha=0.9 )
 optimizer = torch.optim.Adam( net.parameters(), lr=0.2, betas=(0.9,0.99) )
 
 #5.設(shè)置損失函數(shù)
 loss_func = torch.nn.CrossEntropyLoss()
 
 plt.ion()#打開畫布,可視化更新過程
 #6.迭代訓練
 for epoch in range(2):
  for step, (batch_x, batch_y) in enumerate(loader):
   out = net(batch_x)#輸入訓練集,獲得當前迭代輸出值
   loss = loss_func(out, batch_y)#獲得當前迭代的損失
 
   optimizer.zero_grad()#清除上次迭代的更新梯度
   loss.backward()#反向傳播
   optimizer.step()#更新權(quán)重
 
   if step%200==0:
    plt.cla()#清空之前畫布上的內(nèi)容
    entire_out = net(x)#測試整個訓練集
    #獲得當前softmax層最大概率對應(yīng)的索引值
    pred = torch.max(F.softmax(entire_out), 1)[1]
    #將二維壓縮為一維
    pred_y = pred.data.numpy().squeeze()
    label_y = y.data.numpy()
    plt.scatter(x.data.numpy()[:, 0], x.data.numpy()[:, 1], c=pred_y, cmap='RdYlGn')
    accuracy = sum(pred_y == label_y)/y.size()
    print("第 %d 個epoch,第 %d 次迭代,準確率為 %.2f"%(epoch+1, step/200+1, accuracy))
    #在指定位置添加文本
    plt.text(1.5, -4, 'Accuracy=%.2f' % accuracy, fontdict={'size': 15, 'color': 'red'})
    plt.pause(2)#圖像顯示時間
 
 #7.保存模型結(jié)構(gòu)和參數(shù)
 torch.save(net, 'net.pkl')
 #7.只保存模型參數(shù)
 # torch.save(net.state_dict(), 'net_param.pkl')
 
 plt.ioff()#關(guān)閉畫布
 plt.show()
 
if __name__ == '__main__':
 save()

2. 讀取已訓練好的模型測試數(shù)據(jù)

import torch
from torch.autograd import Variable
import matplotlib.pyplot as plt
import torch.nn.functional as F
 
#制作數(shù)據(jù)
n_data = torch.ones( 100,2 )
x0 = torch.normal( 1.5*n_data, 1 )#均值為2 標準差為1
y0 = torch.zeros( 100 )
 
x1 = torch.normal( -1.5*n_data,1 )#均值為-2 標準差為1
y1 = torch.ones( 100 )
print("數(shù)據(jù)集維度:",x0.size(),y0.size())
 
#合并訓練數(shù)據(jù)集,并轉(zhuǎn)化數(shù)據(jù)類型為浮點型或整型
x = torch.cat( (x0,x1),0 ).type( torch.FloatTensor )
y = torch.cat( (y0,y1) ).type( torch.LongTensor )
print( "合并后的數(shù)據(jù)集維度:",x.data.size(), y.data.size() )
 
#將Tensor放入Variable中
x,y = Variable(x), Variable(y)
 
#載入模型和參數(shù)
def restore_net():
 net = torch.load('net.pkl')
 #獲得載入模型的預(yù)測輸出
 pred = net(x)
 # 獲得當前softmax層最大概率對應(yīng)的索引值
 pred = torch.max(F.softmax(pred), 1)[1]
 # 將二維壓縮為一維
 pred_y = pred.data.numpy().squeeze()
 label_y = y.data.numpy()
 accuracy = sum(pred_y == label_y) / y.size()
 print("準確率為:",accuracy)
 plt.scatter(x.data.numpy()[:, 0], x.data.numpy()[:, 1], c=pred_y, cmap='RdYlGn')
 plt.show()
#僅載入模型參數(shù),需要先創(chuàng)建網(wǎng)絡(luò)模型
def restore_param():
 net = torch.nn.Sequential(
  torch.nn.Linear(2,10),#指定輸入層和隱層結(jié)點,獲得隱層線性輸出
  torch.nn.ReLU(),#隱層非線性化
  torch.nn.Linear(10,2)#指定隱層和輸出層結(jié)點,獲得輸出層線性輸出
 )
 
 net.load_state_dict( torch.load('net_param.pkl') )
 #獲得載入模型的預(yù)測輸出
 pred = net(x)
 # 獲得當前softmax層最大概率對應(yīng)的索引值
 pred = torch.max(F.softmax(pred), 1)[1]
 # 將二維壓縮為一維
 pred_y = pred.data.numpy().squeeze()
 label_y = y.data.numpy()
 accuracy = sum(pred_y == label_y) / y.size()
 print("準確率為:",accuracy)
 plt.scatter(x.data.numpy()[:, 0], x.data.numpy()[:, 1], c=pred_y, cmap='RdYlGn')
 plt.show()
 
if __name__ =='__main__':
 # restore_net()
 restore_param()

以上這篇Pytorch實現(xiàn)神經(jīng)網(wǎng)絡(luò)的分類方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python多線程互斥鎖與死鎖問題詳解

    python多線程互斥鎖與死鎖問題詳解

    大家好,本篇文章主要講的是python多線程互斥鎖與死鎖問題詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • 對pycharm代碼整體左移和右移縮進快捷鍵的介紹

    對pycharm代碼整體左移和右移縮進快捷鍵的介紹

    今天小編就為大家分享一篇對pycharm代碼整體左移和右移縮進快捷鍵的介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • wxPython實現(xiàn)文本框基礎(chǔ)組件

    wxPython實現(xiàn)文本框基礎(chǔ)組件

    這篇文章主要介紹了wxPython實現(xiàn)文本框基礎(chǔ)組件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Python爬取哆啦A夢-伴我同行2豆瓣影評并生成詞云圖

    Python爬取哆啦A夢-伴我同行2豆瓣影評并生成詞云圖

    哆啦A夢系列是陪伴我,乃至陪伴了幾代人成長的故事.50年來,藤子·F·不二雄先生創(chuàng)造了竹蜻蜓,任意門,時光機器等等無數(shù)的新奇道具,讓大雄和他的小伙伴們經(jīng)歷了各種冒險,也經(jīng)歷了許多充滿戲劇性的啼笑皆非的日常.特意寫了這篇文章,教大家怎么繪制詞云圖,需要的朋友可以參考下
    2021-06-06
  • 在Python中使用判斷語句和循環(huán)的教程

    在Python中使用判斷語句和循環(huán)的教程

    這篇文章主要介紹了在Python中使用判斷語句和循環(huán)的教程,是Python學習當中的基礎(chǔ)知識,代碼基于Python2.x,需要的朋友可以參考下
    2015-04-04
  • Python PyQt5-圖形界面的美化操作

    Python PyQt5-圖形界面的美化操作

    這篇文章主要介紹了Python PyQt5-圖形界面的美化操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python?切片為什么不會索引越界?

    Python?切片為什么不會索引越界?

    這篇文章主要介紹了Python?切片為什么不會索引越界?切片(slice)是?Python?中一種很有特色的特性,在正式開始之前,我們先來從關(guān)于切片的相關(guān)知識開始介紹,感興趣的小伙伴一起參考參考呀</P><P>
    2021-12-12
  • python實現(xiàn)移動木板小游戲

    python實現(xiàn)移動木板小游戲

    這篇文章主要為大家詳細介紹了python實現(xiàn)移動木板小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • 詳解Python不同版本之間的切換方法

    詳解Python不同版本之間的切換方法

    本文主要介紹了詳解Python不同版本之間的切換方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • Python 多線程超詳細到位總結(jié)

    Python 多線程超詳細到位總結(jié)

    線程在程序中是獨立的、并發(fā)的執(zhí)行流。與分隔的進程相比,進程中線程之間的隔離程度要小,它們共享內(nèi)存、文件句柄和其他進程應(yīng)有的狀態(tài)。線程的劃分尺度小于進程,使多線程程序的并發(fā)性高。進程在執(zhí)行過程中擁有獨立內(nèi)存單元,而多個線程共享內(nèi)存,從而提升程序運行效率
    2021-11-11

最新評論

瑞金市| 岳西县| 莱阳市| 肥西县| 三台县| 天门市| 孝昌县| 肥西县| 色达县| 高碑店市| 本溪| 贡觉县| 耿马| 科技| 莱芜市| 威远县| 连平县| 内江市| 新龙县| 兴仁县| 宁城县| 泰兴市| 鹤峰县| 台前县| 浑源县| 洛隆县| 噶尔县| 阿勒泰市| 凤凰县| 汝州市| 长海县| 车险| 霍城县| 平江县| 嘉义县| 永登县| 南漳县| 马公市| 青神县| 历史| 讷河市|