记录一下在Windows环境下配tensorflow1.13并运行某图像处理算法遇到的各种bug和问题和解决方法

目录

背景

在Windows上配环境

1. 配tensorflow1.13环境

创建新conda环境

安装cuda

安装cudnn

安装tensorflow1.13.1

验证

2. 一些指令

3. 安装各种库

Scipy的报错

库缺失的报错

在linux上跑算法和debug

1. TabError

2. Check failed: stream->parent()->GetConvolveBackwardDataAlgorithms( conv_parameters.ShouldIncludeWinogradNonfusedAlgo(stream->parent()), &algorithms) Aborted (core dumped)

3. could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR 或者 TypeError: Fail to find the dnn implementation

4. 一些指令

MATLAB处理图像

1. 维度报错

2. 大小报错

3. 调整图像的MATLAB代码

背景

之前没有在Windows上用自己电脑的显卡跑过机器学习,因为感觉Windows很麻烦而且问题很多。一直是在Linux下GPU服务器上跑的。

机缘巧合下要去配Windows的tensorflow环境,还是很害怕这种事情的。但是还是去试一试了。

三种方式让tensorflow代码在windows上跑起来:

  1. windows装环境,可能长期来看调试比较麻烦,大部分还是linux服务器比较好弄,短期没问题;
  2. 租阿里云腾讯云gpu服务器然后在上面弄;
  3. 下载一个比如ubuntu虚拟机,安装anaconda然后把之前配过的conda环境拷贝过来。

这篇文章发生的所有事情大概占了两个凌晨和半个下午。

遇到的问题包括但不限于图像的维度问题、灰度问题、tensorflow安装的过程、cuda&cudnn选择、显卡爆满无法计算,等。

在Windows上配环境

1. 配tensorflow1.13环境

安装tensorflow并且去跑机器学习算法最关键的是各个版本的cuda和cudnn要兼容,否则就会寄掉。

可以参考:2021最新:TensorFlow各个GPU版本CUDA和cuDNN对应版本整理(最简洁)_cuda12.1对应的tensorflow-CSDN博客

我这一套配置是这样的:

python3.6.13

tensorflow1.13.1

cuda10.0

cudnn7.6.5(本来想用7.4,因为是经过验证的可适配,但是一下子没有合适的channel提供这个版本,也不想自己手动官网下载)

创建新conda环境

已经安装好了anaconda的环境,直接启动prompt。

conda create -n tensorflow1.13 python=3.6.13
conda activate tensorflow1.13

安装cuda

更新pip

python -m pip install --upgrade pip

装cuda

conda install cudatoolkit=10.0

安装cudnn

本来其实想装7.4的,结果默认的channel里没有。

于是搜一下有啥

conda search cudnn -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/linux-64/

发现cudnn7.6.5也可以适配cuda10.0,就试一试了。

conda install cudnn=7.6.5 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/linux-64/

#或者
conda install cudnn=7.6.5 -i https://pypi.tuna.tsinghua.edu.cn/simple

安装tensorflow1.13.1

pip install tensorflow-gpu==1.13.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

重点是一定要先装cuda和cudnn,否则就要反复卸载tensorflow

卸载代码

pip uninstall tensorflow

验证

import tensorflow as tf
hello = tf.constant(‘Hello, TensorFlow!’)
sess = tf.Session()
print(sess.run(hello))

能打出来Hello,TensorFlow!就说明成功了。

2. 一些指令

conda list - 列出当前虚拟环境的所有包。
conda env list - 列出 conda 管理的所有虚拟环境。
conda info --envs - 列出 conda 管理的所有虚拟环境。

pip freeze - 列出所有pip下载的库

3. 安装各种库

Scipy的报错

pip install了 scipy,但是运行下面这句话

ImportError: cannot import name imsave

解决办法是

pip uninstall scipy
pip install scipy==1.2.1
# 使用镜像
pip install scipy==1.2.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

因为好像最新版本的scipy的imsave函数已经没了。

库缺失的报错

没装就用pip install即可。

在linux上跑算法和debug

1. TabError

TabError:inconsistent use of tabs and spaces in indentation

解决方法:

使用IDE编辑器格式化代码。

比如:在pycharm里打开.py文件,上方工具栏Code->Reformat Code然后保存。

2. Check failed: stream->parent()->GetConvolveBackwardDataAlgorithms( conv_parameters.ShouldIncludeWinogradNonfusedAlgo<T>(stream->parent()), &algorithms) Aborted (core dumped)

解决方法:

rm -r ~/.nv/

3. could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR 或者 TypeError: Fail to find the dnn implementation

可能是显存爆了,

解决方法:

一、

# tf1、tf2均可
import os
os.environ["TF_FORCE_GPU_ALLOW_GROWTH"] = "true"

#或者
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)

二、减少batch size

三、

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.9
session = tf.Session(config=config, ...)

4. 一些指令

nvidia-smi //查看显卡情况

nvidia-smi --gpu-reset

sudo kill -9 MY_PID //强制终止进程

CUDA_VISIBLE_DEVICES=gpu_ids python3 train.py//指定显卡

MATLAB处理图像

1. 维度报错

算法的filter只能接收1维的图像,不能接收3维的。考虑了需求,直接把三维图像保留了第一个维度。

2. 大小报错

ValueError: Dimension 1 in both shapes must be equal, but are 256 and 1024. 

3. 调整图像的MATLAB代码

  • imsize函数直接调整图像大小,把256×256的图像改成了64×64。
  • J=J_rgb(:,:,1)保留了图像第一个维。
for k = 1:20
    imgName1  = ['D:\', num2str(k), '.png'];
    imgName2  = [num2str(k), '.png'];

J_rgb=imread(imgName1)

J=J_rgb(:,:,1)
%imshow(J_gray)
J = imresize(J,[64,64]); 
cd('D:\gray\')
imwrite(J,imgName2)
cd('D:\')
end
  • 22
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值