samout llm解碼 幻覺更低更穩定

這段代碼定義了一個簡單的對話生成系統,包括模型加載、詞匯表加載、以及基于給定提示生成文本的功能。下面是對代碼的解析:

  1. load_model_and_voc(device="cpu"):

    • 該函數用于加載預訓練的模型和詞匯表(vocabulary)。它首先從文件 total_voc.pkl 中加載詞匯表,并創建一個名為 SamOut 的神經網絡實例。
    • 模型參數的數量被打印出來以供參考。
    • 然后嘗試加載指定路徑下的預訓練權重到模型中,并將模型移動到指定的設備(CPU 或 GPU)上。
    • 最后設置模型為評估模式(.eval()),并返回模型和詞匯表。
  2. gen_token(voc, model, prompt, max_len, rp=1.2, temp=0.13, top_k=16, device="cpu"):

    • 這個函數負責根據提供的提示(prompt)生成新的文本序列。
    • 它接受多個參數,包括詞匯表、模型、初始提示、最大生成長度等。
    • 函數內部實現了重復抑制、溫度調整和top-k采樣等技術來控制生成文本的質量。
    • 使用softmax函數對模型輸出進行處理,并通過多類別抽樣選擇下一個token。
    • 如果生成了特殊的開始標記 <|sos|>,則停止生成過程。
    • 生成的每個token會立即打印在屏幕上,形成即時響應的效果。
  3. t_infre():

    • 此函數是交互式推理循環,允許用戶輸入文本,然后調用 gen_token 函數來生成回應。
    • 它是一個無限循環,持續等待用戶的輸入直到程序被手動終止。
  4. if __name__ == '__main__':

    • 這部分代碼確保當腳本作為主程序運行時,會執行某些特定的操作或測試。
    • 注釋掉的代碼可能是之前用于數據預處理、訓練或其他實驗的部分。
    • 最終調用了 t_infre() 函數來啟動交互式推理。

需要注意的是,這里使用的 SamOut 類并沒有在給出的代碼片段中定義,因此你可能需要確保這個類已經被正確實現并在其他地方導入。此外,為了使代碼能夠正常工作,你需要確保所有依賴庫(如 PyTorch 和 pandas)已經安裝,并且所有提及的數據文件和模型權重文件都存在于正確的路徑下。

def load_model_and_voc(device="cpu"):voc = pd.read_pickle("total_voc.pkl")net = SamOut(len(voc["voc"]), 1024 + 512, 64, 16)# net = SamOut(len(voc["voc"]), 512, 32, 8)print(sum([i.shape[0] * i.shape[1] for i in net.parameters() if len(i.shape) > 1]) + sum([i.shape[0] for i in net.parameters() if len(i.shape) == 1]))# net.load_state_dict(torch.load("pretrain_768.pth", map_location=device))# net.load_state_dict(torch.load("pretrain_sft_single.pth", map_location=device))net.load_state_dict(torch.load("pretrain_sft_single_1024.pth", map_location=device))# net.load_state_dict(torch.load("pretrain.pth", map_location=device))net.to(device)net.eval()return net, vocdef gen_token(voc, model, prompt, max_len, rp=1.2, temp=0.13, top_k=16, device="cpu"):print("agent:", end="", flush=True)for _ in range(max_len):prompt_list = []for i in prompt:if i not in voc["voc"]:prompt_list += [voc["voc"].index(ii) for ii in voc["voc0"].get(i)]else:prompt_list.append(voc["voc"].index(i))out, _ = model(torch.Tensor([prompt_list]).to(device).long())out = out[:, -1:]# 重復抑制for token_id in enumerate(prompt_list):out[:, :, token_id] /= rpscore = torch.softmax(out, -1)[0, 0]score, score_index = torch.sort(score,descending=True)score=score.detach().numpy()score_sum = np.cumsum(score)score_index = score_index.detach().numpy()score1=score[score_sum<0.8]if score1.size==0:score=score[:1]else:score=score1score_index=score_index[:score.size]out = score / tempv= out[:min(top_k, score.size)]idx_next = torch.multinomial(torch.Tensor(v), num_samples=1, generator=None)if voc["voc"][score_index[idx_next.item()]] == "<|sos|>":breakprompt += [voc["voc"][score_index[idx_next.item()]]]print(prompt[-1], end="", flush=True)def t_infre():model, voc = load_model_and_voc()while True:text = input("user:")gen_token(voc, model, ["<|user|>"] + list("{}".format(text)) + ["<|agent|>"], 64)print()if __name__ == '__main__':# print(pd.read_pickle("loss916"))# gen_one_voc()# gen_voc()# for i in range(17,18):#     gen_pre_data_align(i, 16)# train()# gen_sft_single_data_align()# train_single()# sft 推理  一本正經的胡說八道已練成t_infre()

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

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

相關文章

K近鄰原理和距離

K近鄰 基本思想歐氏距離算法流程代碼基于近鄰用戶的協同過濾基于近鄰物品的協同過濾杰卡德相似度 基本思想 我們根據涂色樣本點和未涂色樣本點 X 的距離給涂色樣本點編號1-6&#xff0c;即&#xff1a;1號樣本點距離X最近&#xff0c;其余次之。 那么問題來了&#xff1a;樣本…

Transformer 中 Self-Attention 的二次方復雜度(Quadratic Complexity )問題及改進方法:中英雙語

Transformer 中 Self-Attention 的二次方復雜度問題及改進方法 隨著大型語言模型&#xff08;LLM&#xff09;輸入序列長度的增加&#xff0c;Transformer 結構中的核心模塊——自注意力機制&#xff08;Self-Attention&#xff09; 的計算復雜度和內存消耗都呈現二次方增長。…

模型 A/B測試(科學驗證)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思維模型目錄。控制變量法。 1 A/B測試的應用 1.1 Electronic Arts&#xff08;EA&#xff09;《模擬城市》5游戲網站A/B測試 定義目標&#xff1a; Electronic Arts&#xff08;EA&#xff09;在發布新版《模擬城…

Java修飾符詳解:從基礎到高級用法

在Java編程語言中&#xff0c;有許多修飾符可以使用&#xff0c;它們大致可以分為兩大類&#xff1a;訪問控制修飾符、其他類型的修飾符。 這些修飾符主要用于指定類、方法或變量的特性&#xff0c;并且通常位于聲明語句的開頭部分。下面通過一些示例來進一步說明這一點&#…

onnx文件轉pytorch pt模型文件

onnx文件轉pytorch pt模型文件 1.onnx2torch轉換及測試2.存在問題參考文獻 從pytorch格式轉onnx格式&#xff0c;官方有成熟的API&#xff1b;那么假如只有onnx格式的模型文件&#xff0c;該怎樣轉回pytorch格式&#xff1f; https://github.com/ENOT-AutoDL/onnx2torch提供了…

Git merge 和 rebase的區別(附圖)

在 Git 中&#xff0c;merge 和 rebase 是兩種用于整合分支變化的方法。雖然它們都可以將一個分支的更改引入到另一個分支中&#xff0c;但它們的工作方式和結果是不同的。以下是對這兩者的詳細解釋&#xff1a; Git Merge 功能&#xff1a;合并分支&#xff0c;將兩個分支的…

【Web】0基礎學Web—js運算符、選擇結構、循環結構

0基礎學Web—js運算符、選擇結構、循環結構 js運算符選擇結構循環結構 js運算符 算術運算符: - * / %取余 賦值運算符: - * / % 單目運算符: i i --i i– 單獨使用是自增1 或 自減1 如果被使用&#xff0c;先看到啥先操作啥 比較運算符&#xff1a; > 、 >、 < 、…

系列3:基于Centos-8.6 Kubernetes使用nfs掛載pod的應用日志文件

每日禪語 古代&#xff0c;一位官員被革職遣返&#xff0c;心中苦悶無處排解&#xff0c;便來到一位禪師的法堂。禪師靜靜地聽完了此人的傾訴&#xff0c;將他帶入自己的禪房之中。禪師指著桌上的一瓶水&#xff0c;微笑著對官員說&#xff1a;?“你看這瓶水&#xff0c;它已經…

tkdiff安裝:Linux下文本對比工具

tkdiff在Linux下源碼安裝 1.下載解壓2.編譯安裝3.配置環境變量4.驗證及運行 本文&#xff0c;在Linux下使用源碼安裝tkdiff工具&#xff0c;以tkdiff-4.2版本為例&#xff0c;其他版本根據需要替換即可。 1.下載解壓 去 http://sourceforge.net/projects/tkdiff/files/tkdiff…

耐蝕鎳基合金的焊接技術與質量控制

耐蝕鎳基合金是一類在腐蝕環境中具有優異性能的合金材料&#xff0c;廣泛應用于化工、海洋工程、石油天然氣等領域。其焊接技術與質量控制對于確保合金的使用性能和安全性至關重要。以下是對耐蝕鎳基合金焊接技術與質量控制的詳細探討。 一、焊接技術 焊條選擇 耐蝕鎳基合金的焊…

Django REST framework(DRF)在處理不同請求方法時的完整流程

文章目錄 一、POST 請求創建對象的流程二、GET 請求獲取對象列表的流程三、GET 請求獲取單個對象的流程四、PUT/PATCH 請求更新對象的流程五、自定義方法的流程自定義 GET 方法自定義 POST 方法 一、POST 請求創建對象的流程 請求到達視圖層 方法調用&#xff1a; dispatch說明…

機器視覺與OpenCV--01篇

計算機眼中的圖像 像素 像素是圖像的基本單位&#xff0c;每個像素存儲著圖像的顏色、亮度或者其他特征&#xff0c;一張圖片就是由若干個像素組成的。 RGB 在計算機中&#xff0c;RGB三種顏色被稱為RGB三通道&#xff0c;且每個通道的取值都是0到255之間。 計算機中圖像的…

qemu源碼解析【03】qom實例

目錄 qemu源碼解析【03】qom實例arm_sbcon_i2c實例 qemu源碼解析【03】qom實例 arm_sbcon_i2c實例 以hw/i2c/arm_sbcon_i2c.c代碼為例&#xff0c;這個實例很簡單&#xff0c;只用100行左右的代碼&#xff0c;調用qemu系統接口實現了一個i2c硬件模擬先看include/hw/i2c/arm_s…

小程序自定義tab-bar,踩坑記錄

從官方下載代碼 https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html 1、把custom-tab-bar 文件放置 pages同級 修改下 custom-tab-bar 下的 JS文件 Component({data: {selected: 0,color: "#7A7E83",selectedColor: "#3…

操作系統(14)請求分頁

前言 操作系統中的請求分頁&#xff0c;也稱為頁式虛擬存儲管理&#xff0c;是建立在基本分頁基礎上&#xff0c;為了支持虛擬存儲器功能而增加了請求調頁功能和頁面置換功能的一種內存管理技術。 一、基本概念 分頁&#xff1a;將進程的邏輯地址空間分成若干個大小相等的頁&am…

git企業開發的相關理論(一)

目錄 一.初識git 二.git的安裝 三.初始化/創建本地倉庫 四.配置用戶設置/配置本地倉庫 五.認識工作區、暫存區、版本庫 六.添加文件__場景一 七.查看 .git 文件/添加到本地倉庫后.git中發生的變化 1.執行git add后的變化 index文件&#xff08;暫存區&#xff09; log…

wxpython圖形用戶界面編程

wxpython圖形用戶界面編程 一、wxpython的基礎 1.1 wxpython的基礎 作為圖形用戶界面開發工具包 wxPython&#xff0c;主要提供了如下 GUI 內容&#xff1a; 窗口。控件。事件處理。布局管理。 1.2 wxpython的類層次機構 1.3 wxpython的安裝 Windows 和 macOS 平臺安裝&a…

水仙花數(流程圖,NS流程圖)

題目&#xff1a;打印出所有的100-999之間的"水仙花數"&#xff0c;并畫出流程圖和NS流程圖。所謂"水仙花數"是指一個三位數&#xff0c;其各位數字立方和等于該數本身。例如&#xff1a;153是一個"水仙花數"&#xff0c;因為1531的三次方&#…

不配置python環境,直接用PyCharm就可以?

有的伙伴可能遇到不安裝python環境只安裝pycharm也可以進行運行代碼。 所以自認為是不需要解釋器就可以運行&#xff1f; 這個是不現實的&#xff0c;有很多伙伴可能是安裝了Pycharm&#xff0c;但Pycharm看你電腦上沒有解釋器&#xff0c;所以在安裝的時候給你默認安裝在C盤…

網絡安全滲透測試概論

滲透測試&#xff0c;也稱為滲透攻擊測試是一種通過模擬惡意攻擊者的手段來評估計算機系統、網絡或應用程序安全性的方法。 目的 旨在主動發現系統中可能存在的安全漏洞、脆弱點以及潛在風險&#xff0c;以便在被真正的惡意攻擊者利用之前&#xff0c;及時進行修復和加固&…