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

Python Pytorch深度學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)

 更新時間:2021年10月28日 10:27:23   作者:柚子味的羊  
今天小編就為大家分享一篇關(guān)于Pytorch神經(jīng)網(wǎng)絡(luò)的文章,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

一、簡介

神經(jīng)網(wǎng)絡(luò)可以通過torch.nn包構(gòu)建,上一節(jié)已經(jīng)對自動梯度有些了解,神經(jīng)網(wǎng)絡(luò)是基于自動梯度來定義一些模型。一個nn.Module包括層和一個方法,它會返回輸出。例如:數(shù)字圖片識別的網(wǎng)絡(luò):

在這里插入圖片描述

上圖是一個簡單的前回饋神經(jīng)網(wǎng)絡(luò),它接收輸入,讓輸入一個接著一個通過一些層,最后給出輸出。

二、神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程

一個典型的神經(jīng)

# -*- coding: utf-8 -*-
"""
Created on Sun Oct 24 15:56:23 2021
@author: Lenovo
"""
# 神經(jīng)網(wǎng)絡(luò)
# import torch
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
    def __init__(self):
        super(Net,self).__init__()
        # 1個輸入,6個輸出,5*5的卷積
        # 內(nèi)核
        self.conv1=nn.Conv2d(1,6,5)
        self.conv2=nn.Conv2d(6,16,5)
        # 映射函數(shù):線性——y=Wx+b
        self.fc1=nn.Linear(16*5*5,120)#輸入特征值:16*5*5,輸出特征值:120
        self.fc2=nn.Linear(120,84)
        self.fc3=nn.Linear(84,10)
    def forward(self,x):
        x=F.max_pool2d(F.relu(self.conv1(x)),(2,2))
        # 如果其尺寸是一個square只能指定一個數(shù)字
        x=F.max_pool2d(F.relu(self.conv2(x)),2)
        x=x.view(-1,self.num_flat_features(x))
        x=F.relu(self.fc1(x))
        x=F.relu(self.fc2(x))
        x=self.fc3(x)
        return x
    def num_flat_features(self,x):
        size=x.size()[1:]
        num_features=1
        for s in size:
            num_features *= s
        return num_features               
net=Net()
print(net)

運行結(jié)果

在這里插入圖片描述

以上定義了一個前饋函數(shù),然后反向傳播函數(shù)被自動通過autograd定義,可以使用任何張量操作在前饋函數(shù)上。

2、通過調(diào)用net.parameters()返回模型可訓(xùn)練的參數(shù)

# 查看模型可訓(xùn)練的參數(shù)
params=list(net.parameters())
print(len(params))
print(params[0].size())# conv1 的權(quán)重weight

運行結(jié)果

在這里插入圖片描述

3、迭代整個輸入

嘗試隨機生成一個3232的輸入。注:期望的輸入維度是3232,為了在MNIST數(shù)據(jù)集上使用這個網(wǎng)絡(luò),我們需要把數(shù)據(jù)集中的圖片維度修改為32*32

input=torch.randn(1, 1, 32,32)
print(input)
out=net(input)
print(out)

運行結(jié)果

在這里插入圖片描述

4、調(diào)用反向傳播

將所有參數(shù)梯度緩存器置零,用隨機的梯度來反向傳播

# 調(diào)用反向傳播
net.zero_grad()
out.backward(torch.randn(1, 10))

運行結(jié)果

在這里插入圖片描述

5、計算損失值

#計算損失值——損失函數(shù):一個損失函數(shù)需要一對輸入:模型輸出和目標,然后計算一個值來評估輸出距離目標多遠。有一些不同的損失函數(shù)在nn包中,一個簡單的損失函數(shù)就是nn.MSELoss,他計算了均方誤差

如果跟隨損失到反向傳播路徑,可以使用他的.grad_fn屬性,將會看到一個計算圖

在這里插入圖片描述

# 在調(diào)用loss.backward()時候,整個圖都會微分,而且所有的圖中的requires_grad=True的張量將會讓他們的grad張量累計梯度
#跟隨以下步驟反向傳播
print(loss.grad_fn)#MSELoss
print(loss.grad_fn.next_functions[0][0])#Linear
print(loss.grad_fn.next_functions[0][0].next_functions[0][0])#relu

運行結(jié)果

在這里插入圖片描述

6、反向傳播梯度

為了實現(xiàn)反向傳播loss,我們所有需要做的事情僅僅是使用loss.backward()。需要先清空現(xiàn)存的梯度,不然梯度將會和現(xiàn)存的梯度累計在一起。

# 調(diào)用loss.backward()然后看一下con1的偏置項在反向傳播之前和之后的變化
net.zero_grad()
print('conv1.bias.grad before backward')
print(net.conv1.bias.grad)
loss.backward()#反向傳播
print('conv1.bias.grad after backward')
print(net.conv1.bias.grad)

運行結(jié)果

在這里插入圖片描述

7、更新神經(jīng)網(wǎng)絡(luò)參數(shù)

# =============================================================================
# # 最簡單的更新規(guī)則就是隨機梯度下降:weight=weight-learning_rate*gradient
# learning_rate=0.01
# for f in net.parameters():
#     f.data.sub_(f.grad.data*learning_rate)#f.data=f.data-learning_rate*gradient
#  =============================================================================

如果使用的是神經(jīng)網(wǎng)絡(luò),想要使用不同的更新規(guī)則,類似于SGD,Nesterov-SGD,Adam,RMSProp等。為了讓這可行,Pytorch建立一個稱為torch.optim的package實現(xiàn)所有的方法,使用起來更加方便

# =============================================================================
# import torch.optim as optim
# optimizer=optim.SGD(net.parameters(), lr=0.01)
# # 在迭代訓(xùn)練過程中
# optimizer.zero_grad()#將現(xiàn)存梯度置零
# output=net(input)
# loss=criterion(output,target)
# loss.backward()#反向傳遞
# optimizer.step()#更新網(wǎng)絡(luò)參數(shù)
# =============================================================================

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 解決Jupyter Notebook “signal only works in main thread“問題

    解決Jupyter Notebook “signal only works&nb

    這篇文章主要介紹了解決Jupyter Notebook “signal only works in main thread“問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • python?命令行界面的用戶交互及優(yōu)化

    python?命令行界面的用戶交互及優(yōu)化

    這篇文章主要為大家介紹了python?命令行界面的用戶交互及優(yōu)化方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • CentOS下使用yum安裝python-pip失敗的完美解決方法

    CentOS下使用yum安裝python-pip失敗的完美解決方法

    這篇文章主要介紹了CentOS下使用yum安裝python-pip失敗的完美解決方法,需要的朋友可以參考下
    2017-08-08
  • Python如何使用type()函數(shù)查看數(shù)據(jù)的類型

    Python如何使用type()函數(shù)查看數(shù)據(jù)的類型

    這篇文章主要介紹了Python如何使用type()函數(shù)查看數(shù)據(jù)的類型,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python中使用sklearn進行特征降維的方法

    Python中使用sklearn進行特征降維的方法

    在Python中,可以使用sklearn庫中的特征降維方法對數(shù)據(jù)進行處理。主要包括基于PCA算法的降維、基于LDA算法的降維、以及利用特征選擇方法進行降維。這些方法可以提高模型的訓(xùn)練效率和預(yù)測準確率,特別是在高維數(shù)據(jù)集中具有重要的作用
    2023-04-04
  • Python使用進程Process模塊管理資源

    Python使用進程Process模塊管理資源

    這篇文章主要介紹了Python使用進程Process模塊管理資源,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • python生成指定長度的隨機數(shù)密碼

    python生成指定長度的隨機數(shù)密碼

    這篇文章主要介紹了python生成指定長度的隨機密碼示例,密碼使用數(shù)字和字母組合,大家參考使用吧
    2014-01-01
  • python中文字符如何轉(zhuǎn)url編碼

    python中文字符如何轉(zhuǎn)url編碼

    這篇文章主要介紹了python中文字符如何轉(zhuǎn)url編碼問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python腳本實現(xiàn)隨機數(shù)據(jù)生成自由詳解

    Python腳本實現(xiàn)隨機數(shù)據(jù)生成自由詳解

    這篇文章主要為大家詳細介紹了Python如何通過腳本實現(xiàn)隨機數(shù)據(jù)生成自由,文中的示例代碼講解詳細,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧
    2023-12-12
  • python深度總結(jié)線性回歸

    python深度總結(jié)線性回歸

    這篇文章主要介紹了python的深度總結(jié)之線性回歸,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09

最新評論

聂拉木县| 内黄县| 神木县| 康平县| 桐乡市| 娱乐| 庆云县| 广德县| 保定市| 呈贡县| 灵石县| 新野县| 额济纳旗| 临沧市| 崇礼县| 清丰县| 娄烦县| 尼勒克县| 连江县| 荣成市| 徐闻县| 弋阳县| 衡阳市| 邵阳市| 博罗县| 安庆市| 定州市| 梓潼县| 修武县| 根河市| 凌海市| 丰台区| 美姑县| 玉林市| 台东市| 竹溪县| 庄浪县| 长岛县| 晋宁县| 沙雅县| 肥城市|