【2021機器學習筆記】機器學習任務攻略

作業 作業二: 語音辨識 我們的x就是非常小的一段聲音訊號。 x 是一小段訊號,ŷ 是要去預測 是要去判斷這一小段聲音訊號,它對應到哪一個phoneme(音素)。 作業三:影象辨識 這個時候我們的x是一張圖片,ŷ是機器要判斷說這張圖片裡面有什麼樣的東西。 作業四:語者辨識 這個x也是一段聲音訊號,ŷ現在不是phoneme,ŷ是現在是哪一個人在說話。 這樣的系統現在其實非常的有用,如果你打電話去銀行的客服。 現在都有自動的語者辨認系統,它會聽說現在打電話進來的人是不是客戶本人,就少了客服人員問你身份驗證的時間。 作業五:機器翻譯 x 是某一個語言,它的ŷ就是另外一句話這樣。 訓練三個步驟 第一步:寫出一個有未知數的function 你要先寫出一個有未知數的function,這個未知數以後我們都用θ來代表一個Model裡面所有的未知函數。 所以fθ(x)的意思就是說,我現在有一個function叫f(x),它裡面有一些未知的參數。 這些未知的參數表示成θ,它的input叫做x,這個input叫做feature。 第二步:定 loss loss是一個function,這個loss的輸入就是一組參數,去判斷說這一組參數是好還是不好。 第三步:解 Optimization problem 你要去找一個 θ,這個 θ 可以讓loss的值越小越好。 可以讓loss的值,最小的那個θ,我們叫做θ*。 有了θ*,我們就把它拿來用在測試資料上。 也就是你把θ* 帶入這些未知的參數,本來fθ(x)裡面有一些未知的參數,現在θ 用θ*來取代。 它的輸入就是你現在的測試資料,輸出的結果你就把它存起來,然後上傳到Kaggle就結束了。 從最上面開始,如果你覺得你在 Kaggle 上的結果不滿意的話,第一件事情你要做的是檢查你的training data 的 loss。 有人說 我在意的不是應該是testing data的loss嗎? Kaggle上面的結果,呈現的是testing data的結果。 但是你要先檢查你的training data,看看你的model在training data上面,有沒有學起來,再去看testing的結果。 如果你發現你的training data的loss很大,顯然它在訓練資料上面也沒有學好。 接下來你要分析一下,在訓練資料上面沒有學好,是什麼樣的原因。 …

【2021機器學習筆記】機器學習任務攻略 Read More »

【C 語言入門】191.可修改內容的多個字串

我們在上一篇文章有說到,使用二維陣列存的話,我們可以把每個字元都修改;而用指標陣列存的話,可以直接對整個字串修改。 同時呢,他們也有各自的缺點,使用二維陣列直接存字元的話,我們直接改字串會比較麻煩;而用指標陣列存字串的話,我們又沒有辦法改每個字元。 於是我們的程式可以這樣寫。 儲存的東西不一樣,就影響了它們可以修改的東西不一樣。 如果我們讓 strB 字串的每個位置都去存 strA 裡面每個字串的開頭的位址的話,這樣就可以同時獲得二維陣列和指標陣列的好處。 我們可以直接修改每個字元,也可以直接修改整個字串。 strB[2] 其實就是 strA[2] ,而 strB[2][0] 也就是 ‘y’。 這樣我們就可以輕易改到字元了。 那如果我們要對字串進行更改呢? What 本身是字串的字面常數,如果要直接轉成指標的話,這些內容是不能改的,是 const。 我們希望 strB 指向的字串像 strA 裡面這些字元一樣,是可以修改的。 因此 strB[0] = “What”; 這樣的轉型是有問題的。 我們必須想辦法讓我們產生的這些格子不是 const,可以更改。 我們都知道,雙引號是不能直接改成指標的。 但是如果我們先把它存在字元陣列,這樣是 strC。 然後再把字元陣列的位址,存在 strB 指標的話,這樣就可以成功更改了。 我們可以把 strC 的開頭位址存在 strB[0],這樣 strB[0] 就從原本指向 “How” 這個字串改成指向 “What” 這個字串。 因此當我們去存取 strB[0][0] 的時候,我們也可以修改字元。 但是這個方法會讓你原本的字串沒辦法使用,而且會一直佔據記憶體的空間。