Pytorch實作系列 — siamese network

mz bai
Nov 30, 2020

--

孿生網路是由 Koch et al. (2015, 多倫多大學) 在 Siamese Neural Networks for One-shot Image Recognition提出,用於解決 one shot 圖片辨認的問題: 如何在只看過一個樣本的情況下學會分類該類別的圖片。

資料集

本次採用 Omniglot 做為示範,它是一個包含多種語言的字母資料集。

網路

概念上是取兩個輸入圖片的相似度,如果同類則標記為1,不同類則標記為0。架構極為簡單,經過編碼器後取兩個輸入特徵向量的距離即可。

損失函數

採用 Binary Cross Entropy loss.

訓練

如同普通的分類任務。

評估

模型可分辨兩張圖片是否為同一類別的準確度達0.90。

筆記

  1. 實現後發現卷積層並不需要太大,可以用極為輕巧的程度實現。例如這次的模型大小大約為10M,主要影響的因素是最後的全連接層。
  2. 模型訓練的資料量也不需要太大,可以在很小的圖片對集下完成訓練,訓練速度也會更快。

結語

本文介紹如何做出簡單的siamese network。實作代碼可參考以下連結。

參考

https://towardsdatascience.com/building-a-one-shot-learning-network-with-pytorch-d1c3a5fafa4a

--

--

mz bai
mz bai

Written by mz bai

Present data engineer, former data analyst, Kaggle player, loves data modeling.