思考題1 - 如何識別不合法的輸入
- 分類的機率輸出來自於softmax,不合法輸入的輸出值送進softmax前相對於合法輸入導出的輸出在此處的分佈狀況會有較大差別。
- 對於給定字符_alpha_,softmax前輸出_ALPHA_,能夠預先計算其餘合法l={a,b,c,d,1,2,3,...}在softmax前輸出分佈的集合L,L中每一個元素能夠以一個N維(總類別數)正態分佈擬合,人爲設定sigma斷定使ALPHA落在全部L中分佈均值sigma外時認爲alpha爲非法輸入。
思考題2 - 如何識別下列元素
- 算式的語義識別本質上是一個編譯問題
- 進行圖像預處理、輪廓提取得到預約義的合法的字符流後,要作的就是根據字符流按照預約義的合法記號(能夠包括多個字符,若是是運算符還能夠包含關聯字符的關係)按照預約義的記號結構進行記號提取,這一部分就是lexer。
- 以後根據lexer返回的記號流按照預約義的算式文法規則進行語義分析和語法制導計算就是parser。
- 具體地回答三個問題:
- A:支持sin:已能分別識別s,i,n後若是在一個字符流讀到s,繼續向後讀i和n,若是讀到了return TOKEN_SIN,若是沒有將後面多讀的字符rollback回記號流按照讀到了一個s繼續處理。
- B:複雜的表達式結構:任何表達式結構能夠定義一個運算符,指數結構定義成x^y運算符,分數結構定義爲豎式x/y,如此返回的字符須要包含該字符的空間關係或該字符在讀字符流的過程當中根據該字符和以後的字符的空間關係判斷是否知足預約義好的運算符規則。
- C:和B沒有任何區別,只不過須要根據文法屢次記號遞歸,文法中須要定義某些記號的做用範圍,即結合性(如定義根號的做用範圍從而讀到根號後把其下的全部記號一次所有讀出再作處理;指數運算符單一字符左結合,從而不會出現(a^2+b)^2的行爲)
最終,任何算式都能按文法表達成抽象語法樹,對樹作後序遍歷的過程當中根據節點的類型(字符、運算符的類型)作對應的語法制導翻譯(計算),頂層節點不斷調用子節點的計算函數進行遞歸計算便可求出整棵樹頂節點的值,即整個表達式的值。git