主頁 >  其他 > 構建基于深度學習神經網路協同過濾模型(NCF)的視頻推薦系統(Python3.10/Tensorflow2.11)

構建基于深度學習神經網路協同過濾模型(NCF)的視頻推薦系統(Python3.10/Tensorflow2.11)

2023-03-30 13:13:48 其他

毋庸諱言,和傳統架構(BS開發/CS開發)相比,人工智能技術確實有一定的基礎門檻,它注定不是大眾化,普適化的東西,但也不能否認,人工智能技術也具備像傳統架構一樣“套路化”的流程,也就是說,我們大可不必自己手動構建基于神經網路的機器學習系統,直接使用深度學習框架反而更加簡單,深度學習可以幫助我們自動地從原始資料中提取特征,不需要手動選擇和提取特征,

之前我們手動構建了一個小型的神經網路,解決了機器學習的分類問題,本次我們利用深度學習框架Tensorflow2.11構建一套基于神經網路協同過濾模型(NCF)的視頻推薦系統,解決預測問題,完成一個真正可以落地的專案,

推薦系統發展歷程

“小伙子,要光碟嗎?新的到貨了,內容相當精彩!”

大約20年前,在北京中關村的街頭,一位抱著嬰兒的中年大媽興奮地拽著筆者的胳臂,手舞足蹈地推薦著她的“產品”,大概這就是最原始的推薦系統雛形了,

事實上,時至今日,依然有類似產品使用這樣的套路,不管三七二十一,弄個首頁大Banner,直接懟用戶臉上,且不論用戶感不感興趣,有沒有用戶點擊和轉化,這種強買強賣式的推薦,著實不怎么令人愉快,

所以推薦系統解決的痛點應該是用戶的興趣需求,給用戶推薦喜歡的內容,才是推薦系統的核心,

于是乎,啟發式推薦演算法(Memory-based algorithms)就應運而生了,

啟發式推薦演算法易于實作,并且推薦結果的可解釋性強,啟發式推薦演算法又可以分為兩類:

基于用戶的協同過濾(User-based collaborative filtering):主要考慮的是用戶和用戶之間的相似度,只要找出相似用戶喜歡的物品,并預測目標用戶對對應物品的評分,就可以找到評分最高的若干個物品推薦給用戶,舉個例子,李老師和閆老師擁有相似的電影喜好,當新電影上映后,李老師對其表示喜歡,那么就能將這部電影推薦給閆老師,

基于物品的協同過濾(Item-based collaborative filtering):主要考慮的是物品和物品之間的相似度,只有找到了目標用戶對某些物品的評分,那么就可以對相似度高的類似物品進行預測,將評分最高的若干個相似物品推薦給用戶,舉個例子,如果用戶A、B、C給書籍X,Y的評分都是5分,當用戶D想要買Y書籍的時候,系統會為他推薦X書籍,因為基于用戶A、B、C的評分,系統會認為喜歡Y書籍的人在很大程度上會喜歡X書籍,

啟發式協同過濾演算法是一種結合了基于用戶的協同過濾和基于專案的協同過濾的演算法,它通過啟發式規則來預測用戶對物品的評分,

然而,啟發式協同過濾演算法也存在一些缺陷:

難以處理冷啟動問題:當一個用戶或一個物品沒有足夠的評分資料時,啟發式協同過濾演算法無法對其進行有效的預測,因為它需要依賴于已有的評分資料,

對資料稀疏性敏感:如果資料集中存在大量的缺失值,啟發式協同過濾演算法的預測準確率會受到影響,因為它需要依賴于完整的評分資料來進行預測,

演算法的可解釋性較差:啟發式協同過濾演算法的預測結果是通過啟發式規則得出的,這些規則可能很難被解釋和理解,

受限于啟發式規則的質量:啟發式協同過濾演算法的預測準確率受到啟發式規則的質量影響,如果啟發式規則得不到有效的優化和更新,演算法的性能可能會受到影響,

說白了,這種基于啟發式的協同過濾演算法,很容易陷入一個小范圍的困境,就是如果某個用戶特別喜歡體育的視頻,那么這種系統就會玩命地推薦體育視頻,實際上這個人很有可能也喜歡藝術類的視頻,但是囿于冷啟動問題,無法進行推薦,

為了解決上面的問題,基于神經網路的協同過濾演算法誕生了,神經網路的協同過濾演算法可以通過將用戶和物品的特征向量作為輸入,來預測用戶對新物品的評分,從而解決冷啟動問題,

對資料稀疏性的魯棒性:神經網路的協同過濾演算法可以自動學習用戶和物品的特征向量,并能夠通過這些向量來預測評分,因此對于資料稀疏的情況也能進行有效的預測,

更好的預測準確率:神經網路的協同過濾演算法可以通過多層非線性變換來學習用戶和物品之間的復雜關系,從而能夠提高預測準確率,

可解釋性和靈活性:神經網路的協同過濾演算法可以通過調整網路結構和引數來優化預測準確率,并且可以通過可視化方法來解釋預測結果,

所以基于神經網路協同過濾模型是目前推薦系統的主流形態,

基于稀疏矩陣的視頻完播資料

首先構造我們的資料矩陣test.csv檔案:

User,Video 1,Video 2,Video 3,Video 4,Video 5,Video 6  
User1,10,3,,,,  
User2,,10,,10,5,1  
User3,,,9,,,  
User4,6,1,,8,,9  
User5,1,,1,,10,4  
User6,1,4,1,,10,1  
User7,,2,1,2,,8  
User8,,,,1,,  
User9,1,,10,,3,1

這里橫軸是視頻資料,縱軸是用戶,對應的資料是用戶對于視頻的完播程度,10代表看完了,1則代表只看了百分之十,留空的代表沒有看,

撰寫ncf.py腳本,將資料讀入記憶體并輸出:

import pandas as pd  
# set pandas to show all columns without truncation and line breaks  
pd.set_option('display.max_columns', 1000)  
pd.set_option('display.width', 1000)  
  
# data = https://www.cnblogs.com/v3ucn/archive/2023/03/30/np.loadtxt('data/test-data.csv', delimiter=',', dtype=int, skiprows=1,)  
data = https://www.cnblogs.com/v3ucn/archive/2023/03/30/pd.read_csv('data/test-data.csv')  
print(data)

程式回傳:

User  Video 1  Video 2  Video 3  Video 4  Video 5  Video 6  
0  User1     10.0      3.0      NaN      NaN      NaN      NaN  
1  User2      NaN     10.0      NaN     10.0      5.0      1.0  
2  User3      NaN      NaN      9.0      NaN      NaN      NaN  
3  User4      6.0      1.0      NaN      8.0      NaN      9.0  
4  User5      1.0      NaN      1.0      NaN     10.0      4.0  
5  User6      1.0      4.0      1.0      NaN     10.0      1.0  
6  User7      NaN      2.0      1.0      2.0      NaN      8.0  
7  User8      NaN      NaN      NaN      1.0      NaN      NaN  
8  User9      1.0      NaN     10.0      NaN      3.0      1.0

一目了然,

有資料的列代表用戶看過,1-10代表看了之后的完播程度,如果沒看過就是NAN,現在我們的目的就是“猜”出來這些沒看過的視頻的完播資料是多少?從而根據完播資料完成視頻推薦系統,

矩陣拆解演算法

有一種推薦演算法是基于矩陣拆解,通過假設的因素去“猜”稀疏矩陣的空缺資料,猜出來之后,再通過反向傳播的逆運算來反推稀疏矩陣已存在的資料是否正確,從而判斷“猜”出來的資料是否正確:

通俗地講,跟算命差不多,但是基于數學原理,如果通過反推證明針對一個人的算命策略都是對的,那么就把這套流程應用到其他人身上,

但是這套邏輯過于線性,也就是因素過于單一,比如我喜歡黑色的汽車,那么就會給我推所有黑色的東西,其實可能黑色的因素僅局限于汽車,是多重因素疊加導致的,所以矩陣拆解并不是一個非常好的解決方案,

基于神經網路

使用神經網路計算,必須將資料進行向量化操作:

# reset the column.index to be numeric  
user_index = data[data.columns[0]]  
book_index = data.columns  
data = https://www.cnblogs.com/v3ucn/archive/2023/03/30/data.reset_index(drop=True)  
data[data.columns[0]] = data.index.astype('int')  
# print(data)  
# print(data)  
scaler = 10  
  
# data = https://www.cnblogs.com/v3ucn/archive/2023/03/30/pd.DataFrame(data.to_numpy(), index=range(0,len(user_index)), columns=range(0,len(book_index)))  
df_long = pd.melt(data, id_vars=[data.columns[0]],   
                  ignore_index=True,   
                  var_name='video_id',   
                  value_name='rate').dropna()  
df_long.columns = ['user_id', 'video_id', 'rating']  
df_long['rating'] = df_long['rating'] / scaler  
# replace the user_id to user by match user_index  
df_long['user_id'] = df_long['user_id'].apply(lambda x: user_index[x])  
# data = https://www.cnblogs.com/v3ucn/archive/2023/03/30/df_long.to_numpy()  
  
print(df_long)

程式回傳:

user_id video_id  rating  
0    User1  Video 1     1.0  
3    User4  Video 1     0.6  
4    User5  Video 1     0.1  
5    User6  Video 1     0.1  
8    User9  Video 1     0.1  
9    User1  Video 2     0.3  
10   User2  Video 2     1.0  
12   User4  Video 2     0.1  
14   User6  Video 2     0.4  
15   User7  Video 2     0.2  
20   User3  Video 3     0.9  
22   User5  Video 3     0.1  
23   User6  Video 3     0.1  
24   User7  Video 3     0.1  
26   User9  Video 3     1.0  
28   User2  Video 4     1.0  
30   User4  Video 4     0.8  
33   User7  Video 4     0.2  
34   User8  Video 4     0.1  
37   User2  Video 5     0.5  
40   User5  Video 5     1.0  
41   User6  Video 5     1.0  
44   User9  Video 5     0.3  
46   User2  Video 6     0.1  
48   User4  Video 6     0.9  
49   User5  Video 6     0.4  
50   User6  Video 6     0.1  
51   User7  Video 6     0.8  
53   User9  Video 6     0.1

這里scaler=10作為資料范圍的閾值,讓計算機將完播資料散列成0-1之間的浮點數,便于神經網路進行計算,

隨后安裝Tensorflow框架:

pip3 install tensorflow

如果是Mac用戶,請安裝mac版本:

pip3 install tensorflow-macos

接著針對資料進行打標簽操作:

import numpy as np  
import pandas as pd  
import tensorflow as tf  
from sklearn.model_selection import train_test_split  
from sklearn.preprocessing import LabelEncoder  
  
# dataset = pd.read_csv(url, compression='zip', usecols=['userId', 'movieId', 'rating'])  
dataset = df_long  
# Encode the user and video IDs  
user_encoder = LabelEncoder()  
video_encoder = LabelEncoder()  
dataset['user_id'] = user_encoder.fit_transform(dataset['user_id'])  
dataset['video_id'] = video_encoder.fit_transform(dataset['video_id'])  
  
# Split the dataset into train and test sets  
# train, test = train_test_split(dataset, test_size=0.2, random_state=42)  
train = dataset  
  
# Model hyperparameters  
num_users = len(dataset['user_id'].unique())  
num_countries = len(dataset['video_id'].unique())

隨后定義64個維度針對向量進行處理:



embedding_dim = 64  
  
# Create the NCF model  
inputs_user = tf.keras.layers.Input(shape=(1,))  
inputs_video = tf.keras.layers.Input(shape=(1,))  
embedding_user = tf.keras.layers.Embedding(num_users, embedding_dim)(inputs_user)  
embedding_video = tf.keras.layers.Embedding(num_countries, embedding_dim)(inputs_video)  
  
# Merge the embeddings using concatenation, you can also try other merging methods like dot product or multiplication  
merged = tf.keras.layers.Concatenate()([embedding_user, embedding_video])  
merged = tf.keras.layers.Flatten()(merged)  
  
# Add fully connected layers  
dense = tf.keras.layers.Dense(64, activation='relu')(merged)  
dense = tf.keras.layers.Dense(32, activation='relu')(dense)  
output = tf.keras.layers.Dense(1, activation='sigmoid')(dense)  
  
# Compile the model  
model = tf.keras.Model(inputs=[inputs_user, inputs_video], outputs=output)  
model.compile(optimizer='adam', loss='mse', metrics=['mae'])


這里定義了一個64維度的 embedding 類用來對向量進行處理,相當于就是把屬于資料當中的所有特征都設定成一個可以用一個64維向量標識的東西,然后通過降維處理之后使得機器能以一個低維的資料流形來“理解”高維的原始資料的方式來“理解”資料的“含義”,

從而實作機器學習的目的,而為了檢驗機器學習的成果(即機器是否有真正理解特征的含義),則使用mask(遮罩)的方式,將原始資料當中的一部分無關核心的內容“遮掉”,然后再嘗試進行輸入輸出操作,如果輸入輸出操作的結果與沒有遮罩的結果進行比較后足夠相近,或者完全相同,則判定機器有成功學習理解到向量的含義,

這里需要注意的是,因為embedding 這個詞其實是有一定程度的誤用的關系,所以不要嘗試用原來的語意去理解這個詞,通俗地講,可以把它理解為“特征(feature)”,即從原始資料中提取出來的一系列的特征屬性,至于具體是什么特征,不重要,

這里有64個維度,那就可以認為是從輸入的原始資料當中提取64個“特征”,然后用這個特征模型去套用所有的輸入的原始資料,然后再將這些資料通過降維轉換,最終把每一個輸入的向量轉換成一個1維的特殊字串,然后讓機器實作“理解復雜的輸入”的目的,而那個所謂的訓練程序,其實也就是不斷地用遮罩mask去遮掉非核心的資料,然后對比輸出結果,來看機器是否成功實作了學習的目的,

說白了,和矩陣拆解差不多,只不過矩陣拆解是線性單維度,而神經網路是非線性多維度,

最后進行訓練和輸出:

model.fit(  
    [train['user_id'].values, train['video_id'].values],  
    train['rating'].values,  
    batch_size=64,  
    epochs=100,  
    verbose=0,  
    # validation_split=0.1,  
)  
  
result_df = {}  
for user_i in range(1, 10):  
  user = f'User{user_i}'  
  result_df[user] = {}  
  for video_i in range(1, 7):      
    video = f'Video {video_i}'  
    pred_user_id = user_encoder.transform([user])  
    pred_video_id = video_encoder.transform([video])  
    result = model.predict(x=[pred_user_id, pred_video_id], verbose=0)  
    result_df[user][video] = result[0][0]  
result_df = pd.DataFrame(result_df).T  
result_df *= scaler  
  
print(result_df)

程式回傳:

Video 1   Video 2   Video 3   Video 4   Video 5   Video 6  
User1  9.143433  3.122697  5.831852  8.930688  9.223139  9.148163  
User2  2.379406  9.317654  9.280337  9.586231  5.115635  0.710877  
User3  6.046935  8.950342  9.335093  9.546472  8.487216  5.069511  
User4  6.202362  1.341177  2.609368  7.755390  9.160558  8.974072  
User5  1.134012  1.772043  0.634183  3.741076  9.297663  3.924277  
User6  0.488006  4.060344  1.116192  4.625140  9.264144  1.199519  
User7  2.820735  0.898690  0.560579  2.215827  8.604731  7.889819  
User8  0.244587  1.062029  0.360087  1.069786  7.698551  1.286932  
User9  1.337930  8.537857  9.329366  9.123328  3.074733  0.774436

我們可以看到,機器通過神經網路的“學習”,直接“猜出來”所有用戶未播放視頻的完播程度,那么,我們只需要給這些用戶推薦他未看的,但是機器“猜”他完播高的視頻即可,

總結

我們可以看到,整個流程簡單的令人發指,深度學習框架Tensorflow幫我們做了大部分的作業,我們其實只是簡單的提供了基礎資料而已,

首先定義一個embedding (多維空間) 用來理解需要學習的原始資料 :

一個用戶物件(含一個屬性userId)

一個視頻物件(含三個屬性:videoId, userId, rating (完播向量))

這里需要進行學習的具體就是讓機器理解那個“完播向量:rating”的含義)這里定義的embedding 維度為64, 本質就是讓機器把完播向量rating 的值當作成一個64維度的空間來進行理解(其實就是從這個rating值當中提取出64個特征來重新定義這個rating)

隨后對embedding 進行降維處理:

具體的操作與使用的降維函式曲線有關,這里采用的是先降為32維再降為1維的兩道操作方式,原來的代表rating 的embedding 空間從64維降低到了1維,而此時的輸出output 物件就是機器對rating完播向量所做出來的“自己的理解”,

最后通過對學習完的輸出項output 進行mask(遮罩)測驗,通過變換不同的mask(遮罩)來測驗結果是否與原始資料相近,或一致,從而來證實機器學習的效果,也就是上文提到的反向傳播方式的逆運算,

結語

可能依然有朋友對這套系統的底層不太了解,那么,如果我們用“白話文”的形式進行解釋:比如有一幅油畫,油畫相比完播量,肯定是多維度的,因為畫里面有顏色、風格、決議度、對比度、飽和度等等特征引數,此時我們讓機器先看完整的這幅畫,然后用機器學習的方式讓它學習(即embedding方式),接著把這幅畫遮掉一部分與主題無關的部分,然后再測驗機器讓它用學習到的資料(即embedding完成降維處理之后的資料)去嘗試復原整幅畫,隨后對比復原的整幅畫和原始油畫有多大差別,如果差別沒有或者很小,則證明機器學習成功了,機器確實學會了這副畫,然后就讓機器按照這套邏輯去畫類似的畫,最后把這一“類”的畫推薦給沒有鑒賞過的用戶,從而完成推薦系統,就這么簡單,

最后,奉上視頻推薦系統專案代碼,與眾鄉親同饗:github.com/zcxey2911/NeuralCollaborativeFiltering_NCF_Tensorflow

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/548638.html

標籤:其他

上一篇:Unity 中的存檔系統(本地存檔)

下一篇:首個接入 GPT-4,曾經比 GitHub Copilot 還好用的代碼編輯器開源了!

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more