超可❤的编程知识🌠🌙
——jupyter notebook后台运行jupyter每次都需要被重新打开,一旦断开,就会影响程序的执行。所以我们在后台运行。
具体操作如下:
(1)打开ssh:连接到服务器,然后输入:screen -S notebook(这句是在说,新建一个后台的screen,notebook是它的名字,这个名字可以改)
(2)输入:screen -ls(这个是为了看一下有没有我之前打开的,这个不是必须的)
(3)输入:jupyter notebook
(4)先同时按ctrl+a,再输入d:
好了,现在就是在后台了,这个就可以关了,而网页上面的jupyter还可以打开,正常使用~然后我试了一下,果然是对滴啊~果然关掉还不影响运行啊~真是太棒了啊~
❤几个小tips:
(1)当数据集也传到服务器上面,与.py文件一起放在jupyter上面时,直接写相对路径即可:faces_2/即可;
(2)在Windows上面用\,在linux上面用/
(3)注意两个''//''那,第一个/就变成转义字符了,所以就出现了错误;
❤都弄好以后,看看服务器有几个显卡:
(1)
点击new,terminal(3)输入:watch -n 1 nvidia-smi
原来四个都没人用,那我们就不客气了~❤现在来将代码改一下,可以用cuda来跑:
(1)这里需要修改:
这里不用改动就是在最下面,加了这样一句,其中device_ids = [0, 1, 2, 3]这里就是用上了4个显卡
(2)batch_size这里需要做些修改:
这里,需要在data[0]与data[1]后面分别加上.cuda()好啦~把修改的再运行一下就好了~
运行过程中,我ii了一下,结果就:
内存占满了看看cuda:
果然是占满了,真是太厉害了啊啊啊 我来自我反思一下,可能是刚才我看这个还在print(img_path),于是我就注释了这句,并且ii终止程序,而且又重新run all。那么之前的内存可能没有释放。
我狮虎建议我重启内核(restart):
果然,内存的占用率又迅速降低到了0
然后再重新runall:
但是同样的问题,再度出现,仍然是cuda内存占满了,仍然和上面一样。
那应该是代码的问题了看下网络部分:
这里怎么突然出现了14,我狮虎说,应该和vgg16的一样,怎么突然用这个transpose,这是转置卷积啊,一般的卷积都是越来越小,这个转置卷积是越来越大。而且卷积核是14,很大了!于是我被打了
没事,这个打我挨~我狮虎说他,从未见过这么大的卷积核
这两个可以直接去掉,然后2048要改
这是修改后的网络
这是修改之前的网络
这是去掉以后的网络
这里好像不该去掉两层
所以我就把-2,改为-1
这是最后的池化层被加回来了
再次运行的时候,就暂时没有什么问题了~
我狮虎说,batch_size是10太小,改成200试试,于是我再次ii:
但是我要改的时候,貌似人家已经训练好了这里也要加上.cuda() 因为运行的是时候,出现这样的错误了
接着昨天的来做咯~
同上,在data[0],data[1]后面加上.cuda() 再次出现这样的问题 原来出错的原因是这里,不应该是resnet,而应该是model 好啦~resnet部分到这里就结束了~结果还不错~接下来看看vgg16的表现如何~ 显卡还没有占满,那就再把batch_size调大一点,我改成了200 由于我刚才没有重启内核,所以就这个显卡占用很满啊GPU的占用率,为0了 噫,准确率已经是个成熟的准确率了,这么高了
所以,改变dataset,分一下训练集和测试集:
注意,dataset的type要有默认参数:不然就要放在前面,有默认参数的放在最后。
原因是我该写成dataset_type = False,既然前面的叫了,那么这个也要叫,要不然就不开心。没想到是这小心眼子的pytorch
不知不觉就来到了第三天,我们今天上课老师说讲的时候,要包含以下几个方面。(1)数据如何处理;(2)特征如何提取;(3)实验注意事项;(4)实验结果分析。那么我会按照这几方面来准备PPT。
下午去看排球队打了一会排球,我果然笨夫夫哒,还真不是这块儿料,Duang了几个球,怎么也Duang不过去。不过看大家把手臂都打红了,打肿了,大家也是很拼的。不过增强体质嘛,挺好的。
还有一件事,今天我狮虎给我看这个。
你看,好几天之前,我看到这个数据集的时候,就说这就是吴恩达,可是我的这个评判标准呀,说不 是,噫,你看看,我就觉得,我这人脸识别,是不是很厉害了,通过看吴恩达现在的照片,就能认出来这个20年前的照片~好啦~开始正式学习啦~
昨天运行以后,结果如下:
训练集的准确率,竟然比测试集的还要小,猜测是len的问题~len的长度没问题 原来是这里没有写,这样的话,label和数据就不匹配了,这样就不对
改了以后,果然都对了,哈哈哈,真的是都对了啊,怎么这么棒!
我决定,用opencv直接读取电脑摄像头,拍摄人脸,进行识别,看是否正确~
但是,这个过程,不太容易,至少对于现在的我来说,不容易啊。
我还是决定,加油写一下!!! 我狮虎让我写一下详细的流程,然后逐句翻译就好狮虎提示:
(1)hwc-->chw,用numpy的transpose,变成1chw
(2)无法打开笔记本摄像头了,因为我的代码现在是在服务器上面跑啊。
过程就是这么坎坎坷坷,但是我最近每天都有进展~不怕慢,就怕站。这里是将hwc-->chw 然后变成一个tensor 变为nchw我已经彻底蒙了……
到底啥是啥的啥?????? 问:输入是什么?答:batch_size张图片。问:输入是什么格式的?答:png格式。问:输入是什么形状的?答:nchw。 但是现在的输入还是hwc,所以用view变成(n,c,h,w) np.reshape torch.view torch.view 这也是错的 我已经傻了,我决定,肥家~ 所以我用PIL将RGB图变为灰度图以后,又接着用OpenCV的cv2.resize,出来的图像的颜色是很奇怪的,那么就说明了问题在于,这两者的顺序不同。
网友评论