pytorch 搭建簡單神經網路(回歸)

2021-10-04 04:43:25 字數 4481 閱讀 6299

# 準備資料

x_data = torch.unsqueeze(torch.linspace(-1

,1,100

), dim=-1

)y_data = x_data.

pow(2)

# 通過matplotlib視覺化生成的資料

# plt.scatter(x_data.numpy(), y_data.numpy())

# plt.show()

class

neuro_net

(torch.nn.module)

:"""搭建神經網路"""

def__init__

(self, n_feature, n_hidden_layer, n_output)

:super

(neuro_net, self)

.__init__(

)# 繼承__init__功能

# 隱藏層

self.hidden_layer = torch.nn.linear(n_feature, n_hidden_layer)

# 輸出層

self.output_layer = torch.nn.linear(n_hidden_layer, n_output)

# 前向傳播

defforward

(self, x_data)

:# 隱藏層出來後使用激勵函式啟用,最後返回**值

hidden_layer_x = torch.relu(self.hidden_layer(x_data)

) pridect_y = self.output_layer(hidden_layer_x)

return pridect_y

num_feature =

1num_hidden_layer =

10num_output =

1epoch =

500# 例項化神經網路

net = neuro_net(num_feature, num_hidden_layer, num_output)

# print(net) # 可檢視網路結構

# optimizer 優化 學習率在這裡設定

optimizer = torch.optim.sgd(net.parameters(

), lr=

0.2)

# loss funaction

loss_funaction = torch.nn.mseloss(

)# train

for step in

range

(epoch)

: pridect_y = net(x_data)

# 餵入訓練資料 得到**的y值

loss = loss_funaction(pridect_y, y_data)

# 計算損失

optimizer.zero_grad(

) loss.backward(

)# 誤差反向傳播,計算梯度

optimizer.step(

)# 將引數更新值施加到 net 的 parameters 上

import matplotlib.pyplot as plt

plt.ion(

)# 畫圖

for step in

range

(epoch):.

..loss.backward(

) optimizer.step(

)if step %5==

0:print

("已訓練{}步 | loss:{}。"

.format

(step, loss)

) plt.cla(

) plt.scatter(x_data.numpy(

), y_data.numpy())

plt.plot(x_data.numpy(

), pridect_y.data.numpy(

), color=

"green"

, marker=

"o", linewidth=

6, label=

"predict_line"

) plt.text(

0.5,0,

'loss=%.4f'

% loss.data.numpy(

), fontdict=

) plt.pause(

0.1)

plt.ioff(

)plt.show(

)

import torch

import matplotlib.pyplot as plt

class

neuro_net

(torch.nn.module)

:"""搭建神經網路"""

def__init__

(self, n_feature, n_hidden_layer, n_output)

:super

(neuro_net, self)

.__init__(

)# 繼承__init__功能

self.hidden_layer = torch.nn.linear(n_feature, n_hidden_layer)

self.output_layer = torch.nn.linear(n_hidden_layer, n_output)

defforward

(self, x_data)

: hidden_layer_x = torch.relu(self.hidden_layer(x_data)

) pridect_y = self.output_layer(hidden_layer_x)

return pridect_y

# 準備資料

x_data = torch.unsqueeze(torch.linspace(-1

,1,100

), dim=-1

)y_data = x_data.

pow(2)

# 通過matplotlib視覺化生成的資料

# plt.scatter(x_data.numpy(), y_data.numpy())

# plt.show()

num_feature =

1num_hidden_layer =

10num_output =

1epoch =

500# 例項化神經網路

net = neuro_net(num_feature, num_hidden_layer, num_output)

# print(net)

# optimizer 優化

optimizer = torch.optim.sgd(net.parameters(

), lr=

0.2)

# loss funaction

loss_funaction = torch.nn.mseloss(

)plt.ion(

)# train

for step in

range

(epoch)

: pridect_y = net(x_data)

# 餵入訓練資料 得到**的y值

loss = loss_funaction(pridect_y, y_data)

# 計算損失

optimizer.zero_grad(

) loss.backward(

)# 誤差反向傳播,計算梯度

optimizer.step(

)# 將引數更新值施加到 net 的 parameters 上

if step %5==

0:print

("已訓練{}步 | loss:{}。"

.format

(step, loss)

) plt.cla(

) plt.scatter(x_data.numpy(

), y_data.numpy())

plt.plot(x_data.numpy(

), pridect_y.data.numpy(

), color=

"green"

, marker=

"o", linewidth=

6, label=

"predict_line"

) plt.text(

0.5,0,

'loss=%.4f'

% loss.data.numpy(

), fontdict=

) plt.pause(

0.1)

plt.ioff(

)plt.show(

)

pytorch搭建簡單的神經網路

主要是熟悉pytorch這個開源框架。這個網路主要是用來擬合y x 2這個函式用的 所以說很簡單啦 自己生成的訓練資料,全部用來做訓練集了。網路結構 乙個輸入的向量,一層隱藏層,一層輸出層。隱藏層用的relu啟用函式,輸出層什麼都沒加,直接線性輸出。from torch.autograd impor...

pytorch搭建簡單神經網路入門

參考自 以下 摘抄自 請先閱讀上述參考文章。改了幾個引數試試 import torch import matplotlib.pyplot as plt 搭建神經網路 class neuro net torch.nn.module 主要構成為 init 和forward函式 神經網路 def init...

pytorch搭建神經網路入門

autograd自動求導 pytorch 是乙個基於python的科學計算包,用於代替numpy,可以利用gpu的效能進行計算 作為乙個深度學習平台。張量 tensor 類似於numpy中的ndarray,但還可以在gpu上使用,實現加速計算的效果。建立張量的幾種方式 建立乙個沒有初始化的矩陣張量 ...