最近刚开始学习深度学习,参考了一篇深度学习的入门文章,原文链接:https://medium.freecodecamp.org/everything-you-need-to-know-to-master-convolutional-neural-networks-ef98ca3c7655。
文章内容就是kaggle上的一个competition,识别图像中是否存在航拍仙人掌,使用了Pytorch框架,原文代码有些许错误,经改正后代码如下:
1 import numpy as np 2 import pandas as pd 3 from pathlib import Path 4 from fastai import * 5 from fastai.vision import * 6 import torch 7 get_ipython().run_line_magic('matplotlib', 'inline') 8 9 train_df=pd.read_csv("train.csv") #读取csv文件到train_df 10 data_folder=Path(".") #path为默认位置 11 train_images=ImageList.from_df(train_df,path=data_folder,folder='train')#记住读取方法 12 print(torch.cuda.is_available()) 13 a=torch.ones(1,1) 14 print(a.cuda()) 15 16 trfm=get_transforms(do_flip=True,flip_vert=True,max_rotate=10.0,max_zoom=1.1,max_lighting=0.2,max_warp=.2,p_affine=0.75,p_lighting=0.75) 17 #train_img = train_img.transform(transformations, size=128)#错误句子,直接删除 18 19 test_df=pd.read_csv("sample_submission.csv") 20 test_img=ImageList.from_df(test_df,path=data_folder,folder='test') 21 train_img = (train_images 22 .split_by_rand_pct(0.01)#把训练数据分出一小部分做验证集 23 .label_from_df() 24 .add_test(test_img) 25 .transform(trfm, size=128) 26 .databunch(path='.', bs=14, device= torch.device('cuda:0'))#进行批处理,bs由显存决定,太大跑不了。太小跑得慢 27 .normalize(imagenet_stats)#图像归一化 28 ) 29 30 learn = cnn_learner(train_img, models.densenet161, metrics=[error_rate, accuracy])#用 cnn_leaner 创建一个训练器 31 #用移动网络开热点下载快,用联通的网就下载的很慢 32 33 #单周期策略,暴力搜索(大了:训练过程快,容易错过误差边界,甚至会跳出可控范围,无法收敛;小了:训练慢) 34 learn.lr_find() 35 learn.recorder.plot() 36 37 lr = 3e-02 38 learn.fit_one_cycle(5, slice(lr)) 39 40 preds,_ = learn.get_preds(ds_type=DatasetType.Test) 41 test_df.has_cactus = preds.numpy()[:, 0] 42 43 test_df.to_csv('submission.csv', index=False)
以上就是全部的代码,运行环境为win10 64位操作系统,Python3.7,Pytorch1.1.0,CUDA10.1.120,NVDIA驱动程序431.36。
开始时使用CUDA运行遇到困难,测试print(torch.cuda.is_available()) 总是显示false,经过一番折腾,找到了解决办法,如下:
1、Pytorch在国内通过pip安装会有问题,最好通过在PyTorch官网(https://pytorch.org/)下载后,然后本地安装whl文件(再次提醒,一定要本地安装,这样才能保证安装的Pytorch是完整包含CUDA的):
①官网图片,直接浏览器中打开如下https网站,可能会慢一些;或者将网站拷贝到迅雷中下载,这样可能会快一点。
另外一定要注意安装Python3.7的64位,并且win10/win7也要是64位,因为Pytorch仅支持64位!
②本地文件系统图片和通过命令行(管理员模式)安装图片,cmd中两个whl文件都要安装,我这里只演示一个,如果之前装过Pytorch但是没法调用CUDA,就先卸载(一定要用管理员模式的命令行)再安装,卸载指令为 pip uninstall torch 和 pip uninstall torchvision:
2、NVDIA官网(https://developer.nvidia.com/cuda-downloads)下载CUDA,首先应确认自己的电脑是否有NVDIA显卡,并确定是否支持CUDA,直接一路下一步安装即可,这里就不放图片了。
3、jupyter notebook中运行上述代码,若 print(torch.cuda.is_available()) 为True则证明CUDA调用成功,另外注意 bs 数值要根据自己的显存大小来设置。
note:笔记本一般都是双显卡(一个位集成显卡,一个为NVDIA独立显卡),做桌面模式win10可以自动切换使用独立显卡调用CUDA,并不用特意设置NVDIA控制面板,之前走过很多弯路,以为笔记本上没法用CUDA加速,后来发现就是版本或者安装的问题。
通过这样一番设置,应该就可以调用CUDA了,关键点有几个:64位,离线安装whl,NVDIA显卡。
下面就尽情享受CUDA的快感吧,cpu运行上述代码需要几个小时,用CUDA加速后几十分钟就完成了。