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

主頁 > 知識庫 > Pytorch實現全連接層的操作

Pytorch實現全連接層的操作

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

全連接神經網絡(FC)

全連接神經網絡是一種最基本的神經網絡結構,英文為Full Connection,所以一般簡稱FC。

FC的準則很簡單:神經網絡中除輸入層之外的每個節點都和上一層的所有節點有連接。

以上一次的MNIST為例

import torch
import torch.utils.data
from torch import optim
from torchvision import datasets
from torchvision.transforms import transforms
import torch.nn.functional as F
batch_size = 200
learning_rate = 0.001
epochs = 20
train_loader = torch.utils.data.DataLoader(
    datasets.MNIST('mnistdata', train=True, download=False,
                   transform=transforms.Compose([
                       transforms.ToTensor(),
                       transforms.Normalize((0.1307,), (0.3081,))
                   ])),
    batch_size=batch_size, shuffle=True)
test_loader = torch.utils.data.DataLoader(
    datasets.MNIST('mnistdata', train=False, download=False,
                   transform=transforms.Compose([
                       transforms.ToTensor(),
                       transforms.Normalize((0.1307,), (0.3081,))
                   ])),
    batch_size=batch_size, shuffle=True)
w1, b1 = torch.randn(200, 784, requires_grad=True), torch.zeros(200, requires_grad=True)
w2, b2 = torch.randn(200, 200, requires_grad=True), torch.zeros(200, requires_grad=True)
w3, b3 = torch.randn(10, 200, requires_grad=True), torch.zeros(10, requires_grad=True)
torch.nn.init.kaiming_normal_(w1)
torch.nn.init.kaiming_normal_(w2)
torch.nn.init.kaiming_normal_(w3)
def forward(x):
    x = x@w1.t() + b1
    x = F.relu(x)
    x = x@w2.t() + b2
    x = F.relu(x)
    x = x@w3.t() + b3
    x = F.relu(x)
    return x
optimizer = optim.Adam([w1, b1, w2, b2, w3, b3], lr=learning_rate)
criteon = torch.nn.CrossEntropyLoss()
for epoch in range(epochs):
    for batch_idx, (data, target) in enumerate(train_loader):
        data = data.view(-1, 28*28)
        logits = forward(data)
        loss = criteon(logits, target)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        if batch_idx % 100 == 0:
            print('Train Epoch : {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
                epoch, batch_idx*len(data), len(train_loader.dataset),
                100.*batch_idx/len(train_loader), loss.item()
            ))
    test_loss = 0
    correct = 0
    for data, target in test_loader:
        data = data.view(-1, 28*28)
        logits = forward(data)
        test_loss += criteon(logits, target).item()
        pred = logits.data.max(1)[1]
        correct += pred.eq(target.data).sum()
    test_loss /= len(test_loader.dataset)
    print('\nTest set : Averge loss: {:.4f}, Accurancy: {}/{}({:.3f}%)'.format(
        test_loss, correct, len(test_loader.dataset),
        100.*correct/len(test_loader.dataset)
        ))

我們將每個w和b都進行了定義,并且自己寫了一個forward函數。如果我們采用了全連接層,那么整個代碼也會更加簡介明了。

首先,我們定義自己的網絡結構的類:

class MLP(nn.Module):
    def __init__(self):
        super(MLP, self).__init__()
        self.model = nn.Sequential(
            nn.Linear(784, 200),
            nn.LeakyReLU(inplace=True),
            nn.Linear(200, 200),
            nn.LeakyReLU(inplace=True),
            nn.Linear(200, 10),
            nn.LeakyReLU(inplace=True)
        )
    def forward(self, x):
        x = self.model(x)
        return x

它繼承于nn.Moudle,并且自己定義里整個網絡結構。

其中inplace的作用是直接復用存儲空間,減少新開辟存儲空間。

除此之外,它可以直接進行運算,不需要手動定義參數和寫出運算語句,更加簡便。

同時我們還可以發現,它自動完成了初試化,不需要像之前一樣再手動寫一個初始化了。

區分nn.Relu和F.relu()

前者是一個類的接口,后者是一個函數式接口。

前者都是大寫的,并且調用的的時候需要先實例化才能使用,而后者是小寫的可以直接使用。

最重要的是后者的自由度更高,更適合做一些自己定義的操作。

完整代碼

import torch
import torch.utils.data
from torch import optim, nn
from torchvision import datasets
from torchvision.transforms import transforms
import torch.nn.functional as F
batch_size = 200
learning_rate = 0.001
epochs = 20
train_loader = torch.utils.data.DataLoader(
    datasets.MNIST('mnistdata', train=True, download=False,
                   transform=transforms.Compose([
                       transforms.ToTensor(),
                       transforms.Normalize((0.1307,), (0.3081,))
                   ])),
    batch_size=batch_size, shuffle=True)
test_loader = torch.utils.data.DataLoader(
    datasets.MNIST('mnistdata', train=False, download=False,
                   transform=transforms.Compose([
                       transforms.ToTensor(),
                       transforms.Normalize((0.1307,), (0.3081,))
                   ])),
    batch_size=batch_size, shuffle=True)
class MLP(nn.Module):
    def __init__(self):
        super(MLP, self).__init__()
        self.model = nn.Sequential(
            nn.Linear(784, 200),
            nn.LeakyReLU(inplace=True),
            nn.Linear(200, 200),
            nn.LeakyReLU(inplace=True),
            nn.Linear(200, 10),
            nn.LeakyReLU(inplace=True)
        )
    def forward(self, x):
        x = self.model(x)
        return x
device = torch.device('cuda:0')
net = MLP().to(device)
optimizer = optim.Adam(net.parameters(), lr=learning_rate)
criteon = nn.CrossEntropyLoss().to(device)
for epoch in range(epochs):
    for batch_idx, (data, target) in enumerate(train_loader):
        data = data.view(-1, 28*28)
        data, target = data.to(device), target.to(device)
        logits = net(data)
        loss = criteon(logits, target)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        if batch_idx % 100 == 0:
            print('Train Epoch : {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
                epoch, batch_idx*len(data), len(train_loader.dataset),
                100.*batch_idx/len(train_loader), loss.item()
            ))
    test_loss = 0
    correct = 0
    for data, target in test_loader:
        data = data.view(-1, 28*28)
        data, target = data.to(device), target.to(device)
        logits = net(data)
        test_loss += criteon(logits, target).item()
        pred = logits.data.max(1)[1]
        correct += pred.eq(target.data).sum()
    test_loss /= len(test_loader.dataset)
    print('\nTest set : Averge loss: {:.4f}, Accurancy: {}/{}({:.3f}%)'.format(
        test_loss, correct, len(test_loader.dataset),
        100.*correct/len(test_loader.dataset)
        ))

補充:pytorch 實現一個隱層的全連接神經網絡

torch.nn 實現 模型的定義,網絡層的定義,損失函數的定義。

import torch
# N is batch size; D_in is input dimension;
# H is hidden dimension; D_out is output dimension.
N, D_in, H, D_out = 64, 1000, 100, 10
# Create random Tensors to hold inputs and outputs
x = torch.randn(N, D_in)
y = torch.randn(N, D_out)
# Use the nn package to define our model as a sequence of layers. nn.Sequential
# is a Module which contains other Modules, and applies them in sequence to
# produce its output. Each Linear Module computes output from input using a
# linear function, and holds internal Tensors for its weight and bias.
model = torch.nn.Sequential(
    torch.nn.Linear(D_in, H),
    torch.nn.ReLU(),
    torch.nn.Linear(H, D_out),
)
# The nn package also contains definitions of popular loss functions; in this
# case we will use Mean Squared Error (MSE) as our loss function.
loss_fn = torch.nn.MSELoss(reduction='sum')
learning_rate = 1e-4
for t in range(500):
    # Forward pass: compute predicted y by passing x to the model. Module objects
    # override the __call__ operator so you can call them like functions. When
    # doing so you pass a Tensor of input data to the Module and it produces
    # a Tensor of output data.
    y_pred = model(x)
    # Compute and print loss. We pass Tensors containing the predicted and true
    # values of y, and the loss function returns a Tensor containing the
    # loss.
    loss = loss_fn(y_pred, y)
    print(t, loss.item())
    # Zero the gradients before running the backward pass.
    model.zero_grad()
    # Backward pass: compute gradient of the loss with respect to all the learnable
    # parameters of the model. Internally, the parameters of each Module are stored
    # in Tensors with requires_grad=True, so this call will compute gradients for
    # all learnable parameters in the model.
    loss.backward()
    # Update the weights using gradient descent. Each parameter is a Tensor, so
    # we can access its gradients like we did before.
    with torch.no_grad():
        for param in model.parameters():
            param -= learning_rate * param.grad

上面,我們使用parem= -= learning_rate* param.grad 手動更新參數。

使用torch.optim 自動優化參數。optim這個package提供了各種不同的模型優化方法,包括SGD+momentum, RMSProp, Adam等等。

optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)
for t in range(500):
    y_pred = model(x)
    loss = loss_fn(y_pred, y)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • pytorch_detach 切斷網絡反傳方式
  • pytorch 禁止/允許計算局部梯度的操作
  • 如何利用Pytorch計算三角函數
  • 聊聊PyTorch中eval和no_grad的關系
  • Pytorch實現圖像識別之數字識別(附詳細注釋)
  • pytorch 優化器(optim)不同參數組,不同學習率設置的操作
  • PyTorch 如何將CIFAR100數據按類標歸類保存
  • PyTorch的Debug指南
  • Python深度學習之使用Pytorch搭建ShuffleNetv2
  • win10系統配置GPU版本Pytorch的詳細教程
  • 淺談pytorch中的nn.Sequential(*net[3: 5])是啥意思
  • pytorch visdom安裝開啟及使用方法
  • PyTorch CUDA環境配置及安裝的步驟(圖文教程)
  • pytorch中的nn.ZeroPad2d()零填充函數實例詳解
  • 使用pytorch實現線性回歸
  • pytorch實現線性回歸以及多元回歸
  • PyTorch學習之軟件準備與基本操作總結

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

巨人網絡通訊聲明:本文標題《Pytorch實現全連接層的操作》,本文關鍵詞  Pytorch,實現,全,連接,層,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Pytorch實現全連接層的操作》相關的同類信息!
  • 本頁收集關于Pytorch實現全連接層的操作的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产日本一区二区| 91国偷自产一区二区开放时间| 欧美日韩三级一区| www.在线欧美| 日韩中文字幕一区二区三区| 久久影院午夜片一区| 欧美日韩激情一区| 91免费版在线看| zzijzzij亚洲日本少妇熟睡| 美女一区二区久久| 日本伊人午夜精品| 亚洲丶国产丶欧美一区二区三区| 亚洲日本一区二区| 亚洲欧美日韩人成在线播放| 亚洲视频资源在线| 亚洲天堂av老司机| 亚洲图片有声小说| 亚洲国产视频在线| 日韩精品久久久久久| 日本不卡一二三区黄网| 日本亚洲一区二区| 久久狠狠亚洲综合| 国产九九视频一区二区三区| 国产成人亚洲综合a∨婷婷图片| 久久99精品国产麻豆婷婷洗澡| 另类调教123区 | 欧美va亚洲va国产综合| 日韩欧美一二区| 2021久久国产精品不只是精品| 久久久精品免费网站| 91精品国产aⅴ一区二区| 久久97超碰色| 亚洲精品高清视频在线观看| 色综合一区二区| 中文字幕欧美国产| 欧美日韩国产精选| 国内精品伊人久久久久av影院 | 国产精品色一区二区三区| 久草在线在线精品观看| 一区二区在线观看免费| 91美女视频网站| 欧美日韩国产123区| 欧美电视剧在线看免费| 色天天综合久久久久综合片| 亚洲一二三四区| 亚洲欧美在线aaa| 精品三级av在线| 5566中文字幕一区二区电影| 色猫猫国产区一区二在线视频| 国产盗摄女厕一区二区三区| 五月天中文字幕一区二区| 亚洲色图在线看| 国产精品久久免费看| 国产日产精品1区| 久久影视一区二区| 欧美sm极限捆绑bd| 日韩欧美国产午夜精品| 欧美日本精品一区二区三区| 日韩avvvv在线播放| 99热精品国产| 欧美xxxxxxxxx| 亚洲电影第三页| 一区二区三区四区五区视频在线观看| 国产精品久久免费看| 亚洲欧美色综合| 一区二区三区四区不卡在线| 亚洲小说欧美激情另类| 亚洲一区日韩精品中文字幕| 亚洲国产中文字幕在线视频综合| 一区二区三区久久久| 亚洲福利一二三区| 午夜精品福利在线| 九九精品视频在线看| 国产一区激情在线| 成人黄色片在线观看| 91在线你懂得| 91九色最新地址| 日韩一区二区三区在线观看| 日韩精品一区二区三区在线观看| 精品欧美乱码久久久久久1区2区 | 亚洲一区在线电影| 精品成人佐山爱一区二区| 欧美亚洲一区三区| 欧美一区二区三区在线观看视频| 日韩欧美卡一卡二| 国产亚洲人成网站| 日韩美女啊v在线免费观看| 一区二区不卡在线播放 | 日韩经典中文字幕一区| 免费看日韩a级影片| 国产福利不卡视频| 色综合久久综合网| 国产在线不卡一区| 欧美三级中文字幕| 三级一区在线视频先锋| 在线播放国产精品二区一二区四区 | 91年精品国产| 51久久夜色精品国产麻豆| 日韩一区二区三区精品视频| 欧美国产禁国产网站cc| 一区二区三区四区视频精品免费 | 欧美一区二区三区视频免费播放| 久久嫩草精品久久久精品一| 亚洲精品视频自拍| 激情久久五月天| 精品视频123区在线观看| 日本一区二区视频在线| 日本91福利区| 欧美亚洲免费在线一区| 久久精品欧美日韩| 天堂蜜桃一区二区三区| 色婷婷久久久综合中文字幕| 精品噜噜噜噜久久久久久久久试看| 国产精品初高中害羞小美女文| 裸体在线国模精品偷拍| 欧美老年两性高潮| 一区二区三区加勒比av| eeuss鲁片一区二区三区在线看| 日韩女同互慰一区二区| 亚洲福利电影网| 色菇凉天天综合网| 日韩伦理av电影| 99国内精品久久| 国产精品久久福利| 成人av先锋影音| 久久久久成人黄色影片| 伦理电影国产精品| 欧美一区二区国产| 日韩国产精品久久久| 欧美日韩的一区二区| 亚洲第一会所有码转帖| 色欧美88888久久久久久影院| 国产精品久久久久aaaa| 成人美女视频在线看| 国产精品毛片无遮挡高清| 国产精品美女www爽爽爽| 不卡的av中国片| 麻豆精品视频在线观看| 一区二区三区在线视频观看58| 亚洲日本护士毛茸茸| jlzzjlzz亚洲女人18| 国产精品福利一区二区三区| 99精品视频中文字幕| 一区二区三区四区激情| 7777精品伊人久久久大香线蕉经典版下载| 亚洲欧美日韩在线不卡| 日本韩国一区二区| 亚洲国产欧美一区二区三区丁香婷| 欧美伊人久久大香线蕉综合69 | 日韩欧美在线观看一区二区三区| 亚洲第四色夜色| 精品久久国产97色综合| 国产经典欧美精品| 亚洲精品免费播放| 久久精品国产久精国产| 国产精品天美传媒| 久久免费的精品国产v∧| 欧美一区午夜视频在线观看| 久久精品日产第一区二区三区高清版| 国产精品自产自拍| 亚洲日韩欧美一区二区在线| 欧美人成免费网站| 国产成人午夜片在线观看高清观看| 亚洲色图制服丝袜| 日韩视频免费观看高清完整版在线观看 | 国产不卡在线播放| 亚洲欧美日韩电影| 日韩欧美国产三级电影视频| 国产精品久久久久aaaa| 久久久久久久久久久99999| 精品国产凹凸成av人导航| 日韩欧美在线网站| 精品蜜桃在线看| 91伊人久久大香线蕉| 另类小说图片综合网| 亚洲精品中文字幕在线观看| 精品国免费一区二区三区| 91麻豆国产精品久久| 极品少妇xxxx精品少妇偷拍| 亚洲卡通欧美制服中文| 久久奇米777| 91精品视频网| 日本韩国欧美国产| 成人深夜在线观看| 美腿丝袜一区二区三区| 亚洲视频 欧洲视频| 国产清纯白嫩初高生在线观看91 | 欧美在线不卡视频| 成人综合在线观看| 美洲天堂一区二卡三卡四卡视频| 亚洲欧美激情小说另类| 久久久久久久av麻豆果冻| 69久久99精品久久久久婷婷| 99精品热视频| 成人高清视频在线观看| 久久国产精品第一页| 日韩中文字幕不卡| 自拍偷在线精品自拍偷无码专区| 国产日产精品一区| 亚洲精品一线二线三线无人区|