深入了解前饋網絡、CNN、RNN 和 Hugging Face 的 Transformer 技術!

???一、說明

????????本篇在此對自然語言模型做一個簡短總結,從CNN\RNN\變形金剛,和抱臉的變形金剛庫說起。

二、基本前饋神經網絡:

????????讓我們分解一個基本的前饋神經網絡,也稱為多層感知器(MLP)。此代碼示例將:

  1. 定義神經網絡的架構。
  2. 初始化權重和偏差。
  3. 使用 sigmoid 激活函數實現前向傳播。
  4. 使用均方誤差損失函數實現訓練的反向傳播。
  5. 演示在簡單數據集上的訓練。
import numpy as npclass NeuralNetwork:def __init__(self, input_size, hidden_size, output_size):# Initialize weights and biases with random valuesself.weights1 = np.random.randn(input_size, hidden_size)self.weights2 = np.random.randn(hidden_size, output_size)self.bias1 = np.random.randn(1, hidden_size)self.bias2 = np.random.randn(1, output_size)def sigmoid(self, x):return 1 / (1 + np.exp(-x))def sigmoid_derivative(self, x):return x * (1 - x)def forward(self, X):self.hidden = self.sigmoid(np.dot(X, self.weights1) + self.bias1)output = self.sigmoid(np.dot(self.hidden, self.weights2) + self.bias2)return outputdef train(self, X, y, epochs, learning_rate):for epoch in range(epochs):# Forward propagationoutput = self.forward(X)# Compute errorerror = y - output# Backward propagationd_output = error * self.sigmoid_derivative(output)error_hidden = d_output.dot(self.weights2.T)d_hidden = error_hidden * self.sigmoid_derivative(self.hidden)# Update weights and biasesself.weights2 += self.hidden.T.dot(d_output) * learning_rateself.bias2 += np.sum(d_output, axis=0, keepdims=True) * learning_rateself.weights1 += X.T.dot(d_hidden) * learning_rateself.bias1 += np.sum(d_hidden, axis=0, keepdims=True) * learning_rate# Print the error at every 1000 epochsif epoch % 1000 == 0:print(f"Epoch {epoch}, Error: {np.mean(np.abs(error))}")# Sample data for XOR problem
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([[0], [1], [1], [0]])# Create neural network instance and train
nn = NeuralNetwork(input_size=2, hidden_size=4, output_size=1)
nn.train(X, y, epochs=10000, learning_rate=0.1)# Test the neural network
print("Predictions after training:")
for data in X:print(f"{data} => {nn.forward(data)}")

在這個例子中,我們使用神經網絡來解決異或問題,這是一個單層感知器無法解決的經典問題。

這種前饋神經網絡只有一個隱藏層,這使得它能夠學習非線性關系。調整隱藏層大小、學習率和周期數等參數會影響神經網絡的性能和準確性。

三、卷積神經網絡 (CNN)

CNN 專為圖像處理而設計,包括稱為卷積層的層,這些層對輸入數據應用卷積運算,強調局部特征。

3.1 CNN的基本結構:

????????以下是使用 TensorFlow 和 Keras 庫的基本卷積神經網絡 (CNN) 的更全面實現。此示例將:

  1. 加載 MNIST 數據集,這是一個用于手寫數字識別的常用數據集。
  2. 對數據進行預處理。
  3. 定義基本的 CNN 架構。
  4. 使用優化器、損失函數和度量編譯模型。
  5. 在 MNIST 數據集上訓練 CNN。
  6. 評估經過訓練的 CNN 在測試數據上的準確性。

3.2 相關代碼實現

# Import necessary libraries
import numpy as np
import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical# Load and preprocess the dataset
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
train_images = train_images.reshape((60000, 28, 28, 1)).astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1)).astype('float32') / 255train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)# Define the CNN architecture
model = tf.keras.Sequential([tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),tf.keras.layers.MaxPooling2D(2, 2),tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),tf.keras.layers.MaxPooling2D(2, 2),tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),tf.keras.layers.Flatten(),tf.keras.layers.Dense(64, activation='relu'),tf.keras.layers.Dense(10, activation='softmax')
])# Compile the model
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])# Train the model
model.fit(train_images, train_labels, epochs=5, batch_size=64)# Evaluate the model's accuracy on the test data
test_loss, test_acc = model.evaluate(test_images, test_labels)
print(f'Test accuracy: {test_acc}')

在此示例中,基本 CNN 有三個卷積層,后跟最大池化層。在卷積層之后,我們將輸出展平,并將其傳遞到兩個密集(全連接)層。

最后的密集層有 10 個神經元,每個神經元代表一個從 0 到 9 的數字,具有 softmax 激活函數來產生類概率。

這是MNIST數據集的一個簡單而有效的CNN。您可以通過添加更多層、使用正則化 dropout 等技術或采用高級優化技術來進一步改進網絡。

四、循環神經網絡 (RNN)

RNN 旨在識別數據序列中的模式,例如文本或時間序列。它們保留對先前輸入的記憶。

4.1 基本RNN結構:

????????讓我們使用 TensorFlow 和 Keras 創建一個基本的遞歸神經網絡 (RNN)。此示例將演示:

  1. 加載序列數據集(我們將使用 IMDB 情感分析數據集)。
  2. 預處理數據。
  3. 定義一個簡單的 RNN 架構。
  4. 使用優化器、損失函數和度量編譯模型。
  5. 在數據集上訓練 RNN。
  6. 評估經過訓練的 RNN 在測試數據上的準確性。

4.2 相關代碼實現

# Import necessary libraries
import tensorflow as tf
from tensorflow.keras.datasets import imdb
from tensorflow.keras.preprocessing.sequence import pad_sequences# Constants
VOCAB_SIZE = 10000
MAX_LEN = 500
EMBEDDING_DIM = 32# Load and preprocess the dataset
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=VOCAB_SIZE)# Pad sequences to the same length
train_data = pad_sequences(train_data, maxlen=MAX_LEN)
test_data = pad_sequences(test_data, maxlen=MAX_LEN)# Define the RNN architecture
model = tf.keras.Sequential([tf.keras.layers.Embedding(VOCAB_SIZE, EMBEDDING_DIM, input_length=MAX_LEN),tf.keras.layers.SimpleRNN(32, return_sequences=True),tf.keras.layers.SimpleRNN(32),tf.keras.layers.Dense(1, activation='sigmoid')
])# Compile the model
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])# Train the model
model.fit(train_data, train_labels, epochs=10, batch_size=128, validation_split=0.2)# Evaluate the model's accuracy on the test data
test_loss, test_acc = model.evaluate(test_data, test_labels)
print(f'Test accuracy: {test_acc}')

在此示例中,我們首先使用嵌入層將整數序列轉換為固定大小的密集向量。然后,兩個 RNN 層處理序列。

具有 sigmoid 激活函數的最后一個密集層輸出一個概率,指示評論的情緒(0 表示負面,1 表示正面)。

值得注意的是,在實際應用中,您可能需要考慮使用更高級的遞歸層,如 LSTM 或 GRU,因為它們可以比基本 RNN 更好地捕獲遠程依賴關系。

此外,可以根據特定的應用程序和數據集對超參數(如 、 和)進行微調,以獲得最佳結果。VOCAB_SIZEMAX_LENEMBEDDING_DIM

五、變形金剛

Transformer 最初是為自然語言處理任務而設計的,具有自注意力機制,允許它們權衡輸入不同部分的重要性。

5.1 Transformer 片段(使用 Hugging Face 的 Transformers 庫):

Hugging Face 的 Transformers 庫使使用 BERT、GPT-2 等 Transformer 架構變得非常容易。讓我們創建一個基本示例:

  1. 加載用于文本分類的預訓練 BERT 模型。
  2. 標記化一些輸入句子。
  3. 通過 BERT 模型傳遞標記化輸入。
  4. 輸出預測的類概率。

5.2 相關代碼實現

????????在本演示中,讓我們使用 BERT 模型進行序列分類:

# Installation (if you haven't done it yet)
#!pip install transformers# Import required libraries
from transformers import BertTokenizer, BertForSequenceClassification
import torch# Load pretrained model and tokenizer
model_name = 'bert-base-uncased'
model = BertForSequenceClassification.from_pretrained(model_name, num_labels=2)  # For binary classification
tokenizer = BertTokenizer.from_pretrained(model_name)# Tokenize input data
input_texts = ["I love using transformers!", "This library is difficult to understand."]
inputs = tokenizer(input_texts, return_tensors='pt', padding=True, truncation=True, max_length=512)# Forward pass: get model predictions
with torch.no_grad():outputs = model(**inputs)logits = outputs.logitsprobabilities = torch.nn.functional.softmax(logits, dim=-1)# Display predicted class probabilities
print(probabilities)

此腳本初始化用于二進制序列分類的 BERT 模型,對輸入句子進行標記,然后根據模型的對數進行預測。

最終輸出 , 包含輸入句子的預測類概率。probabilities

請注意,此模型已針對二元分類(使用 )進行了初始化,因此它最適合情緒分析等任務。num_labels=2

對于多類分類或其他任務,您可以調整并可能選擇不同的預訓練模型,或者在特定數據集上微調模型。num_labels

六、結論

????????深度學習的世界是廣闊的,正如所展示的那樣,其算法可能會根據其應用領域變得復雜。然而,多虧了 TensorFlow 和 Hugging Face 等高級庫,使用這些算法變得越來越容易。

旅程

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163479.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163479.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163479.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Web應用系統的小安全漏洞及相應的攻擊方式

1 寫作目的 本文講述一個簡單的利用WebAPI來進行一次基本沒有破壞力的“黑客”行為。 主要目的如下: 了解什么叫安全漏洞知道什么是api了解一些獲取api的工具通過對API的認識了解白盒接口測試基本概念和技術 免責聲明: 本文主要是以學習交流為目的…

C++ ,VCPKG那些事

玩過C都知道,熟悉三方庫對開發工作的重要性,尋找同步更新、穩定、權威的庫源更是每一位開發者經常要做的功課,諸如赫赫有名的boost,google SDK、騰迅sdk、阿里庫,vcpkg等等,這里要說的就是VCPKG,以下是記錄…

盤點63個Python登錄第三方源碼Python愛好者不容錯過

盤點63個Python登錄第三方源碼Python愛好者不容錯過 學習知識費力氣,收集整理更不易。 知識付費甚歡喜,為咱碼農謀福利。 鏈接:https://pan.baidu.com/s/1l7oooH9YovHmWzQ_58FRdg?pwd8888 提取碼:8888 項目名稱 A headless…

11-23 SSM4

Ajax 同步請求 :全局刷新的方式 -> synchronous請求 客戶端發一個請求,服務器響應之后你客戶端才能繼續后續操作,請求二響應完之后才能發送后續的請求,依次類推 有點:服務器負載較小,但是由于服務器相應…

Vue3+Ts實現聊天機器人(chatBot-附代碼)

一:項目介紹 本次實驗主要涉及到的技術是 Vue3 Ts,當然其中也有部分是 Vue2 格式的代碼以及 json 和 CSS 布局等。本來是想仿照 文心一言 來開發的一個聊天機器人案例。結果由于時間不足,可能只是做出來了一個半成品。不過核心功能是有的。由…

淺談安科瑞智能照明系統在馬來西亞國家石油公司項目的應用

摘要:隨著社會經濟的發展及網絡技術、通信技術的提高,人們對照明設計提出了新的要求,它不僅要控制照明光源的發光時間、 亮度,而且與其它系統來配合不同的應用場合做出相應的燈光場景。本文介紹了馬亞西亞石油公司智能照明項目的應…

tp8 使用rabbitMQ(2)工作隊列

代碼的參數說明在 第一小節的代碼中,如果需要可移步到第一節中查看 工作隊列 工作隊列(又稱:任務隊列——Task Queues)是為了避免等待一些占用大量資源、時間的操作。當我們把任務(Task)當作消息發送到隊列…

推薦一款png圖片打包plist工具pngPackerGUI_V2.0

png圖片打包plist工具,手把手教你使用pngPackerGUI_V2.0 此軟件是在pngpacker_V1.1軟件基礎之后,開發的界面化操作軟件,方便不太懂命令行的小白快捷上手使用。1.下載并解壓縮軟件,得到如下目錄,雙擊打開 pngPackerGUI.…

《第一行代碼:Android》第三版-2.4.3循環語句 for循環

本節主要講for 循環,主要就是創建個區間,然后用for 來遍歷。 /*** You can edit, run, and share this code.* play.kotlinlang.org*/fun main() {println("Hello, world!!!")for(i in 1..10)//表示 0 到10 但是包括10 ,即數學上的…

使用paddleocr進行OCR文字識別

1 OCR介紹 OCR(Optical Character Recognition)即光學字符識別,是一種將不同類型的文檔(如掃描的紙質文件、PDF文件或圖像文件中的文本)轉換成可編輯和可搜索的數據的技術。OCR技術能夠識別和轉換印刷或手寫文字&…

Python接口自動化測試——如何搭建測試環境

前言 接口測試的方式有很多,比如可以用工具(jmeter,postman)之類,也可以自己寫代碼進行接口測試,工具的使用相對來說都比較簡單,重點是要搞清楚項目接口的協議是什么,然后有針對性的進行選擇&a…

NF是哪個國家品牌?韓國NF-耐福功放芯片介紹

NF是韓國一家專注于數字音頻芯片領域公司旗下的數字功放IC品牌,2008年開始進入中國市場,ISweek工采網作為其代理商;在國內簡稱:韓國NF,又被稱耐福、耐福NTP功放芯片;國內長虹、TCL、海信、小豹AI音箱、騰訊…

大數據-之LibrA數據庫系統告警處理(ALM-37001 MPPDBServer實例Redo日志缺失)

告警解釋 當DN主實例有未同步到DN備實例的xlog日志被刪除時,產生該告警。 告警屬性 告警ID 告警級別 可自動清除 37001 嚴重 是 告警參數 參數名稱 參數含義 ServiceName 產生告警的服務名稱 RoleName 產生告警的角色名稱 HostName 產生告警的主機名…

shell從服務列表中讀取參數并檢查服務

一、shell腳本 #!/usr/bin/env bash# 讀取文檔數據 while read -r line do# 提取服務名和命令service_name$(echo "$line" | awk {print $1})command$(echo "$line" | awk {$1""; print substr($0,2)})#echo "服務名: $service_name"…

SQL進階學習

1.[NISACTF 2022]join-us sql報錯注入和聯合注入 過濾: as IF rand() LEFT by updatesubstring handler union floor benchmark COLUMN UPDATE & sys.schema_auto_increment_columns && 11 database case AND right CAST FLOOR left updatexml DATABA…

Vue3入門組合式 API

Vue3 學習 開發環境 tong ~/Projects/EasyVue3 $ node -v v16.20.1 tong ~/Projects/EasyVue3 $ sw_vers ProductName: macOS ProductVersion: 14.1.1 BuildVersion: 23B81 tong ~/Projects/EasyVue3 $ npm --version 8.19.4 tong ~/Projects/Ea…

selenium 簡單案例 <批量下載文件> <網頁自動化點擊上報>

一、批量下載文件 網頁分析 點擊跳轉到下載頁面 from selenium import webdriver import timedef get_link_list():# 創建瀏覽器對象driver webdriver.Chrome(executable_pathrC:\Users\nlp_1\Desktop\chromedriver\chromedriver-win32\chromedriver.exe)url https://www…

微信報名怎么做_輕松便捷的數字化報名體驗

微信報名:輕松便捷的數字化報名體驗 在這個數字化時代,微信已經成為我們生活中不可或缺的一部分。它不僅僅是一個社交平臺,更是一個功能強大的綜合性工具。其中,微信報名功能更是給我們的生活帶來了極大的便利。本文將詳細介紹微…

Django之cookie和session

文章目錄 Cookie的介紹Cookie的由來什么是CookieCookie原理Cookie覆蓋瀏覽器查看Cookie 在Django中操作Cookie設置Cookie查詢瀏覽器攜帶的Cookie刪除Cookie Cookie校驗登錄sessionSession的由來Session設置查看、更新Session值刪除Session值Seesion的其他方法Session的其他配置…

企業微信機器人:自動化辦公的未來已來!

導語:隨著科技的迅速發展,人工智能已經逐漸滲透到我們的日常生活和工作中。而企業微信機器人的出現,更是開啟了自動化辦公的新紀元。本文將為您詳細解析企業微信機器人的功能、優勢以及如何為企業帶來實質性的價值。 一、企業微信機器人的功…