# 特徵擷取問題 使用預訓練的模型輸出為1000,指的並不是1000個特徵,而是1000個分類,其中return max_index就是1000個中最高的那個就是他的分類,原本最後一層是 `Linear(in_features=512, out_features=1000)`,指的是將512個特徵映射到1000個種類,所以如果要得到特徵就要把最後一層(fc)改成`LeakyReLU(0.1)`,把`Linear(in_features=512, out_features=1000)`取代掉即可得到512個特徵。 > 這是錯誤的情況(目前),導致CSV只有17個特徵  > 正確的情況(只有一層FC),有512個特徵  這邊指的都是Extract_feature.py的問題 訓練的部分(應該)沒有問題。 # Question 如上提到,要將分類轉成要把最後一層改成`LeakyReLU(0.1)` 然而在Extract_feature.py中如果在一開始就改,則會在load模型的時候遇到模型不符合的問題 > 在一開始改是可以正確改的(用print(MODEL))看是對的,但因為模型不符合不能使用。 如果在最後改的話又會因為`MODEL = torch.nn.DataParallel( MODEL )`的關系(不確定,)已經把模型放進去就不能改了 > 在最後使用函式(extract_feature)前改會變成錯誤情況 所以嘗試使用單GPU來執行程式,但又會遇到因為模型是用`MODEL = torch.nn.DataParallel( MODEL )`兩個GPU訓練出來的而不能使用, # Answer 1. 目前是先重新訓練一個單GPU的模型(5epch)來試試看(還未完成)。 2. 嘗試是否有其他方法能在最後那邊改`LeakyReLU(0.1)`。 3. 確認是否是因為`MODEL = torch.nn.DataParallel( MODEL )`的問題而造成不能在最後改。 ### 2019/8/15 AM7:19 > https://zhuanlan.zhihu.com/p/61892329 学习Pytorch过程遇到的坑 這篇文章裡面有提到關於多顯卡以及`model = torch.nn.DataParallel`的問題 算是Pytorch的缺點 > model = Model() # 这里实例化Model类得到一个model model.fc # 这样做不会报错 #DataParallel情况下 parallel_model = torch.nn.DataParallel(model) parallel_model.fc # 会报错。解决办法,很简单, 在fc前加一个.module即可 parall_model.module.fc # 不会报错 要更改用DataParallel的模型時必須加上module才可以更改成功 ### 2019/8/16 AM6:46 >Loading weights from DataParallel models https://discuss.pytorch.org/t/loading-weights-from-dataparallel-models/20570 > >Does DataParallel() matters in CPU-mode https://discuss.pytorch.org/t/does-dataparallel-matters-in-cpu-mode/7587
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up