用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
作者:wander_ing 发布时间:2021-02-11 08:06:31
训练的时候当然用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))
即可
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/wander_ing/article/details/107120534


猜你喜欢
- 前言利用Python+graphics模块实现AI五子棋。让我们愉快地开始吧~~~效果展示源码import sysimport cfgfro
- 401状态码的含义和处理401状态码的含义axios向服务器端发送请求时,有两种情况会出现401状态码(unauthorized未授权):1
- PHP扩展开发我准备在此系列博文中总结我有关PHP扩展开发的学习和感悟,力图简单清晰地描述在Linux系统下开发一个PHP扩展应该具备的最基
- 使用索引优化索引是数据库优化最常用也是最重要的手段之一,通过索引通常可以帮助用户解决大多数的MySQL的性能优化问题。数据准备use wor
- 本文实例讲述了Python实现计算字符串中出现次数最多的字符。分享给大家供大家参考,具体如下:1. 看了网上挺多写的方法都没达到我所需要的效
- // 1.采用计算属性来获取$store中的值computed: { listenstage() {
- 如下所示:import timedef date_compare(item1, item2): t1 = time.mktime(time.
- "神经衰弱"翻牌游戏考察玩家的记忆力,游戏的开头会短时间给你看一小部分牌的图案,当玩家翻开两张相同图案牌的时候,会消除,
- A.动态页面第一步:创建转向控制页面,创建网站默认的首页文件(通常为"index.asp"或"default.
- 一、如何将列表数据写入文件 ⾸先,我们来看看下⾯这段代码,并思考:这段代码有没有问题,如果有问题的话,要怎么改?li = [
- 一般情况下会有几种情况需要你把数据库设为只读: 1. Insert,Update,Delete 触发器 2. Check 约束 和 Dele
- 安装pip install websocket-client先来看一下,长连接调用方式:ws = websocket.WebSocketAp
- MySQL查询交集、并集、差集背景和使用的数据样本该章节学些主要涉及到Datawhale SQL 组队学习任务;本次使用的数据,由Dataw
- Python项目打包python本身是一种脚本语音,发布的话,直接发布源代码就可以了,但是,可能有些公司并不想发布源代码,那么,就涉及到打包
- Python 中要将单个项目列表转换为整数:访问索引 0 处的列表。将结果分配给变量。该变量将存储列表中的唯一项目。my_list = [2
- 引言最近在学习python,先说一下我学Python得原因,一个是因为它足够好用,完成同样的功能,代码量会比其他语言少很多,有大量的丰富的库
- 举例如下,一个服务器端的form 代码自动被解释成客户端代码:服务器端代码: &l
- 前言在Python爬虫中,使用requests发送请求,访问指定网站,是常见的做法。一般是发送GET请求或者POST请求,对于GET请求没有
- 接触python已有一段时间了,下面针对python基础知识的使用做一完整梳理:1)避免‘\n'等特殊字符的两种方式:a)利用转义字
- 一、交换变量x = 6y = 5x, y = y, xprint x>>> 5print y>>> 6二