踩坑记录

  1. conda安装 & tensorflow安装(2019.12.12-2019.12.13 )

Anaconda官方下载网站

第n次安装conda辽。

conda安装时,会一直跟你互动,在问你要不要配置环境变量时选择yes就好,否则要手动加。

应该可以参考这一篇:https://blog.csdn.net/ITBigGod/article/details/85690257

tensorflow官方下载网站

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。

  1. conda 语句(2019.12.12)
  • 创建新环境
conda create -n new_env_name python=3.6

删除环境、重命名环境戳此

  • 安装opencv
conda install opencv-python
  1. 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。

  1. jupyter notebook 选择conda环境 (2019.12.18)

好不容易打开了jupyter notebook,结果change kernel那里没得选,空空如也只有一个默认项。这丫怎么跑啊。试了一下这个方法conda install nb_conda_kernels
,结果依旧白搭。然后又试了一下这个方法conda install nb_conda。我的kernels终于显现了qwq!

  1. 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

  1. 安装pytorch(2019.12.29)
    中间划水了十天,你可真行。
    pytorch官网

conda install pytorch torchvision cudatoolkit=9.2 -c pytorch

  1. torch的save问题(2020.1.1)

打算跑TFeat的训练代码。首先下载数据集,然后读入patch和label,制作dataset并转成tensor格式,利用torch.save(dataset,f)函数存成xxx.pk文件。结果打开文件,是下面的内容。

error

于是我就纳闷了,编码哪里不对了呢。我一开始也不知道这是啥意思,就从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()查看数据,还真成功了。我去。

  1. git命令学习(2020.1.1)
    廖雪峰的git教程

上条说到,我修改了程序,只跑第一个图片。没想到问题又来了,我这时候再把程序改回去,保存,再跑,还是只跑第一个图片...我又研究了一下git恢复历史版本,但还是白搭。最后的最后,我决定重新git clone(微笑)。

  1. 保存数据的方法(2020.1.1)

其实,遇到encoding这个问题之后,我觉得可能是torch.save函数的问题,于是想换个保存数据的方法。无论换什么方法,结果都是同样的错误,我后来才转变思维方式。

那都尝试了什么方法呢?

  1. 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
降级后操作成功
  1. jupyter端口映射失败(2020.2.25)
    问题:jupyter连接不上,提示:open failed connect failed: Connection refused
    方案:根据教程,在端口映射语句后加-v,得以解决。

  2. 正则表达式(2020.2.25)
    https://blog.csdn.net/shuryuu/article/details/82910857
    先马,稍后再写

  3. 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信息。

  1. python中的文件读取(2020.2.28)

可参考Python文件内容按行读取到列表中

  1. 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

  1. 环境变量配置++(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加入环境变量后就成功了。

  1. tensorflow的问题(2020.3.11)

为啥使用pip呢,这个要从tensorflow说起。在conda环境下,我可以import
tensorflow,但是在pycharm和cmd中就会报错:


报错QAQ

我用如下语句查看正在使用的python:

import sys
sys.executable

发现明明是一样的呀…Anyway,继续上网找答案。有文章说重新装一下pip install --upgrade --ignore-installed tensorflow,好咧,我就遇到了上一条pip不能用的问题。解决完后依然安装失败。

报错QAQ

https://stackoverflow.com/questions/16025788/why-does-pip-fail-with-bad-md5-hash-for-package提醒,语句改为 pip install tensorflow --upgrade --no-cache-dir,虽然我也没研究为啥。然后似乎安装得差不多,相关的依赖包报了几个错。反正试试吧。然后tensorflow就能用了。我好不求甚解又知足常乐一人。

  1. 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

  1. 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
  1. 把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

  1. 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一样有排序的语句。于是试验了一下,并不可行。返回的特征点似乎是位置排序的。

取1000/3625,发现点的纵坐标只分布在[0,291],看样子是按坐标排列的

补充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

  1. pycharm在debug模式下交互(2020.3.12)

作为pycharm的重度发烧友,今天才知道怎么在debug模式下看输入和输出…

当跑到需要input命令的语句,界面就会这样:

empty

这时候,点击一下右边的console就欧了。
console

  1. tensorflow estimator(2020/3/13)

报错:AttributeError: module 'tensorflow' has no attribute 'estimator'
原因:tensorflow和tensorflow-estimator版本不一致,卸载tensorflow-estimator后重装。

  1. cuda 占用(2020/3/13)

目前来看,我只能同时跑一个程序,如果跑两个,就会有这样的报错:



所以,如果出现了这种错误,要么我前一个程序忘关了,要么是占用的gpu太大。


每尝试run一次就有一个峰 然后迅速降落…
  1. 查看进程的详细信息(2020/3/18)
ps  -aux |grep xxx
  1. 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 addgit commit -m ....

$ git reset HEAD^    # 回退到上一个版本
$ git checkout -- aaa.txt    # aaa.txt为文件名

credit to:https://www.cnblogs.com/webPang/p/10531045.html

待填:安装vscode

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342