- conda安裝 & tensorflow安裝(2019.12.12-2019.12.13 )
第n次安裝conda遼。
conda安裝時(shí),會(huì)一直跟你互動(dòng),在問(wèn)你要不要配置環(huán)境變量時(shí)選擇yes就好,否則要手動(dòng)加。
應(yīng)該可以參考這一篇:https://blog.csdn.net/ITBigGod/article/details/85690257
tensorflow我給您拜早年了。裝了好久好久都有問(wèn)題,真的我險(xiǎn)些就認(rèn)輸了。
剛開(kāi)始python是3.7的,安裝tf2.0,報(bào)錯(cuò)。試了幾個(gè)1.x的tf,依舊報(bào)錯(cuò)。但是在網(wǎng)上查到tf現(xiàn)在明明是支持3.7呀。于是新建了3.6的環(huán)境,繼續(xù)嘗試各種版本??偣灿鲆?jiàn)“AttributeError: module 'tensorflow' has no attribute 'contrib'”、“Failed to load the native TensorFlow runtime”、“ImportError: cannot import name 'pywrap_tensorflow' from 'tensorflow.python'”等等等等error。時(shí)間久遠(yuǎn)我也不記得具體的解決方案,總之如果版本就行就卸載!來(lái)回折騰了好久好久,終于安裝成功了。
最后的配置是,python 3.6.9+tensorflow 1.12.0+CUDA 9.2.148+CUDNN 7.6.4
總之,以后要注意版本匹配,有點(diǎn)耐心。安裝時(shí)用tensorflow-gpu。
- conda 語(yǔ)句(2019.12.12)
- 創(chuàng)建新環(huán)境
conda create -n new_env_name python=3.6
刪除環(huán)境、重命名環(huán)境戳此
- 安裝opencv
conda install opencv-python
- jupyter notebook 遠(yuǎn)程訪問(wèn)服務(wù)器 (2019.12.17)
因?yàn)榕艹绦蛐枰葘?dǎo)入數(shù)據(jù)集,這個(gè)過(guò)程很慢,后面如果報(bào)錯(cuò)還要從頭再來(lái),所以希望能夠遠(yuǎn)程使用Jupyter Notebook。服務(wù)器已經(jīng)安裝好了Jupyter,所以重點(diǎn)就是怎么進(jìn)行端口轉(zhuǎn)發(fā)啦。主要參考了這幾篇:Jupyter notebook遠(yuǎn)程訪問(wèn)服務(wù)器 & How to set up a jupyter notebook to run ipython on ubuntu 16.04 & 通過(guò)PuTTY進(jìn)行端口映射并且啟動(dòng)Jupyter Notebook(fail)
還有個(gè)問(wèn)題就是8888端口一直被占用,我打開(kāi)jupyter notebook時(shí)使用 --port==8889 命令指定端口也莫名無(wú)效。機(jī)智的我最后的方法是,連接服務(wù)器->打開(kāi)jupyter notebook ->查看端口 ->打開(kāi)新窗口連接服務(wù)器并進(jìn)行端口轉(zhuǎn)發(fā)->web打開(kāi)jupyter notebook。
- jupyter notebook 選擇conda環(huán)境 (2019.12.18)
好不容易打開(kāi)了jupyter notebook,結(jié)果change kernel那里沒(méi)得選,空空如也只有一個(gè)默認(rèn)項(xiàng)。這丫怎么跑啊。試了一下這個(gè)方法conda install nb_conda_kernels
,結(jié)果依舊白搭。然后又試了一下這個(gè)方法conda install nb_conda。我的kernels終于顯現(xiàn)了qwq!
- linux語(yǔ)句 (2019.12.18)
5.1 在線下載
新get到從網(wǎng)盤(pán)下載數(shù)據(jù)集的方法。首先復(fù)制下載鏈接,使用命令:wget -c -O name.tar http://blabla。-c:斷點(diǎn)續(xù)傳(continue)。-O:下載文件在指定位置并進(jìn)行重命名,大寫(xiě)!
5.2 文件解壓
zip文件有size限制,文件太大時(shí)會(huì)報(bào)錯(cuò)。壓縮文件最好保存為tar。解壓語(yǔ)句tar -xvf $name.tar -C $filename。-x:解壓。-v:顯示所有過(guò)程。-f: 使用檔案名字,切記,這個(gè)參數(shù)是最后一個(gè)參數(shù),后面只能接檔案名。-C 是解壓到指定目錄中,注意要大寫(xiě)。具體的命令可參照:Linux下的tar壓縮解壓縮命令詳解
5.3 查看CUDA和CUDNN版本
cat /usr/local/cuda/version.txt
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
- 安裝pytorch(2019.12.29)
中間劃水了十天,你可真行。
pytorch官網(wǎng)
conda install pytorch torchvision cudatoolkit=9.2 -c pytorch
- torch的save問(wèn)題(2020.1.1)
打算跑TFeat的訓(xùn)練代碼。首先下載數(shù)據(jù)集,然后讀入patch和label,制作dataset并轉(zhuǎn)成tensor格式,利用torch.save(dataset,f)函數(shù)存成xxx.pk文件。結(jié)果打開(kāi)文件,是下面的內(nèi)容。

于是我就納悶了,編碼哪里不對(duì)了呢。我一開(kāi)始也不知道這是啥意思,就從
utf-8編碼格式入手。菜鳥(niǎo)教程上說(shuō):
Python中默認(rèn)的編碼格式是 ASCII 格式,在沒(méi)修改編碼格式時(shí)無(wú)法正確打印漢字,所以在讀取中文時(shí)會(huì)報(bào)錯(cuò)。解決方法為只要在文件開(kāi)頭加入
# -*- coding: UTF-8 -*-或者# coding=utf-8就行了
但是這是對(duì)于python程序來(lái)說(shuō)的呀,我這里是文件編碼的問(wèn)題。于是又仔細(xì)看了看我文件打開(kāi)方式:
with open(datapath, 'wb') as f:
torch.save(dataset, f)
會(huì)不會(huì)是打開(kāi)文件的時(shí)候沒(méi)有指定編碼方式呢?然后我把語(yǔ)句改成了with open(datapath, 'wb', encoding='utf8') as f:,結(jié)果報(bào)錯(cuò)說(shuō)binary不能encoding。
我仔細(xì)一尋思,binary,也就是這里wb中的b,wb是指:以二進(jìn)制格式打開(kāi)一個(gè)文件只用于寫(xiě)入。那會(huì)不會(huì)是說(shuō)文件其實(shí)存好了,只是由于不是utf-8編碼,所以顯示不出來(lái)呢?于是為省時(shí)間,我在程序中只跑了第一個(gè)圖片,save一下,然后用torch.load()查看數(shù)據(jù),還真成功了。我去。
- git命令學(xué)習(xí)(2020.1.1)
廖雪峰的git教程
上條說(shuō)到,我修改了程序,只跑第一個(gè)圖片。沒(méi)想到問(wèn)題又來(lái)了,我這時(shí)候再把程序改回去,保存,再跑,還是只跑第一個(gè)圖片...我又研究了一下git恢復(fù)歷史版本,但還是白搭。最后的最后,我決定重新git clone(微笑)。
- 保存數(shù)據(jù)的方法(2020.1.1)
其實(shí),遇到encoding這個(gè)問(wèn)題之后,我覺(jué)得可能是torch.save函數(shù)的問(wèn)題,于是想換個(gè)保存數(shù)據(jù)的方法。無(wú)論換什么方法,結(jié)果都是同樣的錯(cuò)誤,我后來(lái)才轉(zhuǎn)變思維方式。
那都嘗試了什么方法呢?
- linux查看當(dāng)前目錄文件大小
ls -lht會(huì)列出當(dāng)前目錄下每個(gè)文件的大小,同時(shí)也會(huì)給出當(dāng)前目錄下所有文件大小總和
11.軟連接(2020.2.12)
ln -s $current_path $new_path
12.opencv版本(2020.2.12)
opencv的函數(shù)不能使用。根據(jù)該博客的指導(dǎo),檢查opencv的版本,是4.1.2,由于某種原因該版本有限制。于是將opencv進(jìn)行降級(jí)。

pip uninstall opencv-python
pip install opencv-python==3.4.1.15
pip install opencv-contrib-python==3.4.1.15

jupyter端口映射失?。?020.2.25)
問(wèn)題:jupyter連接不上,提示:open failed connect failed: Connection refused
方案:根據(jù)教程,在端口映射語(yǔ)句后加-v,得以解決。正則表達(dá)式(2020.2.25)
https://blog.csdn.net/shuryuu/article/details/82910857
先馬,稍后再寫(xiě)python添加模塊搜索路徑(2020.2.27)
使用下段代碼,即可把該路徑添加為模塊搜索路徑。
import sys
sys.path.append(r‘/home/xxx/xxx/’)
該博客有更全面的講解,包括包的調(diào)用語(yǔ)句等等。
16.kmeans模型保存(2020.2.27)
方法1:利用sklearn2pmml,需要pip一下
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer, TfidfVectorizer
from sklearn2pmml.feature_extraction.text import Splitter
from sklearn.cluster import KMeans
from sklearn2pmml.pipeline import PMMLPipeline
from sklearn2pmml import sklearn2pmml
// 構(gòu)建pipeline
pipeline = PMMLPipeline([("td_vector", TfidfVectorizer(max_df=0.7, min_df=0.01, tokenizer=Splitter(), norm=None)), ("km", KMeans(n_clusters=100, random_state=1000))])
// 需要注意的是TfidfVectorizer 1)一定不能使用正則;2)使用分詞器tokenizer=Splitter()
pipeline.fit(sentences)
sklearn2pmml(pipeline, "hzd.pmml")
reference:python sklearn2pmml保存tfidf+kmeans模型
方法2:使用joblib
from sklearn.externals import joblib
joblib.dump(km_cluster, "/..../train_model.m")
km_cluster = joblib.load(".../train_model.m")
kmeans_SSE.labels_
reference:k-means+python︱scikit-learn中的KMeans聚類(lèi)實(shí)現(xiàn)( + MiniBatchKMeans)
17.利用pycharm進(jìn)行遠(yuǎn)程開(kāi)發(fā)(2020.2.27)
教程這里,只有professional版才可以遠(yuǎn)程,而我安裝的community是不可的,so sad。我也不記得是從交大軟件授權(quán)中心下載的還是從官網(wǎng)下載的了...所以要安裝vscode嗎...
ps.在help->about查看pycharm信息。
- python中的文件讀?。?020.2.28)
- anaconda環(huán)境變量(2020.3.11)
昨天電腦崩了,突然藍(lán)屏。收集完錯(cuò)誤信息,就卡在100%。強(qiáng)制關(guān)機(jī)再開(kāi),不過(guò)幾秒鐘又藍(lán)屏,心累。給出了幾條建議,“啟動(dòng)修復(fù)”無(wú)法修復(fù)電腦,檢測(cè)了我電腦的組件都o(jì)k。實(shí)在找不出是哪里的問(wèn)題,無(wú)奈之下重裝了系統(tǒng)。雖然保留了文件,但是應(yīng)用全卸掉了,也就是說(shuō)只是移除了環(huán)境變量。應(yīng)用需要一個(gè)個(gè)地再搞回來(lái)。
cmd無(wú)法使用anaconda,于是參考https://www.zhihu.com/question/278148333配置anaconda的環(huán)境變量。配置好就ok了。
XXX\Anaconda:這里面有下載Annconda后自帶的python解釋器(python.exe)
XXX\Anaconda\Scripts:這里面有anaconda.exe
- 環(huán)境變量配置++(2020.3.11)
使用pip的時(shí)候,報(bào)錯(cuò)"pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available",在這篇文章找到了答案:https://stackoverflow.com/questions/45954528/pip-is-configured-with-locations-that-require-tls-ssl-however-the-ssl-module-in
把D:\Anaconda3\Library\bin加入環(huán)境變量后就成功了。
- tensorflow的問(wèn)題(2020.3.11)
為啥使用pip呢,這個(gè)要從tensorflow說(shuō)起。在conda環(huán)境下,我可以import
tensorflow,但是在pycharm和cmd中就會(huì)報(bào)錯(cuò):

我用如下語(yǔ)句查看正在使用的python:
import sys
sys.executable
發(fā)現(xiàn)明明是一樣的呀…Anyway,繼續(xù)上網(wǎng)找答案。有文章說(shuō)重新裝一下pip install --upgrade --ignore-installed tensorflow,好咧,我就遇到了上一條pip不能用的問(wèn)題。解決完后依然安裝失敗。

經(jīng)https://stackoverflow.com/questions/16025788/why-does-pip-fail-with-bad-md5-hash-for-package提醒,語(yǔ)句改為
pip install tensorflow --upgrade --no-cache-dir,雖然我也沒(méi)研究為啥。然后似乎安裝得差不多,相關(guān)的依賴(lài)包報(bào)了幾個(gè)錯(cuò)。反正試試吧。然后tensorflow就能用了。我好不求甚解又知足常樂(lè)一人。
- cuda(2020.3.12)
設(shè)定使用的gpu語(yǔ)句
os.environ['CUDA_VISIBLE_DEVICES']='0'
23.cuda out of memory(2020.3.12)
不明白為啥inference的時(shí)候也會(huì)顯存不足,哎,加了一句with torch.no_grad():(參考自:https://www.zhihu.com/question/326044178),不知道有沒(méi)有效,似乎快了許多。

再試個(gè)地方

查看:
print(patches.requires_grad)torch.cuda.empty_cache()也可以用:https://blog.csdn.net/qq_29007291/article/details/90451890
這里提到了如何在訓(xùn)練時(shí)解決out of memory的問(wèn)題,先馬:https://zhuanlan.zhihu.com/p/82642936
再次淺談Pytorch中的顯存利用問(wèn)題(附完善顯存跟蹤代碼):https://oldpan.me/archives/pytorch-gpu-memory-usage-track
- cuda out of memory的真正原因(2020.3.12)
我一直在想,它給我報(bào)錯(cuò)RuntimeError: CUDA out of memory. Tried to allocate xxx GiB (GPU 0; xxx GiB total capacity; xxx GiB already allocated; xxx MiB free; xxx MiB cached),那怎么才能限制allocate的要求的大小呢,別這么high-demanding行不行呢。
額,直到我print了一下descriptor的大小,才發(fā)現(xiàn)這是我自己的鍋。有的圖片提取了成千上萬(wàn)個(gè)特征點(diǎn),這些patches是一起送進(jìn)網(wǎng)絡(luò)的,所以會(huì)顯存不足。機(jī)智的我(?)想起用dataloader的方法,把patches拆開(kāi),果然work了。
before:
descrs = model(patches)
return descrs.detach().cpu().numpy()
After:
from torch.utils.data import DataLoader
dataloader = DataLoader(dataset=patches, batch_size=4000,drop_last=False)
descrs = np.array([])
for batch_datas in dataloader:
print(batch_datas.shape)
batch_descrs = model(batch_datas).detach().cpu().numpy()
if descrs.shape[0] == 0:
descrs = batch_descrs
else:
descrs = np.vstack((descrs, batch_descrs))
return descrs
- 把python結(jié)果保存到log中(2020.3.12)
方法一:在命令行寫(xiě)入log
python test.py >1.log將輸出結(jié)果記錄到1.log(覆蓋寫(xiě)入)
python test.py >>1.log將輸出結(jié)果追加到1.log(每次追加)
方法二:在程序里定義
import sys
sys.stdout = open('1.log', 'a')
print "info ..."
方法三:使用logging模塊
https://blog.csdn.net/momoyaoquaoaoao/article/details/87280440
- brisk 特征提?。?020.3.12)
tfeat給出的例子使用brisk提取的key point,但有的圖片特征點(diǎn)會(huì)特別多。盡管用dataloader已經(jīng)解決了顯存不足的問(wèn)題,但出于控制指紋大小的考慮,希望控制一下特征點(diǎn)的數(shù)量。然而brisk 特征提取的語(yǔ)句,并沒(méi)有控制點(diǎn)的數(shù)量的參數(shù),充其量有個(gè)thresh
brisk = cv2.BRISK_create(thresh=100)
kp, des = brisk.detectAndCompute(img,None)
kp = brisk.detect(img,None)
那只取前N個(gè)點(diǎn)可以嗎?掃了一眼brisk源碼,并沒(méi)有發(fā)現(xiàn)像sift一樣有排序的語(yǔ)句。于是試驗(yàn)了一下,并不可行。返回的特征點(diǎn)似乎是位置排序的。

補(bǔ)充1:sift特征提取的語(yǔ)句
import cv2
sift = cv2.xfeatures2d.SIFT_create(2000)
kp=sift.detect(img,None)
kp,des=sift.detectAndCompute(img,None)
補(bǔ)充2:畫(huà)出特征點(diǎn)的語(yǔ)句,并不懂outImg這個(gè)參數(shù)是干嘛用的
import cv2
from matplotlib import pyplot as plt
img = cv2.drawKeypoints(img_c,kp, img, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
plt.imshow(img),plt.show()
補(bǔ)充3:兩張圖片特征匹配的語(yǔ)句,以brisk特征為例
import cv2
import numpy as np
from matplotlib import pyplot as plt
img1 = cv2.imread('imgs/v_churchill/1.ppm',0)
img2 = cv2.imread('imgs/v_churchill/6.ppm',0)
brisk = cv2.BRISK_create()
kp1, des1 = brisk.detectAndCompute(img1,None)
kp2, des2 = brisk.detectAndCompute(img2,None)
bf = cv2.BFMatcher(cv2.NORM_HAMMING)
matches = bf.knnMatch(des1,des2, k=2)
# Apply ratio test
good = []
for m,n in matches:
if m.distance < 0.8*n.distance:
good.append([m])
img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,0, flags=2)
plt.imshow(img3),plt.show()
權(quán)衡后,決定用sift來(lái)提取,今天才知道opencv的sift可以只detect不describe,太方便啦!
這里有幾個(gè)descriptor的opencv語(yǔ)句,后面可以做些實(shí)驗(yàn)比較:https://blog.csdn.net/amusi1994/article/details/79591205
- pycharm在debug模式下交互(2020.3.12)
作為pycharm的重度發(fā)燒友,今天才知道怎么在debug模式下看輸入和輸出…
當(dāng)跑到需要input命令的語(yǔ)句,界面就會(huì)這樣:

這時(shí)候,點(diǎn)擊一下右邊的
console就歐了。
- tensorflow estimator(2020/3/13)
報(bào)錯(cuò):AttributeError: module 'tensorflow' has no attribute 'estimator'
原因:tensorflow和tensorflow-estimator版本不一致,卸載tensorflow-estimator后重裝。
- cuda 占用(2020/3/13)
目前來(lái)看,我只能同時(shí)跑一個(gè)程序,如果跑兩個(gè),就會(huì)有這樣的報(bào)錯(cuò):

所以,如果出現(xiàn)了這種錯(cuò)誤,要么我前一個(gè)程序忘關(guān)了,要么是占用的gpu太大。

- 查看進(jìn)程的詳細(xì)信息(2020/3/18)
ps -aux |grep xxx
- git 恢復(fù)修改的文件(2020/3/18)
對(duì)于恢復(fù)修改的文件,就是將文件從倉(cāng)庫(kù)中拉到本地工作區(qū),即 倉(cāng)庫(kù)區(qū) ----> 暫存區(qū) ----> 工作區(qū)。
情況I:
只是修改了文件,沒(méi)有任何 git 操作,直接一個(gè)命令就可回退:
$ git checkout -- aaa.txt # aaa.txt為文件名
情況II:
修改了文件,并提交到暫存區(qū)(即編輯之后,git add但沒(méi)有 git commit -m ....)
$ git reset HEAD # 回退到當(dāng)前版本
$ git checkout -- aaa.txt # aaa.txt為文件名
情況III:
修改了文件,并提交到倉(cāng)庫(kù)區(qū)(即編輯之后,git add和 git commit -m ....)
$ git reset HEAD^ # 回退到上一個(gè)版本
$ git checkout -- aaa.txt # aaa.txt為文件名
credit to:https://www.cnblogs.com/webPang/p/10531045.html
待填:安裝vscode