引言:
之前用的tensorflow 1.10版本,发现在训练CNN的时候会自动中止,最后定位到加入卷积层就会导致训练崩溃/中止,只用全连接层却能正常训练。重装一天后无果,干脆全部升级使用tensorflow1.15:
改用WIN10+python3.7+tensorflow1.15.0+CUDA10.0(+cudnn7.6.5)+VScode
顺便记录下过程
我的笔记本配置:ryzen7 4800h+RTX2060+16G 3200 DDR4 RAM+1.5T SSD
因为我们要安装的GPU版本的tensorflow, 只要大佬你的显卡和我的一样(无论是笔记本还是台式机)就可以照这个流程安装了
安装目录:
1.python3.7
2.VScode(或者各位大佬熟悉的其他IDE)
3.CUDA10.0
4.CUDNN7.6
5.tensorflow_gpu 1.15.0
1.python3.7
注意tensorflow_gpu 1.15.0对应必须使用python3.7的版本,如果大佬们原来用的其他版本,要先换为py3.7的环境
从win10自带应用市场安装最方便,而且环境自动配好
1.电脑桌面左下角win旁边的搜索框中输入 microsoft store, 打开应用商店后右上角找python搜索
2.从结果中找到python3.7安装
验证:如果大佬第一次装python, 可以粗略用cmd验证一下:cmd窗口输入python -V , 会提示python 版本 3.7.x
进一步验证:可以打开桌面左下角搜索框输入IDLE (python自带的IDE)
print('hello world')+回车(注意使用英文输入法), 没报错则okay
2.IDE:VScode
全称为:Visual studio code . 这个IDE相对pycharm来说更简洁,有巨量的第三方插件,还自带的第三方插件安装平台,免费而且啥计算机语言都支持。很喜欢这个IDE,这里墙裂推荐各位大佬使用。这步不是必要的,各位大佬也可以使用自己熟悉的IDE
微软的官网下载:https://code.visualstudio.com/
安装既能用,在左方插件栏可以找到各种你想要或者不想要的python插件(其中一个叫python的插件必须安装不然编译不了)
3.CUDA10.0
现在说只有基础包,没有补丁,下载基础包安装就好了。
·安装的时候出现选择里边,驱动和pyhsx不是必须的(前提是如果你已经安装了比安装提示更新版本的驱动)
·安装里边VS2015相关的东西不是必须的,如果你只在python环境下做深度学习
·环境是安装的时候自动加好的
注意下载版本是对的,如下图:是CUDA Toolkit 10.0 ; 是CUDA Toolkit 10.0 ; 是CUDA Toolkit 10.0 ; 是CUDA Toolkit 10.0 ; 重要的事情说3遍
验证:
桌面右下角搜索窗口输入cmd
输入nvcc -V
会显示CUDA的信息
4.CUDNN 7.6.5
官方下载链接(需要登陆,如果大佬第一次用,最快的时选择社交账号->微信登陆):https://developer.nvidia.com/rdp/cudnn-archive
选择 CUDNN v7.6.5 for CUDA 10.0 里边的 win10版本
注意:选择 CUDNN v7.6.5 for CUDA 10.0 ; 选择 CUDNN v7.6.5 for CUDA 10.0 ; 选择 CUDNN v7.6.5 for CUDA 10.0 重要的事情说三遍
下载后解压,并把解压后的文件全部复制到CUDA中
我们在上一步装的是CUDA10.0 ,默认路径如下:
C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.0
5.tensorflow_gpu
我们要安装的是tensorflow 1 系列最新(现在来说)的版本1.15, 需求的CUDA10.0 和CUDNN我们已经在上面两步装上了
cmd窗口 , 用pip install 指令安装, 为了加速,这里我们使用国内清华镜像站加速:
完整的指令为:
pip install tensorflow_gpu==1.15.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
所有的依赖包都会顺带安装好:
我在安装过程报了一次错:
ERROR: Could not install packages due to an EnvironmentError: [Errno 2] No such file or directory: 'C:\Users\Denn.Dumbledore\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\tensorflow_estimator\python\estimator\canned\linear_optimizer\python\utils\__pycache__\sharded_mutable_dense_hashtable.cpython-37.pyc'
原因是注册列表长度限制:
找到一个网上的解答https://stackoverflow.com/questions/59388330/tensorflow-installation-problem-on-windows-10
引用h.meng的回答:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlFileSystem@LongPathsEnabled to 1. You can do it by Win+R, and type regedit and you can change the setting above. Hope my answer works for you.
解除注册列表长度限制后,重新按照第5步安装一下
成功会提示succefully installed xxx包 xxx包 xxx包...
到这里所有的安装已经完成了
验证:
为了确保这次安装的tensorflow1.15没有出现之前1.10奇怪的训练问题,我这里用包含一个卷积层、一个池化层、一个全连接层的简单模型测试一下:
1.随便在哪个你喜欢的路径建立一个文件夹,在文件夹里边新建一个python文件随便命名,比如:Demo.py
2.打开VScode
3.把刚刚新建的文件夹用鼠标左键拖到vscode的主窗口中,输入下面这个模型的代码,按F5运行
注意:
·此Demo需要使用mnist数据集测测试:
(这个数据集是第一次运行自动从网络指定路径下载的,如果是各位大佬第一次使用这个数据集,可能会出现下载数据集超时的网络问题,这样子的话可以直接报错链接处下载好数据,再放入keras dataset的路径,具体方法可以百度搜索错误内容)
·这个DEMO是一个3层模型:
·1个卷积层6*5*5
·1个池化层2*2
·1个全连接层120
展开浏览代码:
#Demo import tensorflow as tf import numpy as np #train set (x_train,y_train),(x_test,y_test)=tf.keras.datasets.mnist.load_data() #normalization x_train = tf.keras.utils.normalize(x_train) x_test = tf.keras.utils.normalize(x_test) #one more channel is needed to convolution layer x_train=x_train.reshape(-1,28,28,1) x_test=x_test.reshape(-1,28,28,1) #label:one_hot() y_train = tf.keras.utils.to_categorical(y_train, 10) y_test = tf.keras.utils.to_categorical(y_test, 10)#numpy #model instantiation model= tf.keras.models.Sequential() #convolution 6*5*5 model.add(tf.keras.layers.Conv2D(6,(5,5),activation='relu',input_shape=(28,28,1),padding="same")) #pooling 2*2 model.add(tf.keras.layers.MaxPooling2D(pool_size=(2,2))) #dropout, in case of over fitting model.add(tf.keras.layers.Dropout(0.25)) #flatten model.add(tf.keras.layers.Flatten()) #full connection 120 model.add(tf.keras.layers.Dense(120,activation='relu')) #dropout, in case of over fitting model.add(tf.keras.layers.Dropout(0.5)) #output layer : softmax model.add(tf.keras.layers.Dense(10,activation='softmax')) #set optimizer and loss function model.compile(optimizer='adam',loss=tf.keras.losses.categorical_crossentropy,metrics=['accuracy']) #train result = model.fit(x_train,y_train,epochs=2,validation_data=(x_test,y_test)) print('fitting process finished') #get loss and accuratity val_loss,val_acc=model.evaluate(x_test,y_test) print('loss:',val_loss,'acc:', val_acc) #check with the first 10 data in the test set predictions=model.predict(x_test[:10]) print(predictions) for i in range(10): predicted_number = np.argmax(predictions[i])#get the max one, which is the most probablity of the prediction print( 'prediction:',predicted_number,'groundTrue:',y_test[i])
输出结果: