91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用PyTorch的hub模塊搭建神經網絡進行氣溫預測

發布時間:2023-03-20 16:29:32 來源:億速云 閱讀:188 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“怎么使用PyTorch的hub模塊搭建神經網絡進行氣溫預測”,內容詳細,步驟清晰,細節處理妥當,希望這篇“怎么使用PyTorch的hub模塊搭建神經網絡進行氣溫預測”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

一、強大的 hub 模塊

  • hub 模塊是調用別人訓練好的網絡架構以及訓練好的權重參數,使得自己的一行代碼就可以解決問題,方便大家進行調用。


1. hub 模塊的使用

首先,我們進入網址。會出現如下的界面(這其中就是別人訓練好的模型,我們通過一行代碼就可以實現調用)。

怎么使用PyTorch的hub模塊搭建神經網絡進行氣溫預測

然后,我們隨便點開一個模型,會出現如下界面。

怎么使用PyTorch的hub模塊搭建神經網絡進行氣溫預測

其中,第一個按鈕是對應的 GITHUB 代碼,第二個是使用谷歌配置好的實驗環境,第三個進行模型演示。

2. hub 模塊的代碼演示

首先,我們進行基本的導入。

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

我們可以使用 hub.list() 查看對應 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 的網站上下載一個實例。

# 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)

我們執行樣本,這里需要注意的是 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

我們需要將輸入和模型移動到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)

我們可以創建一個調色板,為每個類選擇一種顏色。

# 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 個類別的語義分割預測。

# 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()

怎么使用PyTorch的hub模塊搭建神經網絡進行氣溫預測

二、搭建神經網絡進行氣溫預測

1. 數據信息處理 在最開始,我們需要導入必備的庫。

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

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

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
  • 在我們的數據表中,包含如下數據信息:

  • (1) year 表示年數時間信息。

  • (2) month 表示月數時間信息。

  • (3) day 表示天數時間信息。

  • (4) week 表示周數時間信息。

  • (5) temp_2 表示前天的最高溫度值。

  • (6) temp_1 表示昨天的最高溫度值。

  • (7) average 表示在歷史中,每年這一天的平均最高溫度值。

  • (8) actual 表示這就是我們的標簽值了,當天的真實最高溫度。

  • (9) friend 表示這一列可能是湊熱鬧的,你的朋友猜測的可能值,咱們不管它就好了。

  • 在獲悉每一個數據的信息之后,我們需要知道一共有多少個數據。


print('數據維度:', features.shape)
#數據維度: (348, 9)
  • (348, 9) 表示一共有 348 天,每一天有 9 個數據特征。

  • 對于這么多的數據,直接進行行和列的操作可能會不太容易,因此,我們可以導入時間數據模塊,將其轉換為標準的時間信息。

# 處理時間數據
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 中的部分數據。

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. 數據圖畫繪制

在基本數據處理完成后,我們就開始圖畫的繪制,在最開始,需要指定為默認的風格。

plt.style.use('fivethirtyeight')

設置布局信息。

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

設置標簽值信息。

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

繪制昨天也就是 temp_1 的數據圖畫。

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

繪制前天也就是 temp_2 的數據圖畫。

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

繪制朋友也就是 friend 的數據圖畫。

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

在上述信息設置完成后,開始圖畫的繪制。

plt.tight_layout(pad=2)

怎么使用PyTorch的hub模塊搭建神經網絡進行氣溫預測

對原始數據中的信息進行編碼,這里主要是指周數信息。

# 獨熱編碼
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

在周數信息編碼完成后,我們將準確值進行標簽操作,在特征數據中去掉標簽數據,并將此時數據特征中的標簽信息保存一下,并將其轉換成合適的格式。

# 標簽
labels = np.array(features['actual'])

# 在特征中去掉標簽
features= features.drop('actual', axis = 1)

# 名字單獨保存一下,以備后患
feature_list = list(features.columns)

# 轉換成合適的格式
features = np.array(features)

我們可以查看此時特征數據的具體數量。

features.shape
#(348, 14)
  • (348, 14) 表示我們的特征數據當中一共有 348 個,每一個有 14 個特征。

  • 我們可以查看第一個的具體數據。

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. 構建網絡模型

x = torch.tensor(input_features, dtype = float)

y = torch.tensor(labels, dtype = float)

# 權重參數初始化
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):
    # 計算隱層
    hidden = x.mm(weights) + biases
    # 加入激活函數
    hidden = torch.relu(hidden)
    # 預測結果
    predictions = hidden.mm(weights2) + biases2
    # 通計算損失
    loss = torch.mean((predictions - y) ** 2) 
    losses.append(loss.data.numpy())
    
    # 打印損失值
    if i % 100 == 0:
        print('loss:', loss)
    #返向傳播計算
    loss.backward()
    
    #更新參數
    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>)

我們查看預測數據的具體數量,應該是一共有 348 個,每個只有一個值,也就是 (348,1)。

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

4. 更簡單的構建網絡模型

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)
# 訓練網絡
losses = []
for i in range(1000):
    batch_loss = []
    # MINI-Batch方法來進行訓練
    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

我們可以得到如下的預測訓練結果,將其用圖畫的形式展現出來。

x = torch.tensor(input_features, dtype = torch.float)
predict = my_nn(x).data.numpy()
# 轉換日期格式
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]

# 創建一個表格來存日期和其對應的標簽數值
true_data = pd.DataFrame(data = {'date': dates, 'actual': labels})

# 同理,再創建一個來存日期和其對應的模型預測值
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)}) 
# 真實值
plt.plot(true_data['date'], true_data['actual'], 'b-', label = 'actual')

# 預測值
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');

怎么使用PyTorch的hub模塊搭建神經網絡進行氣溫預測

讀到這里,這篇“怎么使用PyTorch的hub模塊搭建神經網絡進行氣溫預測”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐安县| 金华市| 新宾| 隆回县| 平顶山市| 六盘水市| 桃源县| 湖南省| 牙克石市| 广宗县| 乌苏市| 株洲市| 阿克苏市| 安顺市| 延吉市| 焉耆| 建始县| 永宁县| 东至县| 祁阳县| 和平县| 西和县| 宁夏| 邹平县| 宝应县| 惠来县| 凯里市| 凤翔县| 城市| 紫阳县| 甘泉县| 普格县| 德阳市| 渝北区| 新蔡县| 柘荣县| 泰兴市| 澜沧| 金溪县| 怀安县| 安顺市|