<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文參加新星計劃人工智慧(Pytorch)賽道:https://bbs.csdn.net/topics/613989052
首先,我們進入網址。會出現如下的介面(這其中就是別人訓練好的模型,我們通過一行程式碼就可以實現呼叫)。
然後,我們隨便點開一個模型,會出現如下介面。
其中,第一個按鈕是對應的 GITHUB 程式碼,第二個是使用谷歌設定好的實驗環境,第三個進行模型演示。
首先,我們進行基本的匯入。
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:UsersAdministrator/.cachetorchhubpytorch_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()
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
print('資料維度:', features.shape) #資料維度: (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)]
在基本資料處理完成後,我們就開始圖畫的繪製,在最開始,需要指定為預設的風格。
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)
對原始資料中的資訊進行編碼,這裡主要是指週數資訊。
# 獨熱編碼 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)
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])
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])
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神經網路氣溫預測內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45