日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

(pytorch-深度学习系列)pytorch实现多层感知机(手动定义模型)对Fashion-MNIST数据集进行分类-学习笔记

發布時間:2024/8/23 pytorch 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (pytorch-深度学习系列)pytorch实现多层感知机(手动定义模型)对Fashion-MNIST数据集进行分类-学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

pytorch實現多層感知機對Fashion-MNIST數據集進行分類(手動定義模型)

多層感知機:
多層感知機在單層神經網絡的基礎上引入了一到多個隱藏層(hidden layer)。隱藏層位于輸入層和輸出層之間。

輸入和輸出個數分別為4和3,中間的隱藏層中包含了5個隱藏單元,輸入層不涉及計算,多層感知機的層數為2,隱藏層中的神經元和輸入層中各個輸入完全連接,輸出層中的神經元和隱藏層中的各個神經元也完全連接。因此,多層感知機中的隱藏層和輸出層都是全連接層。
多層感知機就是含有至少一個隱藏層的由全連接層組成的神經網絡,且每個隱藏層的輸出通過激活函數進行變換。多層感知機的層數和各隱藏層中隱藏單元個數都是超參數。
多層感知機按以下方式計算輸出:

導入所需模塊:

import torch import numpy as np import sys

讀取數據集:

mnist_train = torchvision.datasets.FashionMNIST(root='~/Datasets/FashionMNIST', train=True, download=True, transform=transforms.ToTensor()) mnist_test = torchvision.datasets.FashionMNIST(root='~/Datasets/FashionMNIST', train=False, download=True, transform=transforms.ToTensor()) batch_size = 256 if sys.platform.startswith('win'):num_workers = 0 # 0表示不用額外的進程來加速讀取數據 else:num_workers = 4 train_iter = torch.utils.data.DataLoader(mnist_train, batch_size=batch_size, shuffle=True, num_workers=num_workers) test_iter = torch.utils.data.DataLoader(mnist_test, batch_size=batch_size, shuffle=False, num_workers=num_workers)

定義模型的參數:

num_inputs, num_outputs, num_hiddens = 784, 10, 256W1 = torch.tensor(np.random.normal(0, 0.01, (num_inputs, num_hiddens)), dtype=torch.float) b1 = torch.zeros(num_hiddens, dtype=torch.float) W2 = torch.tensor(np.random.normal(0, 0.01, (num_hiddens, num_outputs)), dtype=torch.float) b2 = torch.zeros(num_outputs, dtype=torch.float)params = [W1, b1, W2, b2] for param in params:param.requires_grad_(requires_grad=True)

定義模型:

def relu(X): # 激活函數return torch.max(input=X, other=torch.tensor(0.0))# 使用基礎的max函數來實現ReLU,而非直接調用relu函數def net(X): # 定義模型結構X = X.view((-1, num_inputs)) # view函數將每張原始圖像改成長度為num_inputs的向量H = relu(torch.matmul(X, W1) + b1)return torch.matmul(H, W2) + b2loss = torch.nn.CrossEntropyLoss() # 損失函數

訓練模型:

num_epochs, lr = 5, 100.0 def evaluate_accuracy(data_iter, net):acc_sum, n = 0.0, 0for X, y in data_iter:acc_sum += (net(X).argmax(dim=1) == y).float().sum().item()n += y.shape[0]return acc_sum / ndef train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size,params=None, lr=None, optimizer=None):for epoch in range(num_epochs):train_l_sum, train_acc_sum, n = 0.0, 0.0, 0for X, y in train_iter:y_hat = net(X)l = loss(y_hat, y).sum()# 梯度清零if optimizer is not None:optimizer.zero_grad() # 這里我們用到優化器,所以直接對優化器行梯度清零elif params is not None and params[0].grad is not None:for param in params:param.grad.data.zero_()l.backward()if optimizer is None:sgd(params, lr, batch_size)else:optimizer.step() # 用到優化器這里train_l_sum += l.item()train_acc_sum += (y_hat.argmax(dim=1) == y).sum().item()n += y.shape[0] test_acc = evaluate_accuracy(test_iter, net)print('epoch %d, loss %.4f, train acc %.3f, test acc %.3f'% (epoch + 1, train_l_sum / n, train_acc_sum / n, test_acc))train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size, params, lr)

總結

以上是生活随笔為你收集整理的(pytorch-深度学习系列)pytorch实现多层感知机(手动定义模型)对Fashion-MNIST数据集进行分类-学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。