將獨熱碼應用到神經網絡中

引言

接上回,本文繼續說如何用TensorFlow將獨熱編碼應用到一個簡單的神經網絡中,以實現從一段隨機文本到另一段隨機文本的轉換。

步驟一:導入庫
import tensorflow as tf
import numpy as np
import random
import string
步驟二:生成隨機文本數據

用一個函數來生成隨機文本數據。

def generate_random_text(length):letters = string.ascii_lowercase + ' 'return ''.join(random.choice(letters) for i in range(length))random_text = generate_random_text(100)
print("Random Text:", random_text)
步驟三:獨熱編碼

接下來,我們將對生成的隨機文本進行獨熱編碼。為此,我們需要創建一個字符到整數的映射,并使用這個映射來構建獨熱編碼。


注:上一張我們說的是幾個分類(數字代表類別)轉為獨熱碼,那么如何將一串文本轉為獨熱碼呢?在這里我們的方法是將一串文本的每個字符都對應到一個數字(這個過程就我們叫做映射到數字,這個對應關系的表就成為詞匯表),之后從數字生成獨熱碼。把所有數字的獨熱碼放一起,就是這段文本的獨熱碼了。


chars = string.ascii_lowercase + ' '
char_to_int = {c: i for i, c in enumerate(chars)}
int_to_char = {i: c for c, i in char_to_int.items()}def one_hot_encode(text):encoded = [char_to_int[char] for char in text]return tf.one_hot(encoded, depth=len(chars))encoded_text = one_hot_encode(random_text)
步驟四:構建神經網絡模型

現在,讓我們定義一個簡單的密集神經網絡模型(后期講),它將接受獨熱編碼的文本并嘗試預測下一個字符的獨熱編碼。

model = tf.keras.Sequential([tf.keras.layers.Flatten(input_shape=(None, len(chars))),tf.keras.layers.Dense(128, activation='relu'),tf.keras.layers.Dense(len(chars), activation='softmax')
])
步驟五:訓練模型

因為作者個人感覺用隨機數據訓練沒什么意義,也擬合不出什么,所以省略了…

步驟六:模型預測與解碼

我們直接用沒訓練過的模型來預測輸入文本的輸出,并將其從獨熱編碼轉換回字符。

def decode_one_hot(output):return ''.join(int_to_char[np.argmax(out)] for out in output)# 假設我們已經訓練了模型
# predictions = model.predict(encoded_text)
# decoded_text = decode_one_hot(predictions)
# print("Decoded Text:", decoded_text)

一些話

雖然我們學了很多關于獨熱碼的知識,但是…對于我們的語言模型沒有什么卵用…我們用的是字符索引加嵌入層方法(后面細講)而不是獨熱碼,具體原因:

獨熱碼(One-Hot Encoding)

優勢:

  1. 簡單直觀:每個字符都由一個獨立的二進制位表示,這使得編碼非常明確和直接。
  2. 易于理解:模型的輸入維度與詞匯表大小直接相關,容易理解和解釋。
  3. 無參數共享:每個字符的表示獨立,不會受到其他字符的影響,這在某些情況下可能是有益的。

缺點:

  1. 維度災難:如果詞匯表很大,獨熱編碼會導致極其高維的特征空間,這會增加計算復雜性和存儲需求。
  2. 缺乏語義信息:獨熱編碼不包含任何關于字符之間關系的語義信息,即字符之間的相似性或關聯性完全被忽略。
  3. 不變性:對于字符的微小變化(如大小寫、拼寫錯誤等),獨熱編碼無法提供魯棒性。

字符索引 + 嵌入層(Character Index + Embedding Layer)

優勢:

  1. 維度降低:通過使用較低維度的密集向量來表示字符,嵌入層可以有效減少模型的輸入維度。
  2. 捕獲語義信息:嵌入層可以學習字符之間的語義關系,使得相似的字符在嵌入空間中擁有相似的表示。
  3. 參數共享:嵌入層中的參數是在所有字符之間共享的,這可以減少模型的總參數數量,提高泛化能力。
  4. 魯棒性:嵌入層可以對字符的小變化具有一定的魯棒性,例如拼寫錯誤或大小寫變化。

缺點:

  1. 需要大量數據:為了有效地學習嵌入,通常需要大量的訓練數據。
  2. 調參復雜:嵌入層的維度和其他超參數需要仔細調整,以找到最佳配置。
  3. 黑盒性質:嵌入層學到的表示可能不如獨熱編碼那樣直觀易懂。

有問題可以私信,看到會回復。

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

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

相關文章

【超音速 專利 CN117710683A】基于分類模型的輕量級工業圖像關鍵點檢測方法

申請號CN202311601629.7公開號(公開)CN117710683A申請日2023.11.27申請人(公開)超音速人工智能科技股份有限公司發明人(公開)張俊峰(總); 楊培文(總); 沈俊羽; 張小村 技術領域 本發明涉及圖像關鍵點檢測…

數據庫MySQL下載安裝

MySQL下載安裝地址如下: MySQL :: Download MySQL Community Server 1、下載界面 2、點擊下載 3、解壓記住目錄 4、配置my.ini文件 未完..

C語言課程回顧:九、C語言之預處理命令

9 預處理命令 9 預處理命令9.1 概述9.2 宏定義9.2.1 無參宏定義9.2.2 帶參宏定義 9.3 文件包含9.4 條件編譯9.5 本章小結9.6 擴展 10種軟件濾波方法的示例程序1、限副濾波2、中位值濾波法3、算術平均濾波法4、遞推平均濾波法(又稱滑動平均濾波法)5、中位…

Vue.js學習筆記(五)抽獎組件封裝——轉盤抽獎

基于VUE2轉盤組件的開發 文章目錄 基于VUE2轉盤組件的開發前言一、開發步驟1.組件布局2.布局樣式3.數據準備 二、最后效果總結 前言 因為之前的轉盤功能是圖片做的,每次活動更新都要重做UI和前端,為了解決這一問題進行動態配置轉盤組件開發,…

【jvm】字符串常量池問題

目錄 一、基本概念1.1 說明1.2 特點 二、存放位置2.1 JDK1.6及以前2.2 JDK1.72.3 JDK1.8及以后 三、工作原理3.1 創建字符串常量3.2 使用new關鍵字創建字符串 四、intern()方法4.1 作用 五、優點六、字節碼分析6.1 示例16.1.1 代碼示例6.1.2 字節碼6.1.3 解析 6.2 示例26.2.1 代…

STM32智能倉儲管理系統教程

目錄 引言環境準備晶智能倉儲管理系統基礎代碼實現:實現智能倉儲管理系統 4.1 數據采集模塊 4.2 數據處理與決策模塊 4.3 通信與網絡系統實現 4.4 用戶界面與數據可視化應用場景:倉儲管理與優化問題解決方案與優化收尾與總結 1. 引言 智能倉儲管理系統…

7 月12日學習打卡--棧和隊列的相互轉換

hello大家好呀,本博客目的在于記錄暑假學習打卡,后續會整理成一個專欄,主要打算在暑假學習完數據結構,因此會發一些相關的數據結構實現的博客和一些刷的題,個人學習使用,也希望大家多多支持,有不…

什么是STM32?嵌入式和STM32簡單介紹

1、嵌入式和STM32 1.1.什么是嵌入式 除了桌面PC之外,所有的控制類設備都是嵌入式 嵌入式系統的定義:“用于控制、監視或者輔助操作機器和設備的裝置”。 嵌入式系統是一個控制程序存儲在ROM中的嵌入式處理器控制板,是一種專用的計算機系統。…

初階數據結構速成

本篇文章算是對初階數據結構的總結,內容較多,請耐心觀看 基礎概念部分 順序表 線性表( linear list )是n個具有相同特性的數據元素的有限序列。 線性表是?種在實際中?泛使 ?的數據結構,常?的線性表:…

C語言 錯題本

C語言 錯題本 文章目錄 C語言 錯題本77月11號整數求逆--掌握 7月12號求符合給定條件的整數集水仙花數打印九九口訣表--掌握統計素數并求和--掌握 7月13號湊硬幣前n項和(一加一減)最大公約數 7月14號正序整數分解 7月17號簡單計算器 217月26號求符合給定條件的整數集水仙花數 旨…

【安全設備】上網行為管理

一、什么是上網行為管理 上網行為管理是對企業內部員工使用互聯網行為的監視和管理,旨在規范網絡使用者的上網行為,提高網絡安全性,保護企業信息安全,同時提高員工的工作效率。上網行為管理通過對員工的上網行為進行監控、記錄和…

機器學習——關于極大似然估計法的一些個人思考(通俗易懂極簡版)

最近在回顧機器學習的一些相關理論知識,回顧到極大似然法時,對于極大似然法中的一些公式有些迷糊了,所以本文主要想記錄并分享一下個人關于極大似然估計法的一些思考,如果有誤,請見諒,歡迎一起前來探討。當…

單元測試實施最佳方案(背景、實施、覆蓋率統計)

1. 什么是單元測試? 對于很多開發人員來說,單元測試一定不陌生 單元測試是白盒測試的一種形式,它的目標是測試軟件的最小單元——函數、方法或類。單元測試的主要目的是驗證代碼的正確性,以確保每個單元按照預期執行。單元測試通…

合肥高校大學智能制造實驗室數字孿生可視化系統平臺建設項目驗收

合肥高校大學智能制造實驗室近日迎來了一項重要時刻,數字孿生可視化系統平臺建設項目順利通過了驗收。這一項目的成功實施,不僅標志著合肥高校在智能制造領域取得新的突破,為我國智能制造技術的發展注入新活力。 合肥高校智能制造實驗室作為…

T972 切換至pdm 聲音輸入的方法

1.在hardware/amlogic/audio/audio_hal/audio_hw.c下,直接切換 在 static unsigned int select_port_by_device(struct aml_audio_device *adev) 中先強制切換為pdm 2.在device mk 配置文件中 #add fof fix the mic bug by jason 20230621 PRODUCT_PROPERTY_OVE…

MySQL 數據庫基礎概念

一、什么是數據庫? 數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫。 每個數據庫都有一個或多個不同的 API 用于創建,訪問,管理,搜索和復制所保存的數據。 我們也可以將數據存儲在文件中&…

淺析Kafka Streams中KTable.aggregate()方法的使用

KTable.aggregate() 方法是 Apache Kafka Streams API 中用于對流數據進行狀態化聚合的核心方法之一。這個方法允許你根據一個鍵值&#xff08;通常是<K,V>類型&#xff09;的流數據&#xff0c;應用一個初始值和一個聚合函數&#xff0c;來累積和更新一個狀態&#xff0…

MSPM0G3507(三十六)——超聲波PID控制小車固定距離

效果圖&#xff1a; 波形圖軟件是VOFA&#xff0c;B站有教程 &#xff0c;雖然有缺點但是非常簡單。 視頻效果&#xff1a; PID控制距離 之前發過只有超聲波測距的代碼&#xff0c;MSPM0G3507&#xff08;三十二&#xff09;——超聲波模塊移植代碼-CSDN博客 SYSCFG配置&#…

Ubuntu下如何設置程序include搜索路徑及鏈接路徑

添加庫的include及lib路徑 linux下系統默認路徑為 /usr/include, /usr/local/include, gcc在編譯程序時會按照當前目錄路徑->系統默認路徑->系統環境變量的路徑方式去查找&#xff0c;所以當我們想調用的庫未安裝在系統默認路徑時&#xff0c;我們可以通過手動添加環境變…

數據壓縮的藝術:Kylin Cube設計中的自動壓縮特性

數據壓縮的藝術&#xff1a;Kylin Cube設計中的自動壓縮特性 在大數據的浩瀚宇宙中&#xff0c;Apache Kylin以其卓越的數據立方體&#xff08;Cube&#xff09;技術&#xff0c;為企業提供快速的多維數據分析能力。隨著數據量的不斷增長&#xff0c;存儲效率成為了一個關鍵問…