顯示具有 深度學習 標籤的文章。 顯示所有文章
顯示具有 深度學習 標籤的文章。 顯示所有文章

2025年7月21日 星期一

SimCLR : 重複圖片偵測技術

 1.) SimCLR 是一種微調RestNet一種作法,使其 能夠對於類似的圖片產生相同的向量 至於如何"類似" 由自己定義。定義為相似的圖片, 例如把同一個片其經過角度旋轉、平移、亮度不同、加入些許雜點的細微變化, 仍視為相同的,SimCLR 模型必須建立相同的特徵向量。


simclr 的訓練方法其概念同CLIP model





2.) 一旦有了這個模型後接著我們可以利用clustering 方法,如k-means 或HDBSCAN 進行圖片的分群, 同群表示其群內圖片應極為類似。

2025年5月21日 星期三

模型是根據句中的哪段話判斷分類結果

 

#Transformer #BERT # Self -Attention  #Explainable AI  #LIME  #SHAP 

在NLP中的文章分類或句子的情緒判別中,模型分類結果符合預期,但如何得知到底是這句話或文章那句話或詞語決定了分類的結果 ? 


LIME 執行的結果


若使用的是Transformer 的BERT., 那可以透Attention weight distribution , 得知那模型主要關注了那一個字。但若分類模型不是BERT 這種具有Self -Attention 的機制,那作法可以用模型可解釋性 (Explainable AI) 的方法,,如LIME 或 SHAP ,他們會用分類模型結果去建立一個簡線性模型, 如Logistic Regression 的這種架構,Y=w1x1+w2x2+w3x3+....如此便可以透過這些權重值w1,w2,... 去了解每個字的重要性。









2025年1月10日 星期五

不平衡資料集的解決辦法


 
當樣本類別分佈很不平均時 , 如何解決?

不平衡資料集

(1) 從資料下手: 


除了用data augumentation 增加少數Minority類別的樣本資料, 也可以用Resampling 的方法,避免模型訓練後偏向回答多數(Majority)類別的答案 .
Resampling 是指反覆地從訓練資料中抽取不同的樣本子集,並對每組子集重新訓練模型,減少模型的偏差。Resampling 的方法如 Bootstrap 取樣法或 K-Fol 交叉驗證,這兩種方法其主要差異在於樣本子集的抽取方式:Bootstrap使用有放回的隨機抽樣,而 k-fold 交叉驗證則將資料分成 k 個不重疊的子集進行訓練與驗證。






  • 分割: 把訓練集(注意,這裡指的是除去最終測試集後剩下的數據)平均分成 k 個小集合(或稱為「摺」,folds)。
  • 迭代訓練與驗證: 針對這 k 個摺,重複以下步驟 k 次:
    • 訓練: 選取其中 k-1 個摺作為訓練數據來訓練模型。
    • 驗證: 用剩下那 1 個摺作為臨時的測試集(或驗證集),來評估模型的表現(例如計算準確率)。
  • 平均表現: k-摺交叉驗證最終報告的模型表現,是這 k 次驗證結果的平均值


  • (2) 從模型下手: 

    資料添增完後,可以更進一步雙管齊下去修改模型的 Loss 函數,當模型對少數類別的判別錯誤時加重懲罰,加大它的Loss。 例如 logistic regression 的 Loss 函數 可以修改成這樣。






    2024年9月18日 星期三

    如何同時衡量模型的正確性與長期穩定性?

     

    如何同時衡量模型的正確性與長期穩定性?

    Home Credit - Credit Risk Model Stability

    Create a model measured against feature stability over time

    https://www.kaggle.com/competitions/home-credit-credit-risk-model-stability/overview


    gini = 2 * AUC - 1   (AUC:0~1)

    stability metric = mean(gini) + 88.0 * min(0, a) - 0.5 * std(residuals)

    針對預測能力呈現下滑趨勢給予懲罰 :即 a < 0 的情況

    穏定性評估: 計算 residuals 的標準差, 愈小表示模型愈穏定. 最好是 0



    [References ]


    Understanding ROC and AUC 

    2024年8月3日 星期六

    iPAS 機器學習工程師參考樣題解說




    更多補充說明 :

    1.) 神經網路加入Embedding 層的用意? 
    將輸入的 sparse vector 轉換成高維度的 dense vector,如此的 dense vector可能可以表現資料更多元的特徵。

    2.) 模型效能評估為何使用RMSLE (Root Mean Square Logarithmic Error)  而不是MSE  ? 

    因為當資料數據 y 本身差異很大時, 決定MSE 的大小其實都是由數值很大的 y 所主導, 對於數值很小的 y 就顯得微不足道。  故若想要觀察每一筆資料預測的誤差不要被某一筆數量級較大的y所主導,可以使用RMSLE.


    因為RMSLE 先取 log  再計算MSE.。 由於取log 會使數值 scale 變小, 因此即使存在某些 y 很大, 對MSE 的影響也會相對變小。

    另外,也可以用MAPE, 尤其當每筆資料數據 y 都是很大的情況,用MSE 計算都將超大,故用平均絕對百分比誤差反而是一個比較能看出預測和標準答案的誤差率。

     



    Read More: 

    2022年3月29日 星期二

    什麼是機器學習? (學習簡介)



    訓練出好的AI模型的下一步是什麼 ? 就是AI佈署(Deployment ) , 你可以將AI模型佈署在雲端 或者佈署在邊緣的嵌入式的裝置上, 而嵌入式的裝置可以是指特定的微控制器上或是Android/iOS 手機上。











     

    2019年5月6日 星期一

    OpenVINO教學-OpenVINO model optimizer錯誤排解


    www.ittraining.com.tw狀況一、OpenVINO model optimizer 發生內部錯誤

    當使用Intel OpenVINO model optimizer 轉換tensorflow pb modelIR (Intermediate Representation) model時出現…… Exception occurred during running replacer "REPLACEMENT_ID (<……>)": list index out of range ……等訊息。


        









            出現此現象表示輸入之pb model可能未進行Freeze動作或Freeze動作未完全,故可參考
    https://stackoverflow.com/questions/45466020/how-to-export-keras-h5-to-tensorflow-pb將整個tensorflow session完全freeze,再行轉換即可成功。

    Reference:

        
    狀況二、使用OpenVINO model optimizer 出現 __new__() got an unexpected keyword argument 'serialized_options' 錯誤

          當使用Intel OpenVINO model optimizer 轉換tensorflow pb model至IR (Intermediate Representation) model時出現以下錯誤訊息:

    [ ERROR ]  Error happened while importing tensorflow module. It may happen due to unsatisfied requirements of that module. Please run requirements installation script once more.
    Details on module importing failure: __new__() got an unexpected keyword argument 'serialized_options'

    [ ERROR ]

    Detected not satisfied dependencies:
            tensorflow: package error, required: 1.10.0

    表示系統所安裝之protoc(Protocol Buffer) binary與python protobuf package版本不一致所致。可使用以下3組指令確認系統目前所安裝之版本。

    1.系統Global protoc binary version
    protoc --version

    2.使用pip所安裝之版本
    pip list|grep protobuf

    3.python3 interpreter實際抓到使用的版本
    python3 -c "from google import protobuf;print(protobuf.__version__);print(protobuf.__file__)"

















    指令1更版方式:
    #Make sure you grab the latest version
    wget 
    https://github.com/google/protobuf/releases/download/v3.7.1/protoc-3.7.1-linux-x86_64.zip

    # Unzip
    unzip protoc-3.7.1-linux-x86_64.zip -d protoc3.7.1

    # Detemine Directory, if exist delete it
    if [ -d " protoc3.7.1" ]; then
        # Directory protoc3.7.1 exists
        echo "Directory protoc3.7.1 exists. Remove it."
        sudo rm -r protoc3.7.1
    fi

    # Move protoc to /usr/local/bin/
    sudo mv protoc3.7.1/bin/* /usr/local/bin/

    # Detemine Directory, if exist delete it
    if [ -d "/usr/local/include/google" ]; then
        # Directory /usr/local/include/google exists
        echo "Directory /usr/local/include/google exists. Remove it."
        sudo rm -r /usr/local/include/google
    fi

    # Move protoc3/include to /usr/local/include/
    sudo mv protoc3.7.1/include/* /usr/local/include/

    # Optional: change owner
    sudo chown $USER /usr/local/bin/protoc
    sudo chown -R $USER /usr/local/include/google

    # Delete protoc3.7.1 directory
    rm -r protoc3.7.1

    指令2更版方式:
    Pip install -U -force-reinstall protobuf==3.7.1

    指令3更版方式:
    若dist-package有使用easy-install (EGG)安裝之套件,則依該套件的方法移除後重新執行指令2的更版方式即可修復

    ~強烈建議在Linux環境下使用virtualenv、Windows環境下使用anaconda做python環境控管~


    2018年12月14日 星期五

    CUDA driver version is insufficient for CUDA runtime version



    問題1: 程式只要 import keras 就會掛掉!!

    解法==> conda update keras
                    conda update tensorflow


    問題2: UDA driver version is insufficient for CUDA runtime version

    \Anaconda3\lib\site-packages\tensorflow\python\client\session.py in __init__(self, target, graph, config)
        674     try:
        675       # pylint: disable=protected-access
    --> 676       self._session = tf_session.TF_NewSessionRef(self._graph._c_graph, opts)
        677       # pylint: enable=protected-access
        678     finally:
    
    InternalError: cudaGetDevice() failed. Status: CUDA driver version is insufficient for CUDA runtime version



    解法==> 就是要讓 cuda driver和 cudnn 匹配. 若是在Anaconda , 因為Anaconda 會去做軟體版本匹配的整合, 所以最簡單的作法就是直接執行  conda update --all


    若tensorflow 要使用底層GPU架構,要安裝對應的軟體.

    Keras --> Tensorflow --> cuDNN --> CUDA Driver  --> GPU graphic card


    cuDNN [1]: The NVIDIA CUDA® Deep Neural Network library (cuDNN) is a GPU-accelerated library of primitives for deep neural networks. cuDNN provides highly tuned implementations for standard routines such as forward and backward convolution, pooling, normalization, and activation layers. cuDNN is part of the NVIDIA Deep Learning SDK.

    CUDA Driver : Driver for NVIDIA graphic card


    References: