国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Pytorch:手把手教你搭建簡單的全連接網(wǎng)絡(luò)

這篇具有很好參考價值的文章主要介紹了Pytorch:手把手教你搭建簡單的全連接網(wǎng)絡(luò)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

代碼里的注釋一定要看?。?!里面包括了一些基本知識和原因

可以依次把下面的代碼段合在一起運行,也可以通過jupyter notebook分次運行

第一步:一些庫的導(dǎo)入

import torch#深度學(xué)習(xí)的pytoch平臺
import torch.nn as nn
import numpy as np
import random
import time#可以用來簡單地記錄時間
import matplotlib.pyplot as plt#畫圖
#隨機種子
random.seed(1234)
np.random.seed(1234)
torch.manual_seed(1234)
torch.cuda.manual_seed(1234)
torch.cuda.manual_seed_all(1234)

第二步:構(gòu)建簡單的數(shù)據(jù)集,這里利用sinx函數(shù)作為例子

x = np.linspace(-np.pi,np.pi).astype(np.float32)
y = np.sin(x)
#隨機取25個點
x_train = random.sample(x.tolist(),25)    #x_train 就相當(dāng)于網(wǎng)絡(luò)的輸入
y_train = np.sin(x_train)                 #y_train 就相當(dāng)于輸入對應(yīng)的標(biāo)簽,每一個輸入都會對應(yīng)一個標(biāo)簽
plt.scatter(x_train,y_train,c="r")
plt.plot(x,y)

Pytorch:手把手教你搭建簡單的全連接網(wǎng)絡(luò)

?紅色的點就是我在sinx函數(shù)上取的已知點作為網(wǎng)絡(luò)的訓(xùn)練點。

第三步:用pytorch搭建簡單的全連接網(wǎng)絡(luò)

class DNN(nn.Module):
    def __init__(self):
        super().__init__()
        layers =  [1,20,1]   #網(wǎng)絡(luò)每一層的神經(jīng)元個數(shù),[1,10,1]說明只有一個隱含層,輸入的變量是一個,也對應(yīng)一個輸出。如果是兩個變量對應(yīng)一個輸出,那就是[2,10,1]
        self.layer1 = nn.Linear(layers[0],layers[1])  #用torh.nn.Linear構(gòu)建線性層,本質(zhì)上相當(dāng)于構(gòu)建了一個維度為[layers[0],layers[1]]的矩陣,這里面所有的元素都是權(quán)重
        self.layer2 = nn.Linear(layers[1],layers[2])
        self.elu = nn.ELU()       #非線性的激活函數(shù)。如果只有線性層,那么相當(dāng)于輸出只是輸入做了了線性變換的結(jié)果,對于線性回歸沒有問題。但是非線性回歸我們需要加入激活函數(shù)使輸出的結(jié)果具有非線性的特征
    def forward(self,d):#d就是整個網(wǎng)絡(luò)的輸入
        d1 = self.layer1(d)
        d1 = self.elu(d1)#每一個線性層之后都需要加入一個激活函數(shù)使其非線性化。
        d2 = self.layer2(d1)#但是在網(wǎng)絡(luò)的最后一層可以不用激活函數(shù),因為有些激活函數(shù)會使得輸出結(jié)果限定在一定的值域里。
        return d2

第四步:一些基本參數(shù)變量的確定以及數(shù)據(jù)格式的轉(zhuǎn)換

device = torch.device("cuda") #在跑深度學(xué)習(xí)的時候最好使用GPU,這樣速度會很快。不要的話默認(rèn)用cpu跑
epochs = 10000                #這是迭代次數(shù),把所有的訓(xùn)練數(shù)據(jù)輸入到網(wǎng)絡(luò)里去就叫完成了一次epoch。
learningrate = 1e-4           #學(xué)習(xí)率,相當(dāng)于優(yōu)化算法里的步長,學(xué)習(xí)率越大,網(wǎng)絡(luò)參數(shù)更新地更加激進(jìn)。學(xué)習(xí)率越小,網(wǎng)絡(luò)學(xué)習(xí)地更加穩(wěn)定。
net = DNN().to(device=device) #網(wǎng)絡(luò)的初始化
optimizer = torch.optim.Adam(net.parameters(), lr=learningrate)#優(yōu)化器,不同的優(yōu)化器選擇的優(yōu)化方式不同,這里用的是隨機梯度下降SGD的一種類型,Adam自適應(yīng)優(yōu)化器。需要輸入網(wǎng)絡(luò)的參數(shù)以及學(xué)習(xí)率,當(dāng)然還可以設(shè)置其他的參數(shù)
mseloss  = nn.MSELoss()      #損失函數(shù),這里選用的是MSE。損失函數(shù)也就是用來計算網(wǎng)絡(luò)輸出的結(jié)果與對應(yīng)的標(biāo)簽之間的差距,差距越大,說明網(wǎng)絡(luò)訓(xùn)練不夠好,還需要繼續(xù)迭代。
MinTrainLoss = 1e10          
train_loss =[]               #用一個空列表來存儲訓(xùn)練時的損失,便于畫圖
pt_x_train = torch.from_numpy(np.array(x_train)).to(device=device,dtype = torch.float32).reshape(-1,1)  #這里需要把我們的訓(xùn)練數(shù)據(jù)轉(zhuǎn)換為pytorch tensor的類型,并且把它變成gpu能運算的形式。
pt_y_train = torch.from_numpy(np.array(y_train)).to(device=device,dtype = torch.float32).reshape(-1,1) #reshap的目的是把維度變成(25,1),這樣25相當(dāng)于是batch,我們就可以一次性把所有的點都輸入到網(wǎng)絡(luò)里去,最后網(wǎng)絡(luò)輸出的結(jié)果也不是(1,1)而是(25,1),我們就能直接計算所有點的損失
print(pt_x_train.dtype)
print(pt_x_train.shape)

第五步:網(wǎng)絡(luò)訓(xùn)練過程

start = time.time()
start0=time.time()
for epoch in range(1,epochs+1):
    net.train()    #net.train():在這個模式下,網(wǎng)絡(luò)的參數(shù)會得到更新。對應(yīng)的還有net.eval(),這就是在驗證集上的時候,我們只評價模型,并不對網(wǎng)絡(luò)參數(shù)進(jìn)行更新。
    pt_y_pred = net(pt_x_train) #將tensor放入網(wǎng)絡(luò)中得到預(yù)測值
    loss = mseloss(pt_y_pred,pt_y_train)  #用mseloss計算預(yù)測值和對應(yīng)標(biāo)簽的差別
    optimizer.zero_grad()      #在每一次迭代梯度反傳更新網(wǎng)絡(luò)參數(shù)時,需要把之前的梯度清0,不然上一次的梯度會累積到這一次。
    loss.backward()  # 反向傳播
    optimizer.step() #優(yōu)化器進(jìn)行下一次迭代
    if epoch % 10 == 0:#每10個epoch保存一次loss
        end = time.time()
        print("epoch:[%5d/%5d] time:%.2fs current_loss:%.5f"
          %(epoch,epochs,(end-start),loss.item()))
        start = time.time()
    train_loss.append(loss.item())
    if train_loss[-1] < MinTrainLoss:
        torch.save(net.state_dict(),"model.pth") #保存每一次loss下降的模型
        MinTrainLoss = train_loss[-1]
end0 = time.time()
print("訓(xùn)練總用時: %.2fmin"%((end0-start0)/60)) 

Pytorch:手把手教你搭建簡單的全連接網(wǎng)絡(luò)

?訓(xùn)練過程如上,時間我這里設(shè)置的比較簡單,除了分鐘,之后的時間沒有按照60進(jìn)制規(guī)定。

第六步:查看loss下降情況

plt.plot(range(epochs),train_loss)
plt.xlabel("epoch")
plt.ylabel("loss")

Pytorch:手把手教你搭建簡單的全連接網(wǎng)絡(luò)

可以看到收斂的還是比較好的。

第七步:導(dǎo)入網(wǎng)絡(luò)模型,輸入驗證數(shù)據(jù),預(yù)測結(jié)果?

x_test = np.linspace(-np.pi,np.pi).astype(np.float32)
pt_x_test = torch.from_numpy(x_test).to(device=device,dtype=torch.float32).reshape(-1,1)
Dnn = DNN().to(device)
Dnn.load_state_dict(torch.load("model.pth",map_location=device))#pytoch 導(dǎo)入模型
Dnn.eval()#這里指評價模型,不反傳,所以用eval模式
pt_y_test = Dnn(pt_x_test) 
y_test = pt_y_test.detach().cpu().numpy()#輸出結(jié)果torch tensor,需要轉(zhuǎn)化為numpy類型來進(jìn)行可視化
plt.scatter(x_train,y_train,c="r")
plt.plot(x_test,y_test)

Pytorch:手把手教你搭建簡單的全連接網(wǎng)絡(luò)

這里紅色的點為訓(xùn)練用的數(shù)據(jù),藍(lán)色為我們的預(yù)測曲線,可以看到整體上擬合的是比較好的。

以上就是用pytorch搭建的簡單全連接網(wǎng)絡(luò)的基本步驟,希望可以給到初學(xué)者一些幫助!文章來源地址http://www.zghlxwxcb.cn/news/detail-465859.html

實驗室網(wǎng)址:CIG | zhixiang

Github網(wǎng)址:ProgrammerZXG (Zhixiang Guo) · GitHub

到了這里,關(guān)于Pytorch:手把手教你搭建簡單的全連接網(wǎng)絡(luò)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 手把手教你,本地RabbitMQ服務(wù)搭建(windows)

    手把手教你,本地RabbitMQ服務(wù)搭建(windows)

    前面已經(jīng)對RabbitMQ介紹了很多內(nèi)容,今天主要是和大家搭建一個可用的RabbitMQ服務(wù)端,方便后續(xù)進(jìn)一步實操與細(xì)節(jié)分析 跟我們跑java項目,要裝jdk類似。rabbitMQ是基于Erlang開發(fā)的,因此安裝rabbitMQ服務(wù)器之前,需要先安裝Erlang環(huán)境。 【PS: 我已經(jīng)上傳了對應(yīng)資源,windows可直接下載

    2024年02月14日
    瀏覽(38)
  • 手把手教你搭建自己本地的ChatGLM

    手把手教你搭建自己本地的ChatGLM

    如果能夠本地自己搭建一個ChatGPT的話,訓(xùn)練一個屬于自己知識庫體系的人工智能AI對話系統(tǒng),那么能夠高效的處理應(yīng)對所屬領(lǐng)域的專業(yè)知識,甚至加入職業(yè)思維的意識,訓(xùn)練出能夠結(jié)合行業(yè)領(lǐng)域知識高效產(chǎn)出的AI。這必定是十分高效的生產(chǎn)力工具,且本地部署能夠保護(hù)個人數(shù)

    2024年02月03日
    瀏覽(92)
  • 手把手教你5分鐘搭建RabbitMq開發(fā)環(huán)境

    手把手教你5分鐘搭建RabbitMq開發(fā)環(huán)境

    演示環(huán)境 1、使用Vagrant 和 VirtualBox創(chuàng)建linux虛擬機 不知道Vagrant怎么使用的可以看這里。 ①在cmd窗口執(zhí)行命令 vagrant init generic/centos7 ,初始化linux啟動環(huán)境 ②執(zhí)行啟動命令 vagrant up 啟動Linux虛擬機 ③修改當(dāng)前目錄的Vagrantfile文件,為虛擬機配置內(nèi)網(wǎng)ip,后面登錄的時候會用到

    2023年04月12日
    瀏覽(27)
  • 手把手教你搭建ARM32 QEMU環(huán)境

    手把手教你搭建ARM32 QEMU環(huán)境

    我們知道嵌入式開發(fā)調(diào)試就要和各種硬件打交道,所以學(xué)習(xí)就要專門購買各種開發(fā)版,浪費資金,開會演示效果還需要攜帶一大串的板子和電線,不勝其煩。然而Qemu的使用可以避免頻繁在開發(fā)板上燒寫版本,如果進(jìn)行的調(diào)試工作與外設(shè)無關(guān),僅僅是內(nèi)核方面的調(diào)試,Qemu模擬

    2024年02月19日
    瀏覽(31)
  • 手把手教你搭建 Webpack 5 + React 項目

    手把手教你搭建 Webpack 5 + React 項目

    在平時工作中,為減少開發(fā)成本,一般都會使用腳手架來進(jìn)行開發(fā),比如 create-react-app 。腳手架都會幫我們配置好了 webpack,但如果想自己搭建 webpack 項目要怎么做呢?這邊文章將介紹如何使用 webpack 5 來搭建 react 項目,項目地址在文末。 1.1 Webpack 的好處 試想在不使用任何打

    2024年02月08日
    瀏覽(31)
  • 手把手教你搭建一個Minecraft 服務(wù)器

    手把手教你搭建一個Minecraft 服務(wù)器

    這次,我們教大家如何搭建一個我的世界服務(wù)器 首先,我們來到這個網(wǎng)站 MCVersions.net - Minecraft Versions Download List MCVersions.net offers an archive of Minecraft Client and Server jars to download, for both current and old releases! https://mcversions.net/ ? 在這里,我們點擊對應(yīng)的版本,從左到右依次是穩(wěn)定版

    2024年02月09日
    瀏覽(33)
  • 手把手教你搭建內(nèi)網(wǎng)穿透服務(wù)器

    手把手教你搭建內(nèi)網(wǎng)穿透服務(wù)器

    有時候我們需要把外網(wǎng)可以訪問自己的內(nèi)網(wǎng),比如在微信公眾號開發(fā)調(diào)用接口時為了方便調(diào)試就需要配置回調(diào)地址或者是想把自己的nas可以在不在家就能訪問,這時候就需要內(nèi)網(wǎng)穿透。使用內(nèi)網(wǎng)穿透主要有幾種方式,1.使用內(nèi)網(wǎng)穿透服務(wù)商提供的服務(wù),但是這種需要付費,免

    2024年04月23日
    瀏覽(32)
  • 手把手教你在Windows下搭建Vue開發(fā)環(huán)境

    手把手教你在Windows下搭建Vue開發(fā)環(huán)境

    最近有小伙伴不會Vue環(huán)境的部署,小孟親自測試了下,大家有需要的可以按照下面的學(xué)習(xí)。 如果想看視頻的,也可以看視頻的教程: https://www.bilibili.com/video/BV1if4y1X7BS/?spm_id_from=333.788.recommend_more_video.-1vd_source=e64f225fc5daf048d2687502cb23bb3b 在Windows下搭建Vue開發(fā)環(huán)境: 官網(wǎng)https://n

    2024年02月08日
    瀏覽(27)
  • 1. [手把手教你搭建] 之 在linux上搭建java環(huán)境

    1. [手把手教你搭建] 之 在linux上搭建java環(huán)境

    當(dāng)我們要在服務(wù)器上部署自己的java服務(wù)時,首先我們需要安裝和配置好java環(huán)境,那么我們現(xiàn)需要在服務(wù)器上下載java1.8版本的安裝包,之后再完成環(huán)境配置,服務(wù)部署這一套流程,本文會講解java安裝包的下載及環(huán)境配置,這里使用的是壓縮包的安裝方式: 首先創(chuàng)建package目錄

    2023年04月11日
    瀏覽(25)
  • 手把手教你搭建VUE+VScode+elementUI開發(fā)環(huán)境

    手把手教你搭建VUE+VScode+elementUI開發(fā)環(huán)境

    1.安裝node.js 按照VUE必須先要安裝node.js (1)打開NodeJs官網(wǎng):https://nodejs.org/en/download/ ,根據(jù)系統(tǒng)下載,Windows操作系統(tǒng)一般選擇是64-bit。 (2)點擊64-bit就開始下載了。 (3)雙擊安裝,安裝過程基本直接“NEXT”就可以了。(windows的安裝msi文件在過程中會直接添加path的系統(tǒng)變

    2024年02月09日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包