torch筆記七 搭建神經網路實現資料的擬合

2021-10-21 10:16:40 字數 2196 閱讀 8785

學自莫凡python

搭建乙個簡單的神經網路,用一條曲線來擬合生成的資料點。下面是訓練過程中,擬合出的曲線和資料點的分布圖,訓練的最終誤差loss=0.0066。

# 1.匯入必要的模組

import torch

import torch.nn.functional as f # f中包含很多函式比如激勵函式

import matplotlib.pyplot as plt #用於繪圖

# 2.生成要擬合的資料點

# linspace(-1,1,100),從-1~1之間取100個數

# 因為torch只能處理二維資料,使用unsqueeze函式將一維資料轉換為二維資料

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

# torch.squeeze(a,n)就是在a中指定位置n加上乙個維數為1的維度

# 將y設定為x的平方,並加入噪點的影響使資料點圍繞y=x^2周圍

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

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

# plt.show()

# 3.搭建神經網路

class net(torch.nn.module):

# 設定神經網路屬性,定義各層的資訊

# n_feature代表輸入資料的個數,n_hidden是隱藏層神經元的個數,n_output輸出的個數

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

# 4.定義網路

net = net(1,8,1) # 定義乙個含有8個神經元的隱藏層,一次只輸入1個資料,輸出1個資料的網路

print(net)

# 設定乙個實時列印的過程,顯示在螢幕

plt.ion()

plt.show()

# 5.設定優化器

# 選擇sgd優化器對神經網路的全部引數進行優化,學習率設定為0.5

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

# 選擇均方差為計算誤差

loss_func = torch.nn.mseloss()

# 6.訓練

for t in range(100):

prediction = net(x) #產生**值

loss = loss_func(prediction, y) # 計算**值與真實值之間的誤差

optimizer.zero_grad() # 將網路中所有引數的梯度降為0

loss.backward() # 誤差反向傳播,並對每個節點計算梯度

optimizer.step() # 以學習率位0.5對梯度進行優化

# 每學習5步列印一次

if t % 5 == 0:

plt.cla() # # clear axis即清除當前圖形中的當前活動軸。其他軸不受影響。

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=%.4f' % loss.data,

fontdict=) # 列印當前的loss值

plt.pause(0.1)

# 實時列印結束

plt.ioff()

plt.show()

搭建神經網路

1.import 2.train,test 3.model tf.keras.model.sequential 在sequential中描述網路結構,相當於走一遍前向傳播 4.model.compile 在compile中配置訓練方法,選擇哪個優化器,選擇什麼損失函式,選擇什麼評價指標 5.mode...

神經網路體系搭建(一) 神經網路

本篇是神經網路體系搭建的第一篇,解決體系搭建的前四個問題,詳見神經網路體系搭建 序 神經網路的定義就不再贅述,直接從最簡單的神經網路說起。將一系列輸入資料,通過訓練好的網路模型處理,得到輸出結果,這是神經網路決策的步驟。那麼我們的重點就是通過訓練得到網路模型。從上圖可以看出,模型的關鍵其實是尋找合適...

簡單搭建神經網路

簡單的神經網路 準備,前傳,後傳,迭代 下面是乙個簡單的神經網路搭建的 coding utf 8 import tensorflow as tf import numpy as np batch size 8 seed 23455 基於seed產生隨機數 rng np.random.randomst...