用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案

 更新时间:2021年03月03日 09:07:28   作者:wander_ing  
这篇文章主要介绍了用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

训练的时候当然用gpu,速度快呀。

我想用cpu版的tensorflow跑一下,结果报错,这个错误不太容易看懂。

大概意思是没找到一些节点。

后来发现原因,用gpu和cpu保存的pb模型不太一样,但是checkpoints文件是通用的。

使用tensorflow-cpu再把checkpoints文件重新转换一下pb文件就可以了。

完美解决!

补充:tensflow-gpu版的无数坑坑坑!(tf坑大总结)

自己的小本本,之前预装有的pycharm+win10+anaconda3+python3的环境

2019/3/24重新安装发现:目前CUDA10.1安装不了tensorflow1.13,把CUDA改为10.0即可(记得对应的cudann呀)

如果刚入坑,建议先用tensorflw学会先跑几个demo,等什么时候接受不了cpu这乌龟般的速度之时,就要开始尝试让gpu来跑了。

cpu跑tensorflow只需要在anaconda3下载。

安装cpu跑的tensorflow:

我的小本本目前已经是gpu版本,cpu版本下红圈里那个版本就好了!

安装好了后直接在python命令中输入

import tensorflow as tf

如果不报错说明调用成功。

查看目前tensorflow调用的是cpu还是gpu运行:

import tensorflow as tf
import numpy as np
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print(sess.run(c))

然后把这段代码粘贴到编译器中运行,

看一下运行的结果中,调用运行的是什么

看给出的是gpu还是cpu就能判断目前运行的是哪一个了

安装gpu版本的tensorflow:

首先第一步要确定你的显卡是否为N卡,

然后上https://developer.nvidia.com/cuda-gpus去看看你的显卡是否被NVDIA允许跑机器学习

对于CUDA与cudann的安装:

需要到nvdia下载CUDA与cudann,这里最重要的是注意CUDA与cudann与tensorflow三者的搭配,

注意版本的搭配!!!

注意版本的搭配!!!

注意版本的搭配!!!

tensorflow在1.5版本以后才支持9.0以上的CUDA,所以如果CUDA版本过高,会造成找不到文件的错误。

在官网也可以看到CUDA搭配的cudann

在安装完了cudann时,需要把其三个文件复制到CUDA的目录下,并且添加3个新的path:

3个path,

当使用gpu版的tf时,就不再需要安装原来版本的tf,卸载了就好,安装tf-gpu版,

判断自己是否有安装tf包,对于pycharm用户,可以在setting那看看是否安装了tf-gpu

我使用的环境为:tf1.2+CUDA8.0+cudann5.1

当全部正确安装时

import tensorflow as tf 仍然出错

cudnn64_6.dll问题

关于导入TensorFlow找不到cudnn64_6.dll,其实下载的的是cudnn64_7.dll(版本不符合),把其修改过来就行了。

目录是在:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin下

对于不断尝试扔失败运行GPU版本,可以把tf先删除了重新下

import tensorflow as tf
print(tf.__version__)

查询tensorflow安装路径为:

print(tf.__path__)

成功用GPU运行但运行自己的代码仍然报错:

如果报错原因是这个

ResourceExhaustedError (see above for traceback): OOM when allocating tensor with shape[10000,28,28,32]

最后关于这个报错是因为GPU的显存不够,此时你可以看看你的代码,是训练集加载过多还是测试集加载过多,将它一次只加载一部分即可。

对于训练集banch_xs,banch_ys = mnist.train.next_batch(1000) 改为

banch_xs,banch_ys = mnist.train.next_batch(100)即可,

而测试集呢print(compute_accuracy(mnist.test.images[:5000], mnist.test.labels[:5000])) 改为

print(compute_accuracy(mnist.test.images, mnist.test.labels))即可

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • Python包资源下载路径报404解决方案

    Python包资源下载路径报404解决方案

    这篇文章主要介绍了Python包资源下载路径报404解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • openCV入门学习基础教程第一篇

    openCV入门学习基础教程第一篇

    OpenCV是计算机视觉领域一个图像和视频处理库,用于各种图像和视频分析,如面部识别和检测,车牌阅读,照片编辑,高级机器人视觉,光学字符识别等等,下面这篇文章主要给大家介绍了关于openCV入门学习基础教程第一篇的相关资料,需要的朋友可以参考下
    2022-11-11
  • python将图片转为矢量图的方法步骤

    python将图片转为矢量图的方法步骤

    这篇文章主要介绍了python将图片转为矢量图的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Go语言基于Socket编写服务器端与客户端通信的实例

    Go语言基于Socket编写服务器端与客户端通信的实例

    这篇文章主要介绍了Go语言基于Socket编写服务器端与客户端通信的实例,包括实现基于自定义通讯协议的Socket通信,需要的朋友可以参考下
    2016-02-02
  • Python中Enum使用的几点注意事项

    Python中Enum使用的几点注意事项

    Python中的枚举是作为一个类存在的,这是与其他语言的一个较为鲜明的特征,下面这篇文章主要给大家介绍了关于Python中Enum使用的几点注意事项,需要的朋友可以参考下
    2022-02-02
  • Python functools冻结参数小技巧实现代码简洁优化

    Python functools冻结参数小技巧实现代码简洁优化

    这篇文章主要为大家介绍了Python functools冻结参数小技巧实现代码简洁优化示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • 教你用python从日期中获取年、月、日和星期等30种信息

    教你用python从日期中获取年、月、日和星期等30种信息

    在日常的工作,经常需要获取时间等相关信息,下面这篇文章主要给大家介绍了关于如何用python从日期中获取年、月、日和星期等30种信息的相关资料,需要的朋友可以参考下
    2022-07-07
  • python防止随意修改类属性的实现方法

    python防止随意修改类属性的实现方法

    这篇文章主要介绍了python防止随意修改类属性的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 对Python获取屏幕截图的4种方法详解

    对Python获取屏幕截图的4种方法详解

    今天小编就为大家分享一篇对Python获取屏幕截图的4种方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python代码实现列表分组计数

    Python代码实现列表分组计数

    这篇文章主要介绍了Python代码实现列表分组计数,利用Python代码实现了使用分组函数对列表进行分组,并计算每组的元素个数的功能,需要的朋友可以参考一下
    2021-11-11

最新评论