- conda安装 & tensorflow安装(2019.12.12-2019.12.13 )
第n次安装conda辽。
conda安装时,会一直跟你互动,在问你要不要配置环境变量时选择yes就好,否则要手动加。
应该可以参考这一篇:https://blog.csdn.net/ITBigGod/article/details/85690257
tensorflow我给您拜早年了。装了好久好久都有问题,真的我险些就认输了。
刚开始python是3.7的,安装tf2.0,报错。试了几个1.x的tf,依旧报错。但是在网上查到tf现在明明是支持3.7呀。于是新建了3.6的环境,继续尝试各种版本。总共遇见“AttributeError: module 'tensorflow' has no attribute 'contrib'”、“Failed to load the native TensorFlow runtime”、“ImportError: cannot import name 'pywrap_tensorflow' from 'tensorflow.python'”等等等等error。时间久远我也不记得具体的解决方案,总之如果版本就行就卸载!来回折腾了好久好久,终于安装成功了。
最后的配置是,python 3.6.9+tensorflow 1.12.0+CUDA 9.2.148+CUDNN 7.6.4
总之,以后要注意版本匹配,有点耐心。安装时用tensorflow-gpu。
- conda 语句(2019.12.12)
- 创建新环境
conda create -n new_env_name python=3.6
删除环境、重命名环境戳此
- 安装opencv
conda install opencv-python
- jupyter notebook 远程访问服务器 (2019.12.17)
因为跑程序需要先导入数据集,这个过程很慢,后面如果报错还要从头再来,所以希望能够远程使用Jupyter Notebook。服务器已经安装好了Jupyter,所以重点就是怎么进行端口转发啦。主要参考了这几篇:Jupyter notebook远程访问服务器 & How to set up a jupyter notebook to run ipython on ubuntu 16.04 & 通过PuTTY进行端口映射并且启动Jupyter Notebook(fail)
还有个问题就是8888端口一直被占用,我打开jupyter notebook时使用 --port==8889
命令指定端口也莫名无效。机智的我最后的方法是,连接服务器->打开jupyter notebook ->查看端口 ->打开新窗口连接服务器并进行端口转发->web打开jupyter notebook。
- jupyter notebook 选择conda环境 (2019.12.18)
好不容易打开了jupyter notebook,结果change kernel那里没得选,空空如也只有一个默认项。这丫怎么跑啊。试了一下这个方法conda install nb_conda_kernels
,结果依旧白搭。然后又试了一下这个方法conda install nb_conda
。我的kernels终于显现了qwq!
- linux语句 (2019.12.18)
5.1 在线下载
新get到从网盘下载数据集的方法。首先复制下载链接,使用命令:wget -c -O name.tar http://blabla
。-c:断点续传(continue)。-O:下载文件在指定位置并进行重命名,大写!
5.2 文件解压
zip文件有size限制,文件太大时会报错。压缩文件最好保存为tar。解压语句tar -xvf $name.tar -C $filename
。-x:解压。-v:显示所有过程。-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。-C 是解压到指定目录中,注意要大写。具体的命令可参照: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官网
conda install pytorch torchvision cudatoolkit=9.2 -c pytorch
- torch的save问题(2020.1.1)
打算跑TFeat的训练代码。首先下载数据集,然后读入patch和label,制作dataset并转成tensor格式,利用torch.save(dataset,f)
函数存成xxx.pk
文件。结果打开文件,是下面的内容。
于是我就纳闷了,编码哪里不对了呢。我一开始也不知道这是啥意思,就从
utf-8
编码格式入手。菜鸟教程上说:
Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。解决方法为只要在文件开头加入
# -*- coding: UTF-8 -*-
或者# coding=utf-8
就行了
但是这是对于python程序来说的呀,我这里是文件编码的问题。于是又仔细看了看我文件打开方式:
with open(datapath, 'wb') as f:
torch.save(dataset, f)
会不会是打开文件的时候没有指定编码方式呢?然后我把语句改成了with open(datapath, 'wb', encoding='utf8') as f:
,结果报错说binary不能encoding。
我仔细一寻思,binary,也就是这里wb中的b,wb是指:以二进制格式打开一个文件只用于写入。那会不会是说文件其实存好了,只是由于不是utf-8编码,所以显示不出来呢?于是为省时间,我在程序中只跑了第一个图片,save一下,然后用torch.load()
查看数据,还真成功了。我去。
- git命令学习(2020.1.1)
廖雪峰的git教程
上条说到,我修改了程序,只跑第一个图片。没想到问题又来了,我这时候再把程序改回去,保存,再跑,还是只跑第一个图片...我又研究了一下git恢复历史版本,但还是白搭。最后的最后,我决定重新git clone(微笑)。
- 保存数据的方法(2020.1.1)
其实,遇到encoding这个问题之后,我觉得可能是torch.save
函数的问题,于是想换个保存数据的方法。无论换什么方法,结果都是同样的错误,我后来才转变思维方式。
那都尝试了什么方法呢?
- linux查看当前目录文件大小
ls -lht
会列出当前目录下每个文件的大小,同时也会给出当前目录下所有文件大小总和
11.软连接(2020.2.12)
ln -s $current_path $new_path
12.opencv版本(2020.2.12)
opencv的函数不能使用。根据该博客的指导,检查opencv的版本,是4.1.2,由于某种原因该版本有限制。于是将opencv进行降级。
pip uninstall opencv-python
pip install opencv-python==3.4.1.15
pip install opencv-contrib-python==3.4.1.15
jupyter端口映射失败(2020.2.25)
问题:jupyter连接不上,提示:open failed connect failed: Connection refused
方案:根据教程,在端口映射语句后加-v
,得以解决。正则表达式(2020.2.25)
https://blog.csdn.net/shuryuu/article/details/82910857
先马,稍后再写python添加模块搜索路径(2020.2.27)
使用下段代码,即可把该路径添加为模块搜索路径。
import sys
sys.path.append(r‘/home/xxx/xxx/’)
该博客有更全面的讲解,包括包的调用语句等等。
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
// 构建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聚类实现( + MiniBatchKMeans)
17.利用pycharm进行远程开发(2020.2.27)
教程这里,只有professional版才可以远程,而我安装的community是不可的,so sad。我也不记得是从交大软件授权中心下载的还是从官网下载的了...所以要安装vscode吗...
ps.在help->about查看pycharm信息。
- python中的文件读取(2020.2.28)
- anaconda环境变量(2020.3.11)
昨天电脑崩了,突然蓝屏。收集完错误信息,就卡在100%。强制关机再开,不过几秒钟又蓝屏,心累。给出了几条建议,“启动修复”无法修复电脑,检测了我电脑的组件都ok。实在找不出是哪里的问题,无奈之下重装了系统。虽然保留了文件,但是应用全卸掉了,也就是说只是移除了环境变量。应用需要一个个地再搞回来。
cmd无法使用anaconda,于是参考https://www.zhihu.com/question/278148333配置anaconda的环境变量。配置好就ok了。
XXX\Anaconda:这里面有下载Annconda后自带的python解释器(python.exe)
XXX\Anaconda\Scripts:这里面有anaconda.exe
- 环境变量配置++(2020.3.11)
使用pip的时候,报错"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
加入环境变量后就成功了。
- tensorflow的问题(2020.3.11)
为啥使用pip呢,这个要从tensorflow说起。在conda环境下,我可以import
tensorflow,但是在pycharm和cmd中就会报错:
我用如下语句查看正在使用的python:
import sys
sys.executable
发现明明是一样的呀…Anyway,继续上网找答案。有文章说重新装一下pip install --upgrade --ignore-installed tensorflow
,好咧,我就遇到了上一条pip不能用的问题。解决完后依然安装失败。
经https://stackoverflow.com/questions/16025788/why-does-pip-fail-with-bad-md5-hash-for-package提醒,语句改为
pip install tensorflow --upgrade --no-cache-dir
,虽然我也没研究为啥。然后似乎安装得差不多,相关的依赖包报了几个错。反正试试吧。然后tensorflow就能用了。我好不求甚解又知足常乐一人。
- cuda(2020.3.12)
设定使用的gpu语句
os.environ['CUDA_VISIBLE_DEVICES']='0'
23.cuda out of memory(2020.3.12)
不明白为啥inference的时候也会显存不足,哎,加了一句with torch.no_grad():
(参考自:https://www.zhihu.com/question/326044178),不知道有没有效,似乎快了许多。
再试个地方
查看:
print(patches.requires_grad)
torch.cuda.empty_cache()
也可以用:https://blog.csdn.net/qq_29007291/article/details/90451890
这里提到了如何在训练时解决out of memory的问题,先马:https://zhuanlan.zhihu.com/p/82642936
再次浅谈Pytorch中的显存利用问题(附完善显存跟踪代码):https://oldpan.me/archives/pytorch-gpu-memory-usage-track
- cuda out of memory的真正原因(2020.3.12)
我一直在想,它给我报错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的大小,才发现这是我自己的锅。有的图片提取了成千上万个特征点,这些patches
是一起送进网络的,所以会显存不足。机智的我(?)想起用dataloader的方法,把patches
拆开,果然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结果保存到log中(2020.3.12)
方法一:在命令行写入log
python test.py >1.log
将输出结果记录到1.log(覆盖写入)
python test.py >>1.log
将输出结果追加到1.log(每次追加)
方法二:在程序里定义
import sys
sys.stdout = open('1.log', 'a')
print "info ..."
方法三:使用logging模块
https://blog.csdn.net/momoyaoquaoaoao/article/details/87280440
- brisk 特征提取(2020.3.12)
tfeat给出的例子使用brisk提取的key point,但有的图片特征点会特别多。尽管用dataloader已经解决了显存不足的问题,但出于控制指纹大小的考虑,希望控制一下特征点的数量。然而brisk 特征提取的语句,并没有控制点的数量的参数,充其量有个thresh
brisk = cv2.BRISK_create(thresh=100)
kp, des = brisk.detectAndCompute(img,None)
kp = brisk.detect(img,None)
那只取前N个点可以吗?扫了一眼brisk源码,并没有发现像sift一样有排序的语句。于是试验了一下,并不可行。返回的特征点似乎是位置排序的。
补充1:sift特征提取的语句
import cv2
sift = cv2.xfeatures2d.SIFT_create(2000)
kp=sift.detect(img,None)
kp,des=sift.detectAndCompute(img,None)
补充2:画出特征点的语句,并不懂outImg这个参数是干嘛用的
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()
补充3:两张图片特征匹配的语句,以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()
权衡后,决定用sift来提取,今天才知道opencv的sift可以只detect不describe,太方便啦!
这里有几个descriptor的opencv语句,后面可以做些实验比较:https://blog.csdn.net/amusi1994/article/details/79591205
- pycharm在debug模式下交互(2020.3.12)
作为pycharm的重度发烧友,今天才知道怎么在debug模式下看输入和输出…
当跑到需要input命令的语句,界面就会这样:
这时候,点击一下右边的
console
就欧了。- tensorflow estimator(2020/3/13)
报错:AttributeError: module 'tensorflow' has no attribute 'estimator'
原因:tensorflow和tensorflow-estimator版本不一致,卸载tensorflow-estimator后重装。
- cuda 占用(2020/3/13)
目前来看,我只能同时跑一个程序,如果跑两个,就会有这样的报错:
所以,如果出现了这种错误,要么我前一个程序忘关了,要么是占用的gpu太大。
- 查看进程的详细信息(2020/3/18)
ps -aux |grep xxx
- git 恢复修改的文件(2020/3/18)
对于恢复修改的文件,就是将文件从仓库中拉到本地工作区,即 仓库区 ----> 暂存区 ----> 工作区。
情况I:
只是修改了文件,没有任何 git 操作,直接一个命令就可回退:
$ git checkout -- aaa.txt # aaa.txt为文件名
情况II:
修改了文件,并提交到暂存区(即编辑之后,git add
但没有 git commit -m ....
)
$ git reset HEAD # 回退到当前版本
$ git checkout -- aaa.txt # aaa.txt为文件名
情况III:
修改了文件,并提交到仓库区(即编辑之后,git add
和 git commit -m ....
)
$ git reset HEAD^ # 回退到上一个版本
$ git checkout -- aaa.txt # aaa.txt为文件名
credit to:https://www.cnblogs.com/webPang/p/10531045.html
待填:安装vscode