# 問題與解決方向 ## 發現的問題 在6/9時候,冠傑發現一個單純的CNN只要把lr調小,層數多幾層來訓練,其實test acc就可以到百分之七十幾了(這個數據其實和我們的Disentangling GAN數據是差不多的),一直以來以為單純CNN的效果會不好(可能只有三、四十),但發現只要調一下就發現可以到達跟Disentangling GAN效果差不多,所以很匪夷所思 ## 問題釐清 ### dataset 有四種 dataset .npy名稱中的 345_1_ => train: 3,4,5 test: 1 ![](https://i.imgur.com/AA8putr.png) ### 可能性 有幾種可能性需要一步一步嘗試,究竟為什麼單純的CNN會有現在之問題 1. 幾層CNN (參數數量) * C64 C64 C128 F D128 D256 D64 D4 * C64 C128 F D128 D4 2. lr * Adam(lr=0.001) * Adam(lr = 0.0001) 3. 訓練次數, test acc ### 實驗結果 #### 使用data為 train:012 test:5 #### fit(batch_size=64) * 較多層CNN(做了3次平均下來的結果) * lr=0.0001 * 當train acc在0.9946時, test acc為0.62127 :::spoiler 圖 ![](https://i.imgur.com/IIXTRYJ.png) ![](https://i.imgur.com/dUh2BkW.png) ![](https://i.imgur.com/DMQqW8q.png) ::: * 上面三次測試結果+還做過很多次只是沒有紀錄的經驗,其實測出來的test acc很不穩定,基本上會在0.5x~0.6x附近震盪,甚至最爛有到0.49過 * 多次嘗試下來,train acc在八十幾的時候, test acc會為最佳,大概在0.7x * lr = 0.001,較多層CNN * 跟lr=0.0001比就只是會影響訓練速度和穩定 * 較簡單CNN * lr = 0.0001,較簡單CNN * 當 train acc=0.9945時, test acc = 0.6338 :::spoiler 圖 ![](https://i.imgur.com/LuhgZpP.png) ![](https://i.imgur.com/wMtiidC.png) ![](https://i.imgur.com/Fo2mnYd.png) ::: * 多次嘗試下來,train acc在八十幾的時候, test acc會為最佳,大概在0.7x * lr = 0.001,較簡單CNN * 跟lr=0.0001比就只是會影響訓練速度和穩定 ### 實驗結論 1. 用較複雜CNN或是較簡單CNN,哪個效果會比較好? * 從上面的測試得知,其實結果差不多,只是差在訓練速度上面,較複雜CNN比較快 2. 關於 lr 選擇上: * 就是訓練速度和訓練穩定 有差 3. overfit: * pure CNN 會有overfit的問題,train acc只要上到九十幾以後,test acc就會開始往下掉 4. 不穩定: * 這裡的不穩定講的是在test acc表現方面,在較多層CNN,當train acc在0.9946時那點有說到 ## 希望改善 1. overfit: 希望能夠改善overfit這個問題,雖然說overfit這問題最直接的方式就是增加數據還有減少參數(減少dense),但是目前數據的方面無法做到,所以或許disentangling GAN能夠幫助我們 2. test acc: ## disentangling GAN 因為我們的數據,動作特徵是主要的特徵,所以很容易分辨出動作,但是我們想要分辨身分,因此運用GAN去做特徵分離,希望能夠把身分特徵抽取出來,而不要動作特徵 * 模型: model1: ::: spoiler 圖示 ![](https://i.imgur.com/KShg59X.jpg) ::: model2: (這個效果沒有model1好,棄用) ::: spoiler 圖示 ![](https://i.imgur.com/UBJlz87.jpg) ::: model3: 為model1 + id_discriminator * 與單純CNN比較方法: 固定好 encoder 和 id_classifier,這兩個層數和參數各方面用的和上面單純CNN(較少層CNN)的一樣,藉此來比較 ### model1測試結果 (之後再重測) 012_5 disentangling GAN ![](https://i.imgur.com/hTzuhuD.png) * 最後當訓練到batch 4999時,test acc都會到5x 345_1 disentangling GAN 012_5 pure CNN ### model2 測試結果 012_5 結果與pure CNN 差不多,甚至還差一點點 所以不打算用 ### 發現都是3號這個人不見 * 嘗試將3號拿掉只留012號 * disentangling GAN model2 ![](https://i.imgur.com/TKPCCrA.png) ![](https://i.imgur.com/Ngcumca.png) ![](https://i.imgur.com/qLdWETj.png) * disentangling GAN model3 ![](https://i.imgur.com/WAHNYkq.png) * pure CNN ![](https://i.imgur.com/VPhF3Ba.png) ![](https://i.imgur.com/TPntUKD.png) ![](https://i.imgur.com/Mh9Ejbl.png) ![](https://i.imgur.com/Qy7JFst.png) * 把原本的0號拿掉(所以原本的123變成012) * disentangling GAN ![](https://i.imgur.com/Bo51rQ0.png) ![](https://i.imgur.com/Lv2YRQg.png) ![](https://i.imgur.com/qbgfIgv.png) * pure cnn ![](https://i.imgur.com/aA0lv7D.png) ![](https://i.imgur.com/LXOX767.png) * 結論: * 3號真的比較難辨識 * disentangling GAN 是有效的 * 辦法: 就是再加入一個 3號discirminator,專門用來區分是不是3號這個人 * 但是這種方法很不好,因為這是從結果推論回來的方法,最終還是不能解決不一般化的問題 * 所以不打算用 ## model3 測試結果 * disentangling GAN 012_5 ![](https://i.imgur.com/zldgkPm.png) * 中間大概在batch 1800的時候,classifier的acc就會到1左右,可id_discriminator只有7x% * 中間的過程(就是id_discriminator還沒訓練到acc1時),test acc都滿低的會掉到5x、6x ![](https://i.imgur.com/CuID8nE.png) pure CNN ![](https://i.imgur.com/hBMOZH9.png) * 猜測: * 大概在batch為1800的時候開始,classifier的acc就會到接近1,但是因為加了id_discriminator(這時候acc才大概7x%),所以encoder還會有方向的繼續學習,就會往能分清楚(同個人不同動作)和(不同人同個動作) ## 對於dataset的了解,動作特徵和身分特徵的關聯性 我們將ID的feature分成兩個部分討論: 1. 與action的feature交集 2. 沒有與action的feature交集 下述實驗當中,都是把三號測試者拿掉地狀況 ### 實驗描述 如果我們假設第二部分較第一部分大(交集處較小):則將action_discriminator的loss取**負號**後當作feedback傳回去encoder。其結果如下圖: * ![](https://i.imgur.com/YnnHodR.png) 又如果我們假設第一部分較第二部分大(交集處較大):則將action_discriminator的loss取**正號**後當作feedback傳回去encoder。其結果如下圖: * ![](https://i.imgur.com/Es6zXYT.png) ### 實驗結論 一開始都沒有太顯著的差別,但是在batch60時,兩個模型開始有差別 ## 在Distangling裡面discriminator的feedback影響性 ### 讓discriminator回傳亂數 ![](https://i.imgur.com/AaQReiO.png) 加上discriminator可以使模型結果更加穩定 ## 用 tsne視覺化 * train data: 不同顏色不同同人 ![](https://i.imgur.com/rcuMjvO.png) * data: 不同顏色不同速度 ![](https://i.imgur.com/lz290wn.png) 疑惑點: 發現train data 同個人會被分成2團,原本想說或許是因為動作012相差很大,所以會因動作被分成兩團,但沒想到本不是 ## 疑點 ![](https://i.imgur.com/cSgjLo5.png) ![](https://i.imgur.com/EYSE8BQ.png) yellow:0號 red:1號 blue:2號 black:3號 在t-SNE的圖上可以看到黑色自己幾乎是獨立一塊,但是classifer出來的結果卻幾乎都被分到藍色去