调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)

人工智能88

记录OpenCV正确安装与调用过程

我的CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.18)
project(test)

set(CMAKE_CXX_STANDARD 11)

set(OpenCV_DIR "G:\\opencv\\mingw64_build")

find_package( OpenCV REQUIRED )

include_directories( ${OpenCV_INCLUDE_DIRS} )

add_executable(test test01.cpp)
target_link_libraries(test ${OpenCV_LIBS})

cpp代码如下:

#include
#include
#include
#include
#include
#include
using namespace std;
using namespace cv;

int main()
{
    Mat images;
    images = imread("1.jpg",0);
    cv::Mat grayim;
    Size dsize = Size(120, 160);
    Mat shrink;
    resize(images, shrink, dsize, 0, 0, INTER_AREA);
    imwrite("after.jpg", shrink);
    cout<<"处理完成!"<<endl;
    return 0;
}

因为我的c++程序采用mingw64编译,所以使用

cmake -G "MinGW Makefiles" ..

mingw32-make

之后,总是出现undefined reference to cv::Mat::Mat()等一系列的undefined reference to XXX
原因是没有正确链接到动态库。或者之前有安装其他版本的opencv

解决办法

重新编译一份OpenCV的源码再使用

调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)
编译过程参考:
https://blog.huihut.com/2018/07/31/CompiledOpenCVWithMinGW64/
https://github.com/huihut/OpenCV-MinGW-Build
第二个链接提供了已经有编译好opencv库,使用这个编译好的库的前提是自己的环境和作者的环境一样。所以还是自己编译吧。否则到最后会出现下图这样的问题:
调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)
这个错误是我下载上面链接提供的opencv库,cmake 、make 都没问题,最后执行可执行文件时,出现的错误。
其实就是版本的问题,后来我自己编译出来的动态库就是libopencv_core460.dll。就没有这样的问题。

最后还要添加环境变量
将bin目录加到系统的环境变量PATH里,方便程序在运行时能够找到对应的动态库。
将bin(G:\opencv\mingw64_build\bin)目录下的所有.dll文件复制到C:\Windows\System32目录下, 否则会出现无法定位程序输入点...于动态链接库...上。如下图:
调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)
最后程序正常运行。

调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)
调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)

在这之前还将/Mingw/bin目录下的libstdc+±6.dll文件放在了C:\Windows\System32目录下。不知道有没有发挥这个作用,也懒得验证了。

ubuntu也是一样的,gcc, g++版本样一样,编译自己写的程序使用的gcc/g++版本要和编译opencv库时使用的gcc/g++版本要一样。

如有错误之处,欢迎指正!

感谢以下博文:
https://stackoverflow.com/questions/69338088/error-while-configuring-cmake-project-running-nmake-failed

https://blog.csdn.net/qq_45662588/article/details/115949733

https://blog.csdn.net/diaolunlaoshi/article/details/117451891

https://blog.huihut.com/2018/07/31/CompiledOpenCVWithMinGW64/

Original: https://blog.csdn.net/qq_38043069/article/details/125321250
Author: qq_3804306
Title: 调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)



相关阅读1

Title: win10/win11系统下安装tensorflow-GPU版本

win10/win11系统下安装tensorflow-GPU版本

使用前注意

GPU版本

GPU版的tensorflow在调用的时候有加速效果,运行会比较快一些,当然,如果你的硬件没有GPU,只能使用CPU版本的tensorflow,就不需要安装CUDA和cuDNN,直接运行

pip install tensorflow

即可。

版本匹配!!!

tensorflowGPU版本对python、cuda和cuDNN的版本之间的匹配要求是非常高的,如果版本不匹配很有可能出现运行报错的情况。建议在使用和安装tensorflow之前查询官方文档,确定版本关系。
版本对应关系见网站:
链接: https://tensorflow.google.cn/install/source_windows.

cuda版本

使用控制面板 ,找到NVIDIA控制面板
调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)
点击左下角《系统信息》,出现如下界面:
调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)
切换至《组件》,呈现如下:
调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)
可以看到,我的电脑CUDA的版本为11.2版本。

; 安装anaconda

Anaconda的安装和CUDA系列安装并无必须的匹配关系,可以自行搜索教程安装。

安装对应版本的CUDAtoolkit

NVIDIA控制面板显示我的CUDA为11.2版本,因此进入到anaconda prompt下(也可以在conda提供的虚拟环境下)采用如下命令安装

conda install cudatoolkit=11.2

意外的是,在我安装的时候(2022.1.29),国内的镜像源还没有出现11.2版本的cuda去安装,这里我便采用了官网去下载cuda安装包。
官网下载cuda: https://developer.nvidia.com/cuda-toolkit-archive.

进入后,找到你想下载的版本,下载好安装包之后,双击,之后根据提示完成安装即可,在这里一定要记下来CUDAtoolkit的安装路径!。

安装对应版本的cuDNN

根据之前的查询结果,cuda11.2版本最好对应cuDNN8.1版本,不幸的是,镜像源依旧没有该版本的cuDNN供下载,否则,你可以使用

conda install cuDNN=8.1

进行安装。

为了解决这一问题,可以去官网进行下载cuDNN包,
cuDNN官网:https://developer.nvidia.com/rdp/cudnn-archive.

这里比较麻烦的一点是:下载cuDNN必须注册NVIDIA账号!

从官网下载的cuDNN实际上只有一个压缩包,解压之后会发现:
调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)

这时候,只需要将bin里面的所有文件复制到CUDAtoolkit的bin路径下,如下图:
调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)
然后将cuDNN下的include里面的所有文件复制到CUDAtoolkit的include的路径下,如下图:
调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)

将cuDNN下的lib里面的所有文件复制到CUDAtoolkit的lib路径下:
调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)

到这里cuDNN就算安装完成了。

; 安装tensorflow

实际上安装tensorflow并不难,只要运行

pip install tensorflow-GPU

会自动安装。

最后,运行

pip list

查看你安装的tensorflow版本号是多少,是否和你的CUDA/cuDNN匹配。

总结

安装tensotflow-GPU最要紧的就是注意你要需要的版本是什么,你安装的版本是什么!
祝顺利!

Original: https://blog.csdn.net/xlxlqqq/article/details/122747988
Author: xlxlqqq
Title: win10/win11系统下安装tensorflow-GPU版本

相关阅读2

Title: win11+RTX3060搭建tensorflow深度学习环境

cuda简介:

CUDA&#x662F;NVIDIA&#x53D1;&#x660E;&#x7684;&#x4E00;&#x79CD;&#x5E76;&#x884C;&#x8BA1;&#x7B97;&#x5E73;&#x53F0;&#x548C;&#x7F16;&#x7A0B;&#x6A21;&#x578B;&#x3002;
&#x5B83;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x5229;&#x7528;&#x56FE;&#x5F62;&#x5904;&#x7406;&#x5668;(GPU)&#x7684;&#x80FD;&#x529B;&#x6765;&#x663E;&#x8457;&#x63D0;&#x9AD8;&#x8BA1;&#x7B97;&#x6027;&#x80FD;&#x3002;

CUDA&#x7684;&#x5F00;&#x53D1;&#x6709;&#x4EE5;&#x4E0B;&#x51E0;&#x4E2A;&#x8BBE;&#x8BA1;&#x76EE;&#x6807;:
1.&#x4E3A;&#x6807;&#x51C6;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;(&#x5982;C)&#x63D0;&#x4F9B;&#x4E00;&#x5C0F;&#x7EC4;&#x6269;&#x5C55;&#xFF0C;&#x4EE5;&#x5B9E;&#x73B0;&#x5E76;&#x884C;&#x7B97;&#x6CD5;&#x7684;&#x76F4;&#x63A5;&#x5B9E;&#x73B0;&#x3002;
2.&#x4F7F;&#x7528;CUDA C/ c++&#xFF0C;&#x7A0B;&#x5E8F;&#x5458;&#x53EF;&#x4EE5;&#x4E13;&#x6CE8;&#x4E8E;&#x7B97;&#x6CD5;&#x7684;&#x5E76;&#x884C;&#x5316;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x628A;&#x65F6;&#x95F4;&#x82B1;&#x5728;&#x7B97;&#x6CD5;&#x7684;&#x5B9E;&#x73B0;&#x4E0A;&#x3002;
3.&#x652F;&#x6301;&#x5F02;&#x6784;&#x8BA1;&#x7B97;&#xFF0C;&#x5E94;&#x7528;&#x540C;&#x65F6;&#x4F7F;&#x7528;CPU&#x548C;GPU&#x3002;
    &#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x7684;&#x4E32;&#x884C;&#x90E8;&#x5206;&#x8FD0;&#x884C;&#x5728;CPU&#x4E0A;&#xFF0C;&#x5E76;&#x884C;&#x90E8;&#x5206;&#x88AB;&#x5378;&#x8F7D;&#x5230;GPU&#x4E0A;&#xFF0C;
    &#x8FD9;&#x6837;CUDA&#x5C31;&#x53EF;&#x4EE5;&#x589E;&#x91CF;&#x5730;&#x5E94;&#x7528;&#x5230;&#x73B0;&#x6709;&#x7684;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x4E0A;&#x3002;
    CPU&#x548C;GPU&#x88AB;&#x89C6;&#x4E3A;&#x5177;&#x6709;&#x5404;&#x81EA;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#x7684;&#x72EC;&#x7ACB;&#x8BBE;&#x5907;&#x3002;
    &#x8FD9;&#x79CD;&#x914D;&#x7F6E;&#x8FD8;&#x5141;&#x8BB8;&#x5728;CPU&#x548C;GPU&#x4E0A;&#x8FDB;&#x884C;&#x540C;&#x6B65;&#x8BA1;&#x7B97;&#xFF0C;&#x800C;&#x65E0;&#x9700;&#x4E89;&#x593A;&#x5185;&#x5B58;&#x8D44;&#x6E90;&#x3002;

cuda&#x652F;&#x6301;&#x7684;GPU&#x6709;&#x6570;&#x767E;&#x4E2A;&#x5185;&#x6838;&#xFF0C;&#x8FD9;&#x4E9B;&#x5185;&#x6838;&#x53EF;&#x4EE5;&#x540C;&#x65F6;&#x8FD0;&#x884C;&#x6570;&#x5343;&#x4E2A;&#x8BA1;&#x7B97;&#x7EBF;&#x7A0B;&#x3002;
&#x8FD9;&#x4E9B;&#x6838;&#x5FC3;&#x62E5;&#x6709;&#x5171;&#x4EAB;&#x7684;&#x8D44;&#x6E90;&#xFF0C;&#x5305;&#x62EC;&#x4E00;&#x4E2A;&#x5BC4;&#x5B58;&#x5668;&#x6587;&#x4EF6;&#x548C;&#x4E00;&#x4E2A;&#x5171;&#x4EAB;&#x7684;&#x5185;&#x5B58;&#x3002;
&#x7247;&#x4E0A;&#x5171;&#x4EAB;&#x5185;&#x5B58;&#x5141;&#x8BB8;&#x8FD0;&#x884C;&#x5728;&#x8FD9;&#x4E9B;&#x6838;&#x5FC3;&#x4E0A;&#x7684;&#x5E76;&#x884C;&#x4EFB;&#x52A1;&#x5171;&#x4EAB;&#x6570;&#x636E;&#xFF0C;&#x800C;&#x65E0;&#x9700;&#x901A;&#x8FC7;&#x7CFB;&#x7EDF;&#x5185;&#x5B58;&#x603B;&#x7EBF;&#x53D1;&#x9001;&#x6570;&#x636E;

安装步骤:双击一直下一步就行

测试:打开cmd,执行命令 nvcc -Vnvidia-sim 查看对应信息

cudnn简介:

1.cuDNN 8 &#x7684;&#x65B0;&#x529F;&#x80FD;
    cuDNN 8 &#x9488;&#x5BF9; A100 GPU &#x8FDB;&#x884C;&#x4E86;&#x4F18;&#x5316;&#xFF0C;&#x53EF;&#x63D0;&#x4F9B;&#x9AD8;&#x8FBE; V100 GPU 5 &#x500D;&#x7684;&#x5F00;&#x7BB1;&#x5373;&#x7528;&#x6027;&#x80FD;&#xFF0C;&#x5E76;&#x4E14;&#x5305;&#x542B;&#x9002;&#x7528;&#x4E8E;&#x5BF9;&#x8BDD;&#x5F0F; AI &#x548C;&#x8BA1;&#x7B97;&#x673A;&#x89C6;&#x89C9;&#x7B49;&#x5E94;&#x7528;&#x7684;&#x65B0;&#x4F18;&#x5316;&#x548C; API&#x3002;
    &#x5B83;&#x5DF2;&#x7ECF;&#x8FC7;&#x91CD;&#x65B0;&#x8BBE;&#x8BA1;&#xFF0C;&#x53EF;&#x5B9E;&#x73B0;&#x6613;&#x7528;&#x6027;&#x548C;&#x5E94;&#x7528;&#x96C6;&#x6210;&#xFF0C;&#x540C;&#x65F6;&#x8FD8;&#x80FD;&#x4E3A;&#x5F00;&#x53D1;&#x8005;&#x63D0;&#x4F9B;&#x66F4;&#x9AD8;&#x7684;&#x7075;&#x6D3B;&#x6027;&#x3002;

2.cuDNN 8 &#x7684;&#x4EAE;&#x70B9;&#x5305;&#x62EC;
    &#x5DF2;&#x9488;&#x5BF9; NVIDIA A100 GPU &#x4E0A;&#x7684;&#x5CF0;&#x503C;&#x6027;&#x80FD;&#x8FDB;&#x884C;&#x8C03;&#x4F18;&#xFF0C;&#x5305;&#x62EC;&#x5168;&#x65B0; TensorFloat-32&#x3001;FP16 &#x548C; FP32
    &#x901A;&#x8FC7;&#x91CD;&#x65B0;&#x8BBE;&#x8BA1;&#x7684;&#x4F4E;&#x7EA7;&#x522B; API&#xFF0C;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x8BBF;&#x95EE; cuDNN &#x5185;&#x6838;&#xFF0C;&#x4ECE;&#x800C;&#x5B9E;&#x73B0;&#x66F4;&#x51FA;&#x8272;&#x7684;&#x63A7;&#x5236;&#x548C;&#x6027;&#x80FD;&#x8C03;&#x4F18;
    &#x5411;&#x540E;&#x517C;&#x5BB9;&#x6027;&#x5C42;&#x4ECD;&#x7136;&#x652F;&#x6301; cuDNN 7.x&#xFF0C;&#x4F7F;&#x5F00;&#x53D1;&#x8005;&#x80FD;&#x591F;&#x987A;&#x5229;&#x8FC7;&#x6E21;&#x5230;&#x65B0;&#x7248; cuDNN 8 API
    &#x9488;&#x5BF9;&#x8BA1;&#x7B97;&#x673A;&#x89C6;&#x89C9;&#x3001;&#x8BED;&#x97F3;&#x548C;&#x8BED;&#x8A00;&#x7406;&#x89E3;&#x7F51;&#x7EDC;&#x4F5C;&#x51FA;&#x4E86;&#x65B0;&#x4F18;&#x5316;
    &#x5DF2;&#x901A;&#x8FC7;&#x65B0; API &#x878D;&#x5408;&#x8FD0;&#x7B97;&#x7B26;&#xFF0C;&#x8FDB;&#x800C;&#x52A0;&#x901F;&#x5377;&#x79EF;&#x795E;&#x7ECF;&#x7F51;&#x7EDC;
    cuDNN 8 &#x73B0;&#x4EE5;&#x516D;&#x4E2A;&#x8F83;&#x5C0F;&#x7684;&#x5E93;&#x7684;&#x5F62;&#x5F0F;&#x63D0;&#x4F9B;&#xFF0C;&#x80FD;&#x591F;&#x66F4;&#x7CBE;&#x7EC6;&#x5730;&#x96C6;&#x6210;&#x5230;&#x5E94;&#x7528;&#x4E2D;&#x3002;&#x5F00;&#x53D1;&#x8005;&#x53EF;&#x4EE5;&#x4E0B;&#x8F7D; cuDNN&#xFF0C;&#x4E5F;&#x53EF;&#x4ECE; NGC &#x4E0A;&#x7684;&#x6846;&#x67B6;&#x5BB9;&#x5668;&#x4E2D;&#x5C06;&#x5176;&#x63D0;&#x53D6;&#x51FA;&#x6765;&#x3002;

3.&#x4E3B;&#x8981;&#x7279;&#x6027;

    3.1 &#x4E3A;&#x6240;&#x6709;&#x5E38;&#x7528;&#x5377;&#x79EF;&#x5B9E;&#x73B0;&#x4E86; Tensor Core &#x52A0;&#x901F;&#xFF0C;&#x5305;&#x62EC; 2D &#x5377;&#x79EF;&#x3001;3D &#x5377;&#x79EF;&#x3001;&#x5206;&#x7EC4;&#x5377;&#x79EF;&#x3001;&#x6DF1;&#x5EA6;&#x53EF;&#x5206;&#x79BB;&#x5377;&#x79EF;&#x4EE5;&#x53CA;&#x5305;&#x542B; NHWC &#x548C; NCHW &#x8F93;&#x5165;&#x53CA;&#x8F93;&#x51FA;&#x7684;&#x6269;&#x5F20;&#x5377;&#x79EF;
    3.2 &#x4E3A;&#x8BF8;&#x591A;&#x8BA1;&#x7B97;&#x673A;&#x89C6;&#x89C9;&#x548C;&#x8BED;&#x97F3;&#x6A21;&#x578B;&#x4F18;&#x5316;&#x4E86;&#x5185;&#x6838;&#xFF0C;&#x5305;&#x62EC; ResNet&#x3001;ResNext&#x3001;SSD&#x3001;MaskRCNN&#x3001;Unet&#x3001;VNet&#x3001;BERT&#x3001;GPT-2&#x3001;Tacotron2 &#x548C; WaveGlow
    3.3 &#x652F;&#x6301; FP32&#x3001;FP16 &#x548C; TF32 &#x6D6E;&#x70B9;&#x683C;&#x5F0F;&#x4EE5;&#x53CA; INT8 &#x548C; UINT8 &#x6574;&#x6570;&#x683C;&#x5F0F;
    3.4 4D &#x5F20;&#x91CF;&#x7684;&#x4EFB;&#x610F;&#x7EF4;&#x6392;&#x5E8F;&#x3001;&#x8DE8;&#x6B65;&#x548C;&#x5B50;&#x533A;&#x57DF;&#x610F;&#x5473;&#x7740;&#x53EF;&#x8F7B;&#x677E;&#x96C6;&#x6210;&#x5230;&#x4EFB;&#x610F;&#x795E;&#x7ECF;&#x7F51;&#x7EDC;&#x5B9E;&#x73B0;&#x4E2D;&#x80FD;&#x4E3A;&#x4EFB;&#x610F; CNN &#x67B6;&#x6784;&#x4E0A;&#x878D;&#x5408;&#x7684;&#x8FD0;&#x7B97;&#x63D0;&#x901F;
    3.5 &#x6570;&#x636E;&#x4E2D;&#x5FC3;&#x91C7;&#x7528; Ampere&#x3001;Turing&#x3001;Volta&#x3001;Pascal&#x3001;Maxwell &#x548C; Kepler GPU &#x67B6;&#x6784;&#x4EE5;&#x53CA;&#x914D;&#x5907;&#x79FB;&#x52A8; GPU &#x7684; Windows &#x548C; Linux &#x652F;&#x6301; cuDNN&#x3002;

安装:解压后将各文件夹下的文件复制到cuda安装路径下的对应文件夹里

# &#x76F8;&#x5173;&#x914D;&#x7F6E;
# conda&#x914D;&#x7F6E;&#x56FD;&#x5185;&#x6E05;&#x534E;&#x6E90;
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
# &#x663E;&#x793A;&#x4E0B;&#x8F7D;&#x6E90;
conda config --set show_channel_urls yes
# &#x67E5;&#x770B;conda&#x7684;&#x914D;&#x7F6E;
conda config --show

# pip&#x914D;&#x7F6E;&#x56FD;&#x5185;&#x6E05;&#x534E;&#x6E90;
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

# &#x521B;&#x5EFA;&#x5E76;&#x6FC0;&#x6D3B;&#x73AF;&#x5883;
conda create tf2_6 python=3.9
conda activate tf2_6

# &#x5B89;&#x88C5;tf-gpu-2.6.2
pip install tensorflow-gpu==2.6.2

import tensorflow as tf

print(tf.__version__) #2.6.2

print(tf.test.is_gpu_available()) # &#x4E3A;True&#x8868;&#x793A;&#x5B89;&#x88C5;&#x6210;&#x529F;

&#x6CE8;&#x610F;&#xFF1A;&#x76EE;&#x524D;&#x6CA1;&#x6709;&#x624B;&#x52A8;&#x914D;&#x7F6E;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#xFF0C;&#x5982;&#x679C;&#x540E;&#x7EED;&#x4EE3;&#x7801;&#x6709;&#x95EE;&#x9898;&#x53EF;&#x80FD;&#x9700;&#x8981;&#x914D;&#x4E00;&#x4E0B;

https://blog.csdn.net/qq_33534428/article/details/125337424?spm=1001.2014.3001.5502

  • https://cloud.tencent.com/developer/article/1914694
  • https://tensorflow.google.cn/install/gpu
  • https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/
  • https://docs.microsoft.com/en-us/windows/ai/directml/gpu-accelerated-training

Original: https://blog.csdn.net/qq_33534428/article/details/122235888
Author: 凌陨心
Title: win11+RTX3060搭建tensorflow深度学习环境

相关阅读3

Title: 深度学习地震勘探入门

深度学习地震勘探入门

简介

我们在论文中提供了一个例子,但是由于数据不容易下载,很多同学没有测试成功,这个帖子中我们将这个例子进行了详细注释,同时提供手把手教学,数据也上传到了百度网盘。如果大家觉得有用,就引用我们的文章吧。

文章引用:S. Yu, J. Ma*, Deep learning for geophysics: current and future trends, Reviews of Geophysics, 2021, 59 (3), e2021RG000742.

数据下载链接:链接:https://pan.baidu.com/s/1pS3ap4IUg2Zi5hcEwZldCw 提取码:zs8k (800M)

Gitee代码链接:https://gitee.com/sevenysw/deep-learning-geophysics

论文中的代码仅用15行(核心代码,不包括可视化)就实现了数据的加载,训练和测试(不包括训练数据的生成),我们选择使用Keras来实现这样紧凑结构的框架。Keras是TensorFlow、Theano等框架的高级封装。Keras的安装有两种简单的方法,第一种是安装tensorflow,通过tf.keras来调用(本代码的情况);第二种是分别安装tensorflow和keras,可以直接通过keras来调用。

测试的环境配置

环境1:

显卡:Nvidia 1080Ti,驱动版本496.13

软件:Windows 10,Cuda 10.0,VSCode 1.62.2,tensorflow_gpu 1.15.0 (或者2.1.0),python3.7

环境2:

参考Issue

显卡:Nvidia 3080Ti,驱动版本470.86

软件:Ubuntu 18.04, Cuda 11.0, tensorflow_gpu 2.6.1, python 3.6.13, conda 4.11.0

1,修改code.py为其它名字

2,pip uninstall keras

pip install keras==2.6.0

该程序对不同环境的容忍度比较大,所以不必完全一样。

环境配置步骤

1,python环境管理软件

安装anaconda:https://www.anaconda.com/products/individual

2,找到所需cuda安装,比如10.0:

https://developer.nvidia.com/cuda-10.0-download-archive

3,创建虚拟环境

conda可以配置源,加速下载包,https://mirror.tuna.tsinghua.edu.cn/help/anaconda/

在命令行cmd(ubuntu中为terminal)中运行

conda create -n tfv2 python=3.7

开启虚拟环境

conda activate tfv2

4,安装tensorflow

在安装之前可以切换源:https://blog.csdn.net/afeiqiang/article/details/108257584

加速安装,而且更稳定

Windows用户:c:\Users\你的用户名\pip\pip.ini,没有就新建一个,

Linux用户:修改 ~/.pip/pip.conf 文件,没有就新建一个,写入以下内容:

[global]
index-url = http://mirrors.aliyun.com/pypi/simple/ *# &#x6839;&#x636E;&#x9700;&#x8981;&#x9009;&#x6E05;&#x534E;&#x6E90;&#x6216;&#x8005;&#x963F;&#x91CC;&#x6E90;*
[install]
trusted-host=mirrors.aliyun.com

安装依赖包numpy, matplotlib:

pip install numpy matplotlib

然后开始安装:

pip install --upgrade tensorflow_gpu

如若要指定版本,则可以用

pip install --upgrade tensorflow_gpu==2.1.0

5,下载代码

git clone https://gitee.com/sevenysw/deep-learning-geophysics.git

修改code.py 中noise_dataset.h5的绝对目录位置

运行代码:

python code.py

不出意外,代码就可以正常运行了,整个过程在1080ti下大概要25分钟(共50次迭代)。

代码说明


import h5py
import matplotlib.pyplot as plt
from tensorflow.keras.layers import Input,Conv2D,BatchNormalization,ReLU,Subtract
from tensorflow.keras.models import Model

ftrain = h5py.File(r'E:\Datasets\noise_dataset.h5','r')

X, Y=ftrain['/X'][()],ftrain['/Y'][()]

for i in range(4):
    plt.subplot(2,4,i+1);plt.imshow(X[i,:,:,0],vmin=-2,vmax=2)
    plt.subplot(2,4,i+5);plt.imshow(Y[i,:,:,0],vmin=-2,vmax=2)
plt.show()

input = Input(shape=(None,None,1))
x=Conv2D(64,3,padding='same',activation='relu')(input)
for i in range(15):
    x= Conv2D(64,3,padding='same',use_bias = False)(x)
    x= ReLU()(BatchNormalization(axis=3,momentum=0.0,epsilon=0.0001)(x))
x= Conv2D(1,3,padding='same',use_bias = False)(x)

model = Model(inputs=input,outputs=Subtract()([input,x]))

model.compile(optimizer="rmsprop",loss="mean_squared_error")

model.fit(X[:-1000],Y[:-1000],batch_size=32,epochs=50,shuffle=True)

Y_ = model.predict(X[-1000:])

for i in range(4):
    plt.subplot(2,4,i+1);plt.imshow(X[-1000+i,:,:,0],vmin=-2,vmax=2)
    plt.subplot(2,4,i+5);plt.imshow(Y_[i,:,:,0],vmin=-2,vmax=2)
plt.show()

训练数据如下:

调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)

预测结果如下:

调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)

训练数据

训练数据的生成基本思路就是利用Matlab的h5write函数将数组转换成h5格式,需要注意的是数组维度的排序,Matlab和python是有一些区别的。

另外我们将数据生成和网络训练都写到一起,使用pytorch,在https://github.com/sevenysw/python_segy

Original: https://blog.csdn.net/u014347448/article/details/122093249
Author: 四尾
Title: 深度学习地震勘探入门