Python lambda

lambda function(匿名函式) 基本語法 lambda arg1, arg2,... : expression fun = lambda x: x + 1 print(fun(5)) >>> 6 lambda function可以看做是一個簡單的function, 有好幾個輸入,但是只能有一個運算式。 適合的使用時機 有幾個時機適合使用lambda function 無法重複使用:“don’t repeat yourself”,因此若知道這個功能簡單且不會在類似的地方重複使用,那這是個好時機。 不想去想變數名稱:在實作功能時,會希望變數名稱就能知道這個東西可能會是甚麼,而不是只有x,y,i,j等等看不出意義或是會搞混的名稱;要注意情況,大多還是乖乖想名字吧。

2020-04-23 · 1 min read · 28 words · KbWen · ZH

Python context manager

內文管理器 python with 語句,能讓我們更輕易的實行資源管理,例如數據、開啟文件,或是各種會lock的行為。 要保證處理完相關事情,資源有被釋放。 簡單行為中,我們會這樣去開啟文件 test_file = open('test.txt', 'w') try: test_file.write('line one') finally: test_file.close() 上述行為除了是非慣用以外, 若try-finally裡面邏輯複雜,還面臨著維護的困難。 這裡有著使用 with 的簡單用法 with open('test.txt', 'w') as test_file: test_file.write('line one') 上述程式碼中,當 with 內的語句執行結束後,會自動關閉該資源,且變數test_file也會結束。 實現context manager 若想實現 context manager的功能,則要定義好__enter__ 與 __exit__ 兩個函式,分別管理with的進入行為和結束行為。

2020-04-14 · 1 min read · 38 words · KbWen · ZH

Python Iterable

要了解python 哪些對象是可以迭代的, 可以先了解兩個相似的名詞 Iterable Iterator Iterable 可以被迭代、遍歷(loop, iteration)的物件對象可以被稱為iterable, 從官方文件得知,要實現__iter__或是__getitem__的方法即可。 包含了常見的list、tuple、set、dict、str、range, >>> dir(str()) ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', ......] 但若是使用collection去檢查是否是iterable 只有實現__getitem__的對象可以被迭代但不會是iterable Iterator https://docs.python.org/3.7/c-api/iter.html 從官方文件看出,含有__iter__和__next__的對象可稱為iterator, iterator是iterable的子集合, 上述提到的幾種方式是iterable但都不是iterator,可以使用上面用到的isinstance或是dir來確認, >>> from collections.abc import Iterable, Iterator >>> for i in ([1,2,3], "123", (1,2,3)): ... print(f"{i} is iterable: {isinstance(i, Iterable)}") ... print(f"{i} is iterator: {isinstance(i, Iterator)}") ... [1, 2, 3] is iterable: True [1, 2, 3] is iterator: False 123 is iterable: True 123 is iterator: False (1, 2, 3) is iterable: True (1, 2, 3) is iterator: False 而文件則是iterator >>> file_path = os.path.abspath("test.py") >>> with open(file_path) as ifile: ... isinstance(ifile, Iterator) ... True 結語 了解了iterable和iterator,以後開發時, 若想創造出可以被迭代的對象或是迭代器, 則要知道必須要包含哪些基礎功能 那麼Generator呢?

2020-04-11 · 1 min read · 115 words · KbWen · ZH

python pdb

pdb — The Python Debugger 一段簡單的程式碼 print(f'file = {__file__}') 常見pdb幾種使用方式 1. 直接使用 python -m pdb file.py 執行上面指令會讓整個檔案進入pdb模式操作 > /home/src/test.py(1)<module>() -> file = __file__ (Pdb) 2. 設斷點 把上面程式碼改成 file = __file__ import pdb; pdb.set_trace() print(f'file = {file}') 執行後則會在第二行進入pdb > /home/src/test.py(3)<module>() -> print(f'file = {file}') (Pdb) 結果如同上方,此時進入操作。 在python3.7之後版本,可以使用 breakpoint() 指令 詳見pep553 file = __file__ breakpoint() print(f'file = {file}') 3. python shell 中使用 如果使用中遇到一些function的錯誤,可以這樣使用 創造一個測試function: def test(): a = 1 b = 'b' return a + b 這個function會出現錯誤:數字和字串的操作 再進入python >>> from test import test >>> import pdb >>> test() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/src/test.py", line 4, in test return a + b TypeError: unsupported operand type(s) for +: 'int' and 'str' >>> pdb.pm() > /home/src/test.py(4)test() -> return a + b (Pdb) 一樣也會進入pdb操作 ...

2020-04-10 · 1 min read · 133 words · KbWen · ZH

Keras IMDb

IMDb 是一個電影相關的線上資料庫。這次要利用 IMDb 的影評文字,預測它屬於正面評價還是負面評價。 在深度學習模型中,輸入必須是數字。Keras 提供了 Tokenizer 模組,會依照英文單字出現頻率進行排序並編號:Keras Tokenizer 官方文件。 接著利用 Word Embedding 將編號清單轉換為向量清單,最後丟進 LSTM 模型進行學習。 Keras 封裝了許多方便的功能,讓文字轉數字與模型建立變得非常簡單。 這是我的 Model Summary。將數字序列轉換為 64 維的向量序列,並使用了三層隱藏層進行訓練。 準確率:0.8543 實際測試 造訪 IMDb 網站,抓取《蜘蛛人:返校日 (Spider-Man: Homecoming)》的評論進行檢驗。輸入正面評論後,模型正確辨識為正面(1 為正面,0 為負面)。 My Github

2017-07-11 · 1 min read · 34 words · KbWen · ZH

Keras Cifar-10

這次使用 Keras 建立 CNN 疊代模型,來辨識 CIFAR-10 影像資料。 CIFAR-10 是 32*32 的 RGB 彩色圖形,包含飛機、狗、貓等 10 個類別,可以視為 MNIST 的進階挑戰版。 在數據預處理 (Preprocess) 階段,流程與 MNIST 類似,包括標準化與 One-hot encoding。 模型架構: 卷積層 (Convolution):兩層,選用 3*3 Kernel,Same padding。 池化層 (Max-pooling):2*2 大小。 全連接層 (Dense):由 4096 降至 1024,最後輸出 10 個類別。 可以觀察 Keras 與 TensorFlow 在參數表現與語法上的些微差异。 利用 pandas 建立混淆矩陣 (Confusion Matrix),分析模型是否在特定類別間產生混淆。 從矩陣中可以看出: 第 3 類 (cat) 與第 5 類 (dog) 較容易混淆。 動物類與交通工具類之間區分得相當清楚。 兩層 CNN 準確率:0.732 My Github

2017-07-06 · 1 min read · 66 words · KbWen · ZH

ML KNN

k-th nearest neighbor (k-NN) k-NN 是監督式學習 (Supervised learning) 的一種,名稱非常簡明扼要,就是尋找「K 個最相近的鄰居」。 這個演算法在實作時,會找到附近 K 個最近的點,根據鄰居的類別來判斷自己要歸在哪一類。雖然它是監督式學習,但其實並不需要訓練模型參數,而是將所有訓練資料儲存起來進行即時對比。 我們可以藉由調整 K 的數值來增加演算法的 Noise Margin。然而,此演算法存在著儲存空間需求大(空間複雜度高)的問題,且容易受到數據不平衡的影響。 在實作上,核心在於計算點與點之間的距離。我使用了 Scipy 的函數來實作,為了方便觀察,先取 K=1,並將結果與 sklearn 的 KNN 進行比較。 實作思路是利用 for 迴圈計算每個測試資料與所有訓練資料的距離,並取最近者的類別作為預測結果。 準確率比較: sklearn knn : 0.9733 手刻 knn : 0.9467 My Github

2017-06-30 · 1 min read · 40 words · KbWen · ZH

Kaggle PM2.5 Prediction

嘗試用 sklearn 進行分析。 使用豐原站的觀測記錄,將資料分為訓練集 (train set) 與測試集 (test set): train.csv:每個月前 20 天的所有觀測資料。 test_X.csv:從每個月剩下的 10 天中取樣。每筆資料包含連續 10 小時,以前九小時的所有觀測數據作為 Feature,預測第十小時的 PM2.5 濃度。一共取出 240 筆不重複的測試資料。 sklearn 在使用上非常直接。目前的策略是採用最基礎的方式:取出所有前九小時的值作為 Feature,不進行額外的特徵工程或化簡,直接觀察結果。 在 Private 排名約在中間,略高於 Baseline。 因為使用的是 Linear Regression,對 Gradient Descent 而言:計算一次斜率,直接就能找到解。 My Github

2017-06-13 · 1 min read · 37 words · KbWen · ZH

Kaggle Titanic

Kaggle The sinking of the RMS Titanic is one of the most infamous shipwrecks in history. On April 15, 1912, during her maiden voyage, the Titanic sank after colliding with an iceberg, killing 1502 out of 2224 passengers and crew. This sensational tragedy shocked the international community and led to better safety regulations for ships. One of the reasons that the shipwreck led to such loss of life was that there were not enough lifeboats for the passengers and crew. Although there was some element of luck involved in surviving the sinking, some groups of people were more likely to survive than others, such as women, children, and the upper-class. ...

2017-06-09 · 2 min read · 224 words · KbWen · EN

TENSORFLOW 練習4: word2vec

把字詞轉成 word embedding 要在字詞中找到他們之間的某種關聯,而不只是分散無意義的符號代表。 做這個問題的核心概念是: 「假設兩個不同句子中的詞上下文相同,則代表兩個詞的語意相近。」 今天要來使用 skip-gram 模型,一個類似二元分類的方式 (判斷像或是不像)。一開始也同之前的問題,先做數據處理。 計算出現數量:[(most count word1, n1), (second word2, n2)] 文字轉成向量: 例如:The actual code for this tutorial is very short 生成的 skip-gram pairs 示意: ([the, code], actual), ([actual, for], code), … (actual, the), (actual, code), (code, actual), … 在這之間都會給他編號,轉化為 (10, 20), (10, 30), (30, 10), (30, 40) ... 的形式。 用到 nce_loss,目前我還不是非常熟練,概念上是讓目標詞的機率越高越好,並讓其餘 K 個負面樣本 (negative samples) 的機率降低。 經典案例: king - queen = man - woman ==> king - queen + woman = man ...

2017-05-12 · 1 min read · 95 words · KbWen · ZH