欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PyTorch?之?強(qiáng)大的?hub?模塊和搭建神經(jīng)網(wǎng)絡(luò)進(jìn)行氣溫預(yù)測(cè)

 更新時(shí)間:2023年03月20日 14:04:49   作者:虛心求知的熊  
hub 模塊是調(diào)用別人訓(xùn)練好的網(wǎng)絡(luò)架構(gòu)以及訓(xùn)練好的權(quán)重參數(shù),使得自己的一行代碼就可以解決問(wèn)題,方便大家進(jìn)行調(diào)用,這篇文章主要介紹了PyTorch?之?強(qiáng)大的?hub?模塊和搭建神經(jīng)網(wǎng)絡(luò)進(jìn)行氣溫預(yù)測(cè),需要的朋友可以參考下

本文參加新星計(jì)劃人工智能(Pytorch)賽道:https://bbs.csdn.net/topics/613989052

在這里插入圖片描述

一、強(qiáng)大的 hub 模塊

  • hub 模塊是調(diào)用別人訓(xùn)練好的網(wǎng)絡(luò)架構(gòu)以及訓(xùn)練好的權(quán)重參數(shù),使得自己的一行代碼就可以解決問(wèn)題,方便大家進(jìn)行調(diào)用。
  • hub 模塊的 GITHUB 地址是 https://github.com/pytorch/hub。
  • hub 模塊的模型 網(wǎng)址是 https://pytorch.org/hub/research-models

1. hub 模塊的使用

首先,我們進(jìn)入網(wǎng)址。會(huì)出現(xiàn)如下的界面(這其中就是別人訓(xùn)練好的模型,我們通過(guò)一行代碼就可以實(shí)現(xiàn)調(diào)用)。

然后,我們隨便點(diǎn)開(kāi)一個(gè)模型,會(huì)出現(xiàn)如下界面。

在這里插入圖片描述

其中,第一個(gè)按鈕是對(duì)應(yīng)的 GITHUB 代碼,第二個(gè)是使用谷歌配置好的實(shí)驗(yàn)環(huán)境,第三個(gè)進(jìn)行模型演示。

2. hub 模塊的代碼演示

首先,我們進(jìn)行基本的導(dǎo)入。

import torch
model = torch.hub.load('pytorch/vision:v0.4.2', 'deeplabv3_resnet101', pretrained=True)
model.eval()

我們可以使用 hub.list() 查看對(duì)應(yīng) pytorch 版本的模型信息。

torch.hub.list('pytorch/vision:v0.4.2')
#Using cache found in C:\Users\Administrator/.cache\torch\hub\pytorch_vision_v0.4.2
#['alexnet',
# 'deeplabv3_resnet101',
# 'densenet121',
# 'densenet161',
# 'densenet169',
# 'densenet201',
# 'fcn_resnet101',
# 'googlenet',
# 'inception_v3',
# 'mobilenet_v2',
# 'resnet101',
# 'resnet152',
# 'resnet18',
# 'resnet34',
# 'resnet50',
# 'resnext101_32x8d',
# 'resnext50_32x4d',
# 'shufflenet_v2_x0_5',
# 'shufflenet_v2_x1_0',
# 'squeezenet1_0',
# 'squeezenet1_1',
# 'vgg11',
# 'vgg11_bn',
# 'vgg13',
# 'vgg13_bn',
# 'vgg16',
# 'vgg16_bn',
# 'vgg19',
# 'vgg19_bn',
# 'wide_resnet101_2',
# 'wide_resnet50_2']

我們可以從 pytorch 的網(wǎng)站上下載一個(gè)實(shí)例。

# Download an example image from the pytorch website
import urllib
url, filename = ("https://github.com/pytorch/hub/raw/master/dog.jpg", "dog.jpg")
try: urllib.URLopener().retrieve(url, filename)
except: urllib.request.urlretrieve(url, filename)

我們執(zhí)行樣本,這里需要注意的是 torchvision。

# sample execution (requires torchvision)
from PIL import Image
from torchvision import transforms
input_image = Image.open(filename)
preprocess = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])
?
input_tensor = preprocess(input_image)
input_batch = input_tensor.unsqueeze(0) # create a mini-batch as expected by the model

我們需要將輸入和模型移動(dòng)到GPU以獲得速度(如果可用)。

# move the input and model to GPU for speed if available
if torch.cuda.is_available():
    input_batch = input_batch.to('cuda')
    model.to('cuda')
?
with torch.no_grad():
    output = model(input_batch)['out'][0]
output_predictions = output.argmax(0)

我們可以創(chuàng)建一個(gè)調(diào)色板,為每個(gè)類選擇一種顏色。

# create a color pallette, selecting a color for each class
palette = torch.tensor([2 ** 25 - 1, 2 ** 15 - 1, 2 ** 21 - 1])
colors = torch.as_tensor([i for i in range(21)])[:, None] * palette
colors = (colors % 255).numpy().astype("uint8")

我們可以使用 hub 模塊中的模型繪制每種顏色 21 個(gè)類別的語(yǔ)義分割預(yù)測(cè)。?

# plot the semantic segmentation predictions of 21 classes in each color
r = Image.fromarray(output_predictions.byte().cpu().numpy()).resize(input_image.size)
r.putpalette(colors)
?
import matplotlib.pyplot as plt
plt.imshow(r)
plt.show()

在這里插入圖片描述

二、搭建神經(jīng)網(wǎng)絡(luò)進(jìn)行氣溫預(yù)測(cè)

1. 數(shù)據(jù)信息處理 在最開(kāi)始,我們需要導(dǎo)入必備的庫(kù)。

import numpy as np
import pandas as pd 
import matplotlib.pyplot as plt
import torch
import torch.optim as optim
import warnings
warnings.filterwarnings("ignore")
%matplotlib inline

我們需要觀察一下自己的數(shù)據(jù)都有哪些信息,在此之前,我們需要進(jìn)行數(shù)據(jù)的讀入,并打印數(shù)據(jù)的前五行進(jìn)行觀察。

features = pd.read_csv('temps.csv')
features.head()
#year	month	day	week	temp_2	temp_1	average	actual	friend
#0	2016	1	1	Fri	45	45	45.6	45	29
#1	2016	1	2	Sat	44	45	45.7	44	61
#2	2016	1	3	Sun	45	44	45.8	41	56
#3	2016	1	4	Mon	44	41	45.9	40	53
#4	2016	1	5	Tues	41	40	46.0	44	41
  • 在我們的數(shù)據(jù)表中,包含如下數(shù)據(jù)信息:
  • (1) year 表示年數(shù)時(shí)間信息。
  • (2) month 表示月數(shù)時(shí)間信息。
  • (3) day 表示天數(shù)時(shí)間信息。
  • (4) week 表示周數(shù)時(shí)間信息。
  • (5) temp_2 表示前天的最高溫度值。
  • (6) temp_1 表示昨天的最高溫度值。
  • (7) average 表示在歷史中,每年這一天的平均最高溫度值。
  • (8) actual 表示這就是我們的標(biāo)簽值了,當(dāng)天的真實(shí)最高溫度。
  • (9) friend 表示這一列可能是湊熱鬧的,你的朋友猜測(cè)的可能值,咱們不管它就好了。
  • 在獲悉每一個(gè)數(shù)據(jù)的信息之后,我們需要知道一共有多少個(gè)數(shù)據(jù)。

print('數(shù)據(jù)維度:', features.shape)
#數(shù)據(jù)維度: (348, 9)
  • (348, 9) 表示一共有 348 天,每一天有 9 個(gè)數(shù)據(jù)特征。
  • 對(duì)于這么多的數(shù)據(jù),直接進(jìn)行行和列的操作可能會(huì)不太容易,因此,我們可以導(dǎo)入時(shí)間數(shù)據(jù)模塊,將其轉(zhuǎn)換為標(biāo)準(zhǔn)的時(shí)間信息。
# 處理時(shí)間數(shù)據(jù)
import datetime
?
# 分別得到年,月,日
years = features['year']
months = features['month']
days = features['day']
?
# datetime格式
dates = [str(int(year)) + '-' + str(int(month)) + '-' + str(int(day)) for year, month, day in zip(years, months, days)]
dates = [datetime.datetime.strptime(date, '%Y-%m-%d') for date in dates]

我們可以讀取新列 dates 中的部分?jǐn)?shù)據(jù)。

dates[:5]
#[datetime.datetime(2016, 1, 1, 0, 0),
# datetime.datetime(2016, 1, 2, 0, 0),
# datetime.datetime(2016, 1, 3, 0, 0),
# datetime.datetime(2016, 1, 4, 0, 0),
# datetime.datetime(2016, 1, 5, 0, 0)]

2. 數(shù)據(jù)圖畫(huà)繪制

在基本數(shù)據(jù)處理完成后,我們就開(kāi)始圖畫(huà)的繪制,在最開(kāi)始,需要指定為默認(rèn)的風(fēng)格。

plt.style.use('fivethirtyeight')

設(shè)置布局信息。

# 設(shè)置布局
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2, figsize = (10,10))
fig.autofmt_xdate(rotation = 45)

設(shè)置標(biāo)簽值信息。

#標(biāo)簽值
ax1.plot(dates, features['actual'])
ax1.set_xlabel(''); ax1.set_ylabel('Temperature'); ax1.set_title('Max Temp')

繪制昨天也就是 temp_1 的數(shù)據(jù)圖畫(huà)。?

# 昨天
ax2.plot(dates, features['temp_1'])
ax2.set_xlabel(''); ax2.set_ylabel('Temperature'); ax2.set_title('Previous Max Temp')

繪制前天也就是 temp_2 的數(shù)據(jù)圖畫(huà)。?

# 前天
ax3.plot(dates, features['temp_2'])
ax3.set_xlabel('Date'); ax3.set_ylabel('Temperature'); ax3.set_title('Two Days Prior Max Temp')

繪制朋友也就是 friend 的數(shù)據(jù)圖畫(huà)。

# 我的逗逼朋友
ax4.plot(dates, features['friend'])
ax4.set_xlabel('Date'); ax4.set_ylabel('Temperature'); ax4.set_title('Friend Estimate')

在上述信息設(shè)置完成后,開(kāi)始圖畫(huà)的繪制。

plt.tight_layout(pad=2)

對(duì)原始數(shù)據(jù)中的信息進(jìn)行編碼,這里主要是指周數(shù)信息。

# 獨(dú)熱編碼
features = pd.get_dummies(features)
features.head(5)
#year	month	day	temp_2	temp_1	average	actual	friend	week_Fri	week_Mon	week_Sat	week_Sun	week_Thurs	week_Tues	week_Wed
#0	2016	1	1	45	45	45.6	45	29	1	0	0	0	0	0	0
#1	2016	1	2	44	45	45.7	44	61	0	0	1	0	0	0	0
#2	2016	1	3	45	44	45.8	41	56	0	0	0	1	0	0	0
#3	2016	1	4	44	41	45.9	40	53	0	1	0	0	0	0	0
#4	2016	1	5	41	40	46.0	44	41	0	0	0	0	0	1	0

在周數(shù)信息編碼完成后,我們將準(zhǔn)確值進(jìn)行標(biāo)簽操作,在特征數(shù)據(jù)中去掉標(biāo)簽數(shù)據(jù),并將此時(shí)數(shù)據(jù)特征中的標(biāo)簽信息保存一下,并將其轉(zhuǎn)換成合適的格式。

# 標(biāo)簽
labels = np.array(features['actual'])
?
# 在特征中去掉標(biāo)簽
features= features.drop('actual', axis = 1)
?
# 名字單獨(dú)保存一下,以備后患
feature_list = list(features.columns)
?
# 轉(zhuǎn)換成合適的格式
features = np.array(features)

我們可以查看此時(shí)特征數(shù)據(jù)的具體數(shù)量。

features.shape
#(348, 14)
  • (348, 14) 表示我們的特征數(shù)據(jù)當(dāng)中一共有 348 個(gè),每一個(gè)有 14 個(gè)特征。
  • 我們可以查看第一個(gè)的具體數(shù)據(jù)。
from sklearn import preprocessing
input_features = preprocessing.StandardScaler().fit_transform(features)
input_features[0]
#array([ 0.        , -1.5678393 , -1.65682171, -1.48452388, -1.49443549,
#       -1.3470703 , -1.98891668,  2.44131112, -0.40482045, -0.40961596,
#       -0.40482045, -0.40482045, -0.41913682, -0.40482045])

3. 構(gòu)建網(wǎng)絡(luò)模型

x = torch.tensor(input_features, dtype = float)
?
y = torch.tensor(labels, dtype = float)
?
# 權(quán)重參數(shù)初始化
weights = torch.randn((14, 128), dtype = float, requires_grad = True) 
biases = torch.randn(128, dtype = float, requires_grad = True) 
weights2 = torch.randn((128, 1), dtype = float, requires_grad = True) 
biases2 = torch.randn(1, dtype = float, requires_grad = True) 
?
learning_rate = 0.001 
losses = []
?
for i in range(1000):
    # 計(jì)算隱層
    hidden = x.mm(weights) + biases
    # 加入激活函數(shù)
    hidden = torch.relu(hidden)
    # 預(yù)測(cè)結(jié)果
    predictions = hidden.mm(weights2) + biases2
    # 通計(jì)算損失
    loss = torch.mean((predictions - y) ** 2) 
    losses.append(loss.data.numpy())
    
    # 打印損失值
    if i % 100 == 0:
        print('loss:', loss)
    #返向傳播計(jì)算
    loss.backward()
    
    #更新參數(shù)
    weights.data.add_(- learning_rate * weights.grad.data)  
    biases.data.add_(- learning_rate * biases.grad.data)
    weights2.data.add_(- learning_rate * weights2.grad.data)
    biases2.data.add_(- learning_rate * biases2.grad.data)
    
    # 每次迭代都得記得清空
    weights.grad.data.zero_()
    biases.grad.data.zero_()
    weights2.grad.data.zero_()
    biases2.grad.data.zero_()
?#loss: tensor(8347.9924, dtype=torch.float64, grad_fn=<MeanBackward0>)
#loss: tensor(152.3170, dtype=torch.float64, grad_fn=<MeanBackward0>)
#loss: tensor(145.9625, dtype=torch.float64, grad_fn=<MeanBackward0>)
#loss: tensor(143.9453, dtype=torch.float64, grad_fn=<MeanBackward0>)
#loss: tensor(142.8161, dtype=torch.float64, grad_fn=<MeanBackward0>)
#loss: tensor(142.0664, dtype=torch.float64, grad_fn=<MeanBackward0>)
#loss: tensor(141.5386, dtype=torch.float64, grad_fn=<MeanBackward0>)
#loss: tensor(141.1528, dtype=torch.float64, grad_fn=<MeanBackward0>)
#loss: tensor(140.8618, dtype=torch.float64, grad_fn=<MeanBackward0>)
#loss: tensor(140.6318, dtype=torch.float64, grad_fn=<MeanBackward0>)

我們查看預(yù)測(cè)數(shù)據(jù)的具體數(shù)量,應(yīng)該是一共有 348 個(gè),每個(gè)只有一個(gè)值,也就是 (348,1)。

predictions.shape
#torch.Size([348, 1])

4. 更簡(jiǎn)單的構(gòu)建網(wǎng)絡(luò)模型

input_size = input_features.shape[1]
hidden_size = 128
output_size = 1
batch_size = 16
my_nn = torch.nn.Sequential(
    torch.nn.Linear(input_size, hidden_size),
    torch.nn.Sigmoid(),
    torch.nn.Linear(hidden_size, output_size),
)
cost = torch.nn.MSELoss(reduction='mean')
optimizer = torch.optim.Adam(my_nn.parameters(), lr = 0.001)
# 訓(xùn)練網(wǎng)絡(luò)
losses = []
for i in range(1000):
    batch_loss = []
    # MINI-Batch方法來(lái)進(jìn)行訓(xùn)練
    for start in range(0, len(input_features), batch_size):
        end = start + batch_size if start + batch_size < len(input_features) else len(input_features)
        xx = torch.tensor(input_features[start:end], dtype = torch.float, requires_grad = True)
        yy = torch.tensor(labels[start:end], dtype = torch.float, requires_grad = True)
        prediction = my_nn(xx)
        loss = cost(prediction, yy)
        optimizer.zero_grad()
        loss.backward(retain_graph=True)
        optimizer.step()
        batch_loss.append(loss.data.numpy())
    
    # 打印損失
    if i % 100==0:
        losses.append(np.mean(batch_loss))
        print(i, np.mean(batch_loss))
#0 3950.7627
#100 37.9201
#200 35.654438
#300 35.278366
#400 35.116814
#500 34.986076
#600 34.868954
#700 34.75414
#800 34.637356
#900 34.516705

我們可以得到如下的預(yù)測(cè)訓(xùn)練結(jié)果,將其用圖畫(huà)的形式展現(xiàn)出來(lái)。

x = torch.tensor(input_features, dtype = torch.float)
predict = my_nn(x).data.numpy()
# 轉(zhuǎn)換日期格式
dates = [str(int(year)) + '-' + str(int(month)) + '-' + str(int(day)) for year, month, day in zip(years, months, days)]
dates = [datetime.datetime.strptime(date, '%Y-%m-%d') for date in dates]
?
# 創(chuàng)建一個(gè)表格來(lái)存日期和其對(duì)應(yīng)的標(biāo)簽數(shù)值
true_data = pd.DataFrame(data = {'date': dates, 'actual': labels})
?
# 同理,再創(chuàng)建一個(gè)來(lái)存日期和其對(duì)應(yīng)的模型預(yù)測(cè)值
months = features[:, feature_list.index('month')]
days = features[:, feature_list.index('day')]
years = features[:, feature_list.index('year')]
?
test_dates = [str(int(year)) + '-' + str(int(month)) + '-' + str(int(day)) for year, month, day in zip(years, months, days)]
?
test_dates = [datetime.datetime.strptime(date, '%Y-%m-%d') for date in test_dates]
?
predictions_data = pd.DataFrame(data = {'date': test_dates, 'prediction': predict.reshape(-1)}) 
# 真實(shí)值
plt.plot(true_data['date'], true_data['actual'], 'b-', label = 'actual')
?
# 預(yù)測(cè)值
plt.plot(predictions_data['date'], predictions_data['prediction'], 'ro', label = 'prediction')
plt.xticks(rotation = '60'); 
plt.legend()
?
# 圖名
plt.xlabel('Date'); plt.ylabel('Maximum Temperature (F)'); plt.title('Actual and Predicted Values');

在這里插入圖片描述

到此這篇關(guān)于PyTorch 之 強(qiáng)大的 hub 模塊和搭建神經(jīng)網(wǎng)絡(luò)進(jìn)行氣溫預(yù)測(cè)的文章就介紹到這了,更多相關(guān)PyTorch hub神經(jīng)網(wǎng)絡(luò)氣溫預(yù)測(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python二維碼操作:對(duì)QRCode和MyQR入門(mén)詳解

    python二維碼操作:對(duì)QRCode和MyQR入門(mén)詳解

    今天小編就為大家分享一篇python二維碼操作:對(duì)QRCode和MyQR入門(mén)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • python 實(shí)現(xiàn)客戶端與服務(wù)端的通信

    python 實(shí)現(xiàn)客戶端與服務(wù)端的通信

    這篇文章主要介紹了python 實(shí)現(xiàn)客戶端與服務(wù)端的通信的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • Django REST Framework之頻率限制的使用

    Django REST Framework之頻率限制的使用

    這篇文章主要介紹了Django REST Framework之頻率限制的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • mac下給python3安裝requests庫(kù)和scrapy庫(kù)的實(shí)例

    mac下給python3安裝requests庫(kù)和scrapy庫(kù)的實(shí)例

    今天小編就為大家分享一篇mac下給python3安裝requests庫(kù)和scrapy庫(kù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Pytorch 實(shí)現(xiàn)權(quán)重初始化

    Pytorch 實(shí)現(xiàn)權(quán)重初始化

    今天小編就為大家分享一篇Pytorch 實(shí)現(xiàn)權(quán)重初始化,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • 基于Python制作三款起床鬧鐘的示例代碼

    基于Python制作三款起床鬧鐘的示例代碼

    每天上班最痛苦的事情就是早起早起早起!這是大部分上班族的痛苦,但是不上班又是不可能的啦,因?yàn)槎际菫榱烁沐X(qián)。本文用Python制作了三款有趣的鬧鐘,感興趣的可以學(xué)習(xí)一下
    2022-05-05
  • YOLOv5在圖片上顯示統(tǒng)計(jì)出單一檢測(cè)目標(biāo)的個(gè)數(shù)實(shí)例代碼

    YOLOv5在圖片上顯示統(tǒng)計(jì)出單一檢測(cè)目標(biāo)的個(gè)數(shù)實(shí)例代碼

    各位讀者首先要認(rèn)識(shí)到的問(wèn)題是,在YOLOv5中完成錨框計(jì)數(shù)是一件非常簡(jiǎn)單的工作,下面這篇文章主要給大家介紹了關(guān)于YOLOv5如何在圖片上顯示統(tǒng)計(jì)出單一檢測(cè)目標(biāo)的個(gè)數(shù)的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • python 字段拆分詳解

    python 字段拆分詳解

    今天小編就為大家分享一篇python 字段拆分詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • Python 獲得命令行參數(shù)的方法(推薦)

    Python 獲得命令行參數(shù)的方法(推薦)

    本篇將介紹python中sys, getopt模塊處理命令行參數(shù)的方法,本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2018-01-01
  • 淺談Python在pycharm中的調(diào)試(debug)

    淺談Python在pycharm中的調(diào)試(debug)

    今天小編就為大家分享一篇淺談Python在pycharm中的調(diào)試(debug),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11

最新評(píng)論