最近刚开始学习深度学习,参考了一篇深度学习的入门文章,原文连接:https://medium.freecodecamp.org/everything-you-need-to-know-to-master-convolutional-neural-networks-ef98ca3c7655。python
文章内容就是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,通过一番折腾,找到了解决办法,以下:框架
一、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:url
二、NVDIA官网(https://developer.nvidia.com/cuda-downloads)下载CUDA,首先应确认本身的电脑是否有NVDIA显卡,并肯定是否支持CUDA,直接一路下一步安装便可,这里就不放图片了。spa
三、jupyter notebook中运行上述代码,若 print(torch.cuda.is_available()) 为True则证实CUDA调用成功,另外注意 bs 数值要根据本身的显存大小来设置。操作系统
note:笔记本通常都是双显卡(一个位集成显卡,一个为NVDIA独立显卡),作桌面模式win10能够自动切换使用独立显卡调用CUDA,并不用特地设置NVDIA控制面板,以前走过不少弯路,觉得笔记本上无法用CUDA加速,后来发现就是版本或者安装的问题。
经过这样一番设置,应该就能够调用CUDA了,关键点有几个:64位,离线安装whl,NVDIA显卡。
下面就尽情享受CUDA的快感吧,cpu运行上述代码须要几个小时,用CUDA加速后几十分钟就完成了。