pytorch 神經網路擬合曲線

2021-09-01 21:01:48 字數 2293 閱讀 6427

**已經調通,跑出來的效果如下:

''' pytorch是乙個擁有強力gpu加速的張量和動態構建網路的庫,其主要構建是張量,所以可以把pytorch當做numpy

來用,pytorch的很多操作好比numpy都是類似的,但是其能夠在gpu上執行,所以有著比numpy快很多倍的速度。

訓練完了,發現隱層越大,擬合的速度越是快,擬合的效果越是好

'''def train():

print('------ 構建資料集 ------')

# torch.linspace是為了生成連續間斷的資料,第乙個引數表示起點,第二個引數表示終點,第三個引數表示將這個區間分成平均幾份,即生成幾個資料

x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1)

#torch.rand返回的是[0,1]之間的均勻分布 這裡是使用乙個計算式子來構造出乙個關聯結果,當然後期要學的也就是這個式子

y = x.pow(2) + 0.2 * torch.rand(x.size())

# variable是將tensor封裝了下,用於自動求導使用

x, y = variable(x), variable(y)

#繪圖展示

plt.scatter(x.data.numpy(), y.data.numpy())

#plt.show()

print('------ 搭建網路 ------')

#使用固定的方式繼承並重寫 init和forword兩個類

class net(torch.nn.module):

def __init__(self,n_feature,n_hidden,n_output):

#初始網路的內部結構

super(net,self).__init__()

self.hidden=torch.nn.linear(n_feature,n_hidden)

self.predict=torch.nn.linear(n_hidden,n_output)

def forward(self, x):

#一次正向行走過程

x=f.relu(self.hidden(x))

x=self.predict(x)

return x

net=net(n_feature=1,n_hidden=1000,n_output=1)

print('網路結構為:',net)

print('------ 啟動訓練 ------')

loss_func=f.mse_loss

optimizer=torch.optim.sgd(net.parameters(),lr=0.001)

#使用資料 進行正向訓練,並對variable變數進行反向梯度傳播 啟動100次訓練

for t in range(10000):

#使用全量資料 進行正向行走

prediction=net(x)

loss=loss_func(prediction,y)

optimizer.zero_grad() #清除上一梯度

loss.backward() #反向傳播計算梯度

optimizer.step() #應用梯度

#間隔一段,對訓練過程進行視覺化展示

if t%5==0:

plt.cla()

plt.scatter(x.data.numpy(),y.data.numpy()) #繪製真是曲線

plt.plot(x.data.numpy(),prediction.data.numpy(),'r-',lw=5)

plt.text(0.5,0,'loss='+str(loss.data[0]),fontdict=)

plt.pause(0.1)

plt.ioff()

plt.show()

print('------ **和視覺化 ------')

if __name__=='__main__':

train()

pytorch實現神經網路

import torch import torch.nn as nn import torch.nn.functional as f import inspect import torch.optim as optim 自動求導機制 對乙個標量用backward 會反向計算在計算圖中用到的葉節點的梯...

PyTorch分類神經網路

這次我們也是用最簡單的途徑來看看神經網路是怎麼進行事物的分類.我們建立一些假資料來模擬真實的情況.比如兩個二次分布的資料,不過他們的均值都不一樣.import torch import matplotlib.pyplot as plt 假資料 n data torch.ones 100,2 資料的基...

卷積神經網路 pytorch

vocab args.vocab size 已知詞的數量 dim args.embed dim 每個詞向量長度 cla args.class num 類別數 ci 1 輸入的channel數 knum args.kernel num 每種卷積核的數量 ks args.kernel sizes 卷積核...