使用PyTorch/TensorFlow搭建簡單全連接神經(jīng)網(wǎng)絡(luò)
網(wǎng)絡(luò)結(jié)構(gòu)概述
我們的全連接神經(jīng)網(wǎng)絡(luò)(Fully Connected Neural Network,F(xiàn)CNN)由以下部分構(gòu)成:
- 輸入層:接收數(shù)據(jù)特征向量(例如,長度為 10 的向量)。
- 隱藏層:通過一個全連接層將輸入進(jìn)行非線性映射,通常會使用激活函數(shù)(如 ReLU)來增加模型的表達(dá)能力。
- 輸出層:根據(jù)具體任務(wù)輸出預(yù)測結(jié)果,例如回歸任務(wù)輸出單個連續(xù)值。
這種結(jié)構(gòu)雖然簡單,但能幫助我們理解前向傳播、反向傳播及梯度下降等基本概念。
1. 使用 PyTorch 構(gòu)建網(wǎng)絡(luò)
PyTorch 提供了靈活的動態(tài)計算圖和簡潔的 API,非常適合快速原型開發(fā)。下面是一個完整示例:
import torch import torch.nn as nn import torch.optim as optim # 定義一個簡單的全連接神經(jīng)網(wǎng)絡(luò) class SimpleFCNN(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(SimpleFCNN, self).__init__() self.fc1 = nn.Linear(input_size, hidden_size) # 輸入層到隱藏層 self.relu = nn.ReLU() # 激活函數(shù) self.fc2 = nn.Linear(hidden_size, output_size) # 隱藏層到輸出層 def forward(self, x): out = self.fc1(x) out = self.relu(out) out = self.fc2(out) return out # 超參數(shù)設(shè)置 input_size = 10 # 輸入特征數(shù)量 hidden_size = 5 # 隱藏層節(jié)點數(shù) output_size = 1 # 輸出節(jié)點數(shù) learning_rate = 0.001 num_epochs = 100 # 實例化模型、定義損失函數(shù)和優(yōu)化器 model = SimpleFCNN(input_size, hidden_size, output_size) criterion = nn.MSELoss() # 均方誤差損失,用于回歸問題 optimizer = optim.Adam(model.parameters(), lr=learning_rate) # 構(gòu)造一些模擬數(shù)據(jù) x_train = torch.randn(100, input_size) y_train = torch.randn(100, output_size) # 訓(xùn)練模型 for epoch in range(num_epochs): outputs = model(x_train) loss = criterion(outputs, y_train) optimizer.zero_grad() # 梯度清零 loss.backward() # 反向傳播 optimizer.step() # 更新參數(shù) if (epoch + 1) % 10 == 0: print(f'Epoch [{epoch + 1}/{num_epochs}], Loss: {loss.item():.4f}')
解析:
- 模型定義:我們創(chuàng)建了一個繼承自
nn.Module
的類SimpleFCNN
,其中nn.Linear
用于構(gòu)建全連接層,nn.ReLU
作為激活函數(shù)。 - 訓(xùn)練循環(huán):每個 epoch 中,我們計算模型輸出與真實標(biāo)簽之間的均方誤差(MSE),然后利用
optimizer
對參數(shù)進(jìn)行梯度下降更新。
2. 使用 TensorFlow 構(gòu)建網(wǎng)絡(luò)
TensorFlow 通過 Keras 接口提供了直觀且高層次的 API 來搭建模型,適合快速搭建原型。下面是使用 TensorFlow 的示例代碼:
import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense # 超參數(shù)設(shè)置 input_size = 10 # 輸入特征數(shù)量 hidden_size = 5 # 隱藏層節(jié)點數(shù) output_size = 1 # 輸出節(jié)點數(shù) learning_rate = 0.001 num_epochs = 100 batch_size = 10 # 構(gòu)建順序模型 model = Sequential([ Dense(hidden_size, activation='relu', input_shape=(input_size,)), # 輸入層到隱藏層 Dense(output_size) # 輸出層 ]) # 編譯模型:指定優(yōu)化器和損失函數(shù)(這里依然使用均方誤差) model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=learning_rate), loss='mse') # 構(gòu)造一些模擬數(shù)據(jù) import numpy as np x_train = np.random.randn(100, input_size) y_train = np.random.randn(100, output_size) # 訓(xùn)練模型 history = model.fit(x_train, y_train, epochs=num_epochs, batch_size=batch_size, verbose=2)
解析:
- 模型構(gòu)建:我們使用
Sequential
模型,添加了一個帶 ReLU 激活函數(shù)的全連接層,以及一個輸出層。 - 模型編譯:在編譯時選擇了 Adam 優(yōu)化器和 MSE 損失函數(shù)。
- 模型訓(xùn)練:調(diào)用
model.fit
函數(shù)開始訓(xùn)練,Keras 會自動管理訓(xùn)練過程及日志輸出。
總結(jié)
本博客展示了如何使用 PyTorch 和 TensorFlow 兩種不同的深度學(xué)習(xí)框架構(gòu)建一個簡單的全連接神經(jīng)網(wǎng)絡(luò)。兩種實現(xiàn)雖然在 API 設(shè)計和風(fēng)格上有所不同,但核心思想是一致的:
- 網(wǎng)絡(luò)結(jié)構(gòu):輸入層、隱藏層和輸出層的搭建。
- 前向傳播:數(shù)據(jù)通過層層傳遞得到輸出。
- 損失函數(shù)與優(yōu)化:計算輸出與真實標(biāo)簽之間的誤差,并利用優(yōu)化器更新網(wǎng)絡(luò)參數(shù)。
通過這兩個示例,讀者可以選擇自己更熟悉的框架進(jìn)行實驗,同時也能對比兩種框架的差異。希望這篇博客能幫助大家更好地理解全連接神經(jīng)網(wǎng)絡(luò)的搭建與訓(xùn)練過程,邁出深度學(xué)習(xí)實踐的第一步!
到此這篇關(guān)于使用PyTorch/TensorFlow搭建簡單全連接神經(jīng)網(wǎng)絡(luò)的文章就介紹到這了,更多相關(guān)PyTorch TensorFlow搭建神經(jīng)網(wǎng)絡(luò)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python文件操作seek()偏移量,讀取指正到指定位置操作
這篇文章主要介紹了python文件操作seek()偏移量,讀取指正到指定位置操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07對python產(chǎn)生隨機的二維數(shù)組實例詳解
今天小編就為大家分享一篇對python產(chǎn)生隨機的二維數(shù)組實例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12pytorch之torch_scatter.scatter_max()用法
這篇文章主要介紹了pytorch之torch_scatter.scatter_max()用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09