read.cash Log in

@hbkedge

Joined 26 December 2022 · 514 posts

120 KT

0 KT received · 0 KT given

Posts

h@hbkedge

龍家俊教你 機器學習 day 5 #無監督學習 定義: 輸入數據是由輸入特徵值組成,沒有目標值 輸入數據沒有被標記,也沒有確定的結果。樣本數據類別未知;需要根據樣本間的相似性對樣本集進行類別劃分。 #無監督學習裡典型例子是聚類。聚類的目的在於把相似的東西聚在一起,而我們並不關心這一類是什麼。因此,一個聚類算法通常只需要知道如何計算相似度就可以開始工作了。

h@hbkedge

龍家俊教你 機器學習 day 4 #根據數據集組成不同,可以把機器學習算法分為: 監督學習 無監督學習 半監督學習 強化學習 # 監督學習 定義: 輸入數據是由輸入特徵值和目標值所組成。 函數的輸出可以是一個連續的值(稱為回歸), 或是輸出是有限個離散值(稱作分類)。 1.回歸問題 例如:預測房價,根據樣本集擬合出一條連續曲線 2.分類問題 例如:根據腫瘤特徵判斷良性還是惡性,得到的是結果是“良性”或者“惡性”,是離散的

h@hbkedge

龍家俊教你 機器學習 day 3 特徵工程 #什麼是特徵工程 特徵工程是使用專業背景知識和技巧處理數據,使得特徵能在機器學習算法上發揮更好的作用的過程。 意義:會直接影響機器學習的效果 # 為什麼需要特徵工程(Feature Engineering) 機器學習領域的大神Andrew Ng老師說“Coming up with features is difficult, time-consuming, requires expert knowledge. “Applied machine learning” is basically feature engineering. ” # 特徵工程包含內容 特徵提取 特徵預處理 特徵降維

h@hbkedge

龍家俊教你 機器學習 day 2 數據簡介 在數據集中一般: 一行數據我們稱為一個樣本 一列數據我們成為一個特徵 有些數據有目標值(標籤值),有些數據沒有目標值 數據類型構成: 數據類型一:特徵值+目標值(目標值是連續的和離散的) 數據類型二:只有特徵值,沒有目標值 數據分割: 機器學習一般的數據集會劃分為兩個部分: 訓練數據:用於訓練,構建模型 測試數據:在模型檢驗時使用,用於評估模型是否有效 劃分比例: 訓練集:70% 80% 75% 測試集:30% 20% 25%

h@hbkedge

龍家俊教你 機器學習 day 1 # 什麼是機器學習 機器學習是從數據中自動分析獲得模型,並利用模型對未知數據進行預測 #機器學習工作流程 1.獲取數據 2.數據基本處理 3.特徵工程 4.機器學習(模型訓練) 5.模型評估 結果達到要求,上線服務 沒有達到要求,重新上面步驟

h@hbkedge

我先貼範例 科科 這畫面 加上背景樂的旋律 真的令人心碎阿~~

h@hbkedge

{公告} 因應疫情關係 明日 6/8 舉行 docker python期末考 請準時應考..

h@hbkedge

龍家俊教你 python day 51 線程之間共享全局變量數據出現錯誤問題 需求: 定義兩個函數,實現循環100萬次,每循環一次給全局變量加1 創建兩個子線程執行對應的兩個函數,查看計算後的結果 import threading # 定義全局變量 g_num = 0 # 循環一次給全局變量加1 def sum_num1(): for i in range(1000000): global g_num g_num += 1 print("sum1:", g_num) # 循環一次給全局變量加1 def sum_num2(): for i in range(1000000): global g_num g_num += 1 print("sum2:", g_num) if __name__ == '__main__': # 創建兩個線程 first_thread = threading.Thread(target=sum_num1) second_thread = threading.Thread(target=sum_num2) # 啟動線程 first_thread.start() # 啟動線程 second_thread.start() 執行結果: sum1: 1210949 sum2: 1496035 注意點: 多線程同時對全局變量操作數據發生了錯誤 錯誤分析: 兩個線程first_thread和second_thread都要對全局變量g_num(默認是0)進行加1運算,但是由於是多線程同時操作,有可能出現下面情況: 在g_num=0時,first_thread取得g_num=0。此時系統把first_thread調度為”sleeping”狀態,把second_thread轉換為”running”狀態,t2也獲得g_num=0 然後second_thread對得到的值進行加1並賦給g_num,使得g_num=1 然後系統又把second_thread調度為”sleeping”,把first_thread轉為”running”。線程t1又把它之前得到的0加1後賦值給g_num。 這樣導致雖然first_thread和first_thread都對g_num加1,但結果仍然是g_num=1 全局變量數據錯誤的解決辦法: 線程同步: 保證同一時刻只能有一個線程去操作全局變量 同步: 就是協同步調,按預定的先後次序進行運行。 線程同步的方式: 線程等待(join) 互斥鎖 線程等待的示例代碼: import threading # 定義全局變量 g_num = 0 # 循環1000000次每次給全局變量加1 def sum_num1(): for i in range(1000000): global g_num g_num += 1 print("sum1:", g_num) # 循環1000000次每次給全局變量加1 def sum_num2(): for i in range(1000000): global g_num g_num += 1 print("sum2:", g_num) if __name__ == '__main__': # 創建兩個線程 first_thread = threading.Thread(target=sum_num1) second_thread = threading.Thread(target=sum_num2) # 啟動線程 first_thread.start() # 主線程等待第一個線程執行完成以後代碼再繼續執行,讓其執行第二個線程 # 線程同步: 一個任務執行完成以後另外一個任務才能執行,同一個時刻只有一個任務在執行 first_thread.join() # 啟動線程 second_thread.start() 執行結果: sum1: 1000000 sum2: 2000000

h@hbkedge

龍家俊教你docker day 50 Container 模型 #命令格式: docker run --network=container:$(docker ps --filter name=bridge -q) -d --name co_container hwchiu/netutils Container:$ID 這個參數的意思就是告訴 Docker 不要幫我創造新的網路空間,使用現有的 Container 的網路空間,和它共處於相同的網路環境中。因此,這兩個 Container 將會看到一樣的網路介面、路由表 … 等網路相關資訊.

h@hbkedge

龍家俊教你 python day 50 線程之間共享全局變量 需求: 定義一個列表類型的全局變量 創建兩個子線程分別執行向全局變量添加數據的任務和向全局變量讀取數據的任務 查看線程之間是否共享全局變量數據 import threading import time # 定義全局變量 my_list = list() # 寫入數據任務 def write_data(): for i in range(5): my_list.append(i) time.sleep(0.1) print("write_data:", my_list) # 讀取數據任務 def read_data(): print("read_data:", my_list) if __name__ == '__main__': # 創建寫入數據的線程 write_thread = threading.Thread(target=write_data) # 創建讀取數據的線程 read_thread = threading.Thread(target=read_data) write_thread.start() # 延時 # time.sleep(2) # 主線程等待寫入線程執行完成以後代碼在繼續往下執行 write_thread.join() print("開始讀取數據...") read_thread.start() 執行結果: write_data: [0, 1, 2, 3, 4] 開始讀取數據... read_data: [0, 1, 2, 3, 4]

h@hbkedge

docker day 49 none 模型 none網路模式,是一種自由度非常高的網路模式,我們可以最大化的自定義我們想要的網路 #命令格式: docker run --net=none -itd --name [容器名稱] 鏡像名稱 #命令示例: #查看網路 itcast@itcast-virtual-machine:~$ docker network ls NETWORK ID NAME DRIVER SCOPE 35e1fe4bfd91 bridge bridge local b5a84f949a9l host host local e70e4cb94db4 none null local #查看網路none的信息 :~$ docker network inspect none #發現包含容器為空 "Name": "none", "Containers": {}, #根據none網路創建nginx-2容器 :~$ docker run -itd --name nginx-2 --net=none nginx 31b52vb15459a415ffebb527aea43b857f4c4f8hdaaab363293a0a98cef14

h@hbkedge

龍家俊教你 python day 49 #主線程會等待所有的子線程執行結束再結束 假如我們現在創建一個子線程,這個子線程執行完大概需要2.5秒鐘,現在讓主線程執行1秒鐘就退出程序,查看一下執行結果,example如下: import threading import time # 測試主線程是否會等待子線程執行完成以後程序再退出 def show_info(): for i in range(5): print("test:", i) time.sleep(0.5) if __name__ == '__main__': sub_thread = threading.Thread(target=show_info) sub_thread.start() # 主線程延時1秒 time.sleep(1) print("over") 執行結果: test: 0 test: 1 over test: 2 test: 3 test: 4 說明: 通過上面代碼的執行結果,我們可以得知: 主線程會等待所有的子線程執行結束再結束 假如我們就讓主線程執行1秒鐘,子線程就銷毀不再執行,那怎麼辦呢? 我們可以設置守護主線程 守護主線程: 守護主線程就是主線程退出子線程銷毀不再執行 設置守護主線程有兩種方式: threading.Thread(target=show_info, daemon=True) 線程對象.setDaemon(True) example: import threading import time # 測試主線程是否會等待子線程執行完成以後程序再退出 def show_info(): for i in range(5): print("test:", i) time.sleep(0.5) if __name__ == '__main__': # 創建子線程守護主線程 # daemon=True 守護主線程 # 守護主線程方式1 sub_thread = threading.Thread(target=show_info, daemon=True) # 設置成為守護主線程,主線程退出後子線程直接銷毀不再執行子線程的代碼 # 守護主線程方式2 # sub_thread.setDaemon(True) sub_thread.start() # 主線程延時1秒 time.sleep(1) print("over") 執行結果: test: 0 test: 1 over

h@hbkedge

docker day 48 # host模型實作 容器使用本機的ip地址進行對外提供服務,本身沒有ip地址 #命令格式: docker run --net=host -itd --name [容器名稱] 鏡像名稱 #host特點: host模型比較適合一臺本機跑一個固定的容器,比較穩定,或者一個本機跑多個佔用不同端口的應用的場景,他的網路性能是很高的。 host模型啟動的容器不會有任何地址,他其實是使用了本機的所有訊息.

h@hbkedge

來點刺激的吧 問:上一次是什麼時候呢?

h@hbkedge

龍家俊教你 python day 48 1. 線程的注意點介紹 *線程之間執行是無序的 *主線程會等待所有的子線程執行結束再結束 *線程之間共享全局變量 *線程之間共享全局變量數據出現錯誤問題 2. 線程之間執行是無序的 import threading import time def task(): time.sleep(1) print("當前線程:", threading.current_thread().name) if __name__ == '__main__': for _ in range(5): sub_thread = threading.Thread(target=task) sub_thread.start() 執行結果: 當前線程: Thread-1 當前線程: Thread-2 當前線程: Thread-4 當前線程: Thread-5 當前線程: Thread-3 說明: 1.線程之間執行是無序的,它是由cpu調度決定的 ,cpu調度哪個線程,哪個線程就先執行,沒有調度的線程不能執行。 2.進程之間執行也是無序的,它是由操作系統調度決定的,操作系統調度哪個進程,哪個進程就先執行,沒有調度的進程不能執行。

h@hbkedge

龍家俊教你 docker day 47 之前我們創建的容器,它們的ip都是從docker0自動獲取的,接下來我們自己定義一個br0網橋,然後啟動的容器就用這個 網橋 #網橋是什麼?他是一種設備,根據設備的物理地址來劃分網段,並傳輸數據的,docker0就是默認的網橋。 #設定docker網橋 1、bridge-utils軟件的brctl工具可以實現創建網橋 2、 配置/etc/default/docker文件 編輯systemctl的配置文件使用該docker文件 重載systemctl配置 重啟docker 3、創建容器,查看容器信息即可 #創建一個網橋 bridge0。 $ sudo brctl addbr bridge0 $ sudo ip addr add 192.168.1.1/24 dev bridge0 $ sudo ip link set dev bridge0 up

h@hbkedge

龍家俊教你 python day 47 kwargs參數的使用 示例代碼: import threading import time # 帶有參數的任務 def task(count): for i in range(count): print("任務執行中..") time.sleep(0.2) else: print("任務執行完成") if __name__ == '__main__': # 創建子線程 # kwargs: 表示以字典方式傳入參數 sub_thread = threading.Thread(target=task, kwargs={"count": 10}) sub_thread.start()

h@hbkedge

龍家俊教你 docker day 46 #命令格式: docker network connect [網路名][容器名] #將容器nginx--1連接到bridge-test1網路: ~$ docker network connect bridge-test1 nginx--1 : ~$ docker ps CONTAINERID IMAGE COMMAND CREATED STATUS PORTS NAMES cc55de5710ad nginx "nginx-g'daemonof..." Aboutanhourago UpAboutanhour nginx--2

h@hbkedge

龍家俊教你 python day 46 # 線程執行帶有參數的介紹 前面我們使用線程執行的任務是沒有參數的,假如我們使用線程執行的任務帶有參數,如何給函數傳參呢? Thread執行任務並給任務傳參數有兩種方式: 1.args 表示以元組的方式給執行任務傳參 2.kwargs 表示以字典方式給執行任務傳參 #args參數的使用 example: import threading import time # 帶有參數的任務 def task(count): for i in range(count): print("%%%任務執行中..") time.sleep(0.2) else: print("%%%任務執行完成") if __name__ == '__main__': # 創建子線程 # args: 以元組的方式給任務傳入參數 sub_thread = threading.Thread(target=task, args=(10,)) sub_thread.start()

h@hbkedge

龍家俊教你 docker day 45 容器斷開網路 #命令格式: docker network disconnect [網路名][容器名] #命令演示: docker network disconnect bridge-test nginx1 #效果展示: #斷開容器nginx--1網路bridge-test :~$ docker network disconnect bridge-test nginx--1

h@hbkedge

龍家俊教你 python day 45 多線程的使用 1. 導入線程模塊 #導入線程模塊 import threading 2. 線程類Thread參數說明 Thread([group [, target [, name [, args [, kwargs]]]]]) group: 線程組,目前只能使用None target: 執行的目標任務名 args: 以元組的方式給執行任務傳參 kwargs: 以字典方式給執行任務傳參 name: 線程名,一般不用設置 3. 啟動線程 啟動線程使用start方法 example: import threading import time # %%%任務 def s(): # print("%%%當前執行的線程為:", threading.current_thread()) for i in range(3): print("正在%%%...%d",i) time.sleep(1) # diy任務 def d(): # print("diy當前執行的線程為:", threading.current_thread()) for i in range(3): print("正在diy...%d" ,i) time.sleep(1) if __name__ == '__main__': # print("當前執行的線程為:", threading.current_thread()) # 創建%%%的線程 # target: 線程執行的函數名 s_thread = threading.Thread(target=s) # 創建diy的線程 d_thread = threading.Thread(target=d) # 開啟線程 s_thread.start() d_thread.start() https://pastebin.ubuntu.com/p/Jmwb7sWDMm/

h@hbkedge

龍家俊教你 docker day 44 在自定義網路中啟動容器 #命令格式: docker run --net=[網路名稱] -itd --name=[容器名稱][鏡像名稱] #使用效果: #查看創建的網路bridge-test :~$ docker network inspect bridge-test "Containers": {},#容器是空的 #查看創建的網路bridge-test1 :~$ docker network inspect bridge-test1 "Containers": {},#容器也是是空的 #創建啟動1個使用網路為bridge-test 名為nginx--1的容器 :~$ docker run --net=bridge-test -itd --name nginx--1 nginx ff07009ba3c29872145630814d163ccffe72643abef3acda2d443d6848004d87

h@hbkedge

龍家俊教你 python day 44 # 線程的介紹 在Python中,想要實現多任務除了使用進程,還可以使用線程來完成,線程是實現多任務的另外一種方式。 #線程的概念 線程是進程中執行代碼的一個分支,每個執行分支(線程)要想工作執行代碼需要cpu進行調度,也就是說線程是cpu調度的基本單位,每個進程至少都有一個線程,而這個線程就是我們通常說的主線程。 # 線程的作用 多線程可以完成多任務

h@hbkedge

龍家俊教你 docker day 43 #自定義網段與Gateway #查看關於網段和網管的相關命令 :~$ docker network create --help --gateway strings IPv4 or IPv6 Gateway for the master subnet 主子網的IPv4或IPv6Gateway。 --subnet strings Subnet in CIDR format that represents a network segment 表示網路段的CIDR格式的子網。 #查看剛剛創建的網路信息 :~$ docker network inspect bridge-test [ { "Name": "bridge-test", 。 。 。 "Config": [ { "Subnet": "172.18.0.0/16",#ip/子網 "Gateway": "172.18.0.1"#Gateway 。 。 。 #創建自定義網段與Gateway信息 :~$ docker network create --driver bridge --gateway 172.99.0.1 --subnet 172.99.0.0/16 bridge-test1 #成功返回對應的sha256碼 9d02a01fa98b7a538027b624171481a2098232fa707cdc83084fc880d0afd091 #查看網路列表 :~$ docker network ls NETWORK ID NAME DRIVER SCOPE c2dcffa83a29 bridge bridge local 17847710137f bridge-test bridge local 9d02a01fa98b bridge-test1 bridge local c4deefdaf53b host host local 57942890c6d6 none null local #查看自定義網路的Gateway與網路信息 :~$ docker network inspect bridge-test1 [ { "Name": "bridge-test1", 。 。 。 。 。 。 "Config": [ { "Subnet": "172.99.0.0/16"#ip/子網 "Gateway": "172.99.0.1"#Gateway } 。 。 。 。 #查看主機網路信息 $ ifconfig br-9d02a01fa98b Link encap:以太網 硬件地址 02:42:41:18:2c:5a inet 地址:172.99.0.1 廣播:172.99.255.255 掩碼:255.255.0.0 UP BROADCAST MULTICAST MTU:1500 躍點數:1 接收數據包:0 錯誤:0 丟棄:0 過載:0 幀數:0 發送數據包:0 錯誤:0 丟棄:0 過載:0 載波:0 碰撞:0 發送隊列長度:0 接收字節:0 (0.0 B) 發送字節:0 (0.0 B)

h@hbkedge

龍家俊教你 python day 43 #進程的注意點介紹 1.進程之間不共享全局變量 2.主進程會等待所有的子進程執行結束再結束 code: import multiprocessing import time # 定義全局變量 g_list = list() # 添加數據的任務 def add_data(): for i in range(5): g_list.append(i) print("add:", i) time.sleep(0.2) # 代碼執行到此,說明數據添加完成 print("add_data:", g_list) def read_data(): print("read_data", g_list) if __name__ == '__main__': # 創建添加數據的子進程 add_data_process = multiprocessing.Process(target=add_data) # 創建讀取數據的子進程 read_data_process = multiprocessing.Process(target=read_data) # 啟動子進程執行對應的任務 add_data_process.start() # 主進程等待添加數據的子進程執行完成以後程序再繼續往下執行,讀取數據 add_data_process.join() read_data_process.start() print("main:", g_list) # 總結: 多進程之間不共享全局變量 https://pastebin.ubuntu.com/p/gsHMDtjtgx/

h@hbkedge

龍家俊教你 docker day 42 其實我們在端口映射的部分就是bridge模式的簡單演示了,因為他們使用的是默認bridge網路模式,現在我們來自定義橋接網路。 創建網路 #命令格式: docker network create --driver [網路類型][網路名稱] #參數 create 創建一個網路 --driver 指定網路類型 #指令: $ docker network create --driver bridge bridge-test #查看主機網路類型: :~$ docker network ls NETWORK ID NAME DRIVER SCOPE #網路id #名稱 #類型 #範圍 c2dcffa83a29 bridge bridge local c4deefdaf53b host host local 57942890c6d6 none null local d5c061bc02b1 bridge-test bridge local #查看新建網路的網路信息 :~$ docker network inspect bridge-test [ { "Name": "bridge-test", 。 。 。 。 。 。 "Config": [ { "Subnet": "172.18.0.0/16",#ip "Gateway": "172.18.0.1"#gateway } ] }, 。 。 。 。 。 。 } ] #本機又多出來一個網卡設備: $ ifconfig br-17847710137f Link encap:以太網 mac地址 02:42:cb:8b:48:37 inet 地址:172.18.0.1 廣播:172.18.255.255 掩碼:255.255.0.0 。 。 。 。 。 。

Everything by @hbkedge, by month