iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >基于神经网络的3D地质模型
  • 365
分享到

基于神经网络的3D地质模型

神经网络3d人工智能 2023-08-30 16:08:00 365人浏览 安东尼
摘要

地球科学家需要对地质环境进行最佳估计才能进行模拟或评估。 除了地质背景之外,建立地质模型还需要一整套数学方法,如贝叶斯网络、协同克里金法、支持向量机、神经网络、随机模型,以在钻井日志或地球物理信息确实稀缺或不确定时定义哪些可能是岩石类型/属

地球科学家需要对地质环境进行最佳估计才能进行模拟或评估。 除了地质背景之外,建立地质模型还需要一整套数学方法,如贝叶斯网络、协同克里金法、支持向量机、神经网络、随机模型,以在钻井日志或地球物理信息确实稀缺或不确定时定义哪些可能是岩石类型/属性。

在这里插入图片描述

推荐:用 NSDT编辑器 快速搭建可编程3D场景

我们已经用 python 和最新强大的库(Scikit Learn)完成了一个教程,以根据宝藏谷(美国爱达荷州)钻探的岩性创建地质模型。 本教程生成钻井岩性的点云,并针对神经网络进行转换和缩放。 所选的神经网络分类器是多层感知器分类器,在 Scikit Learn 库上实现为 sklearn.neural_network.MLPClassifier。 对神经网络的混淆进行分析。 本教程还包括 Paraview 中 Vtk 格式的井岩性和插值地质学的地理参考 3D 可视化

首先导入必要的库:

#import required libraries%matplotlib inlineimport osimport numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport pyvista as pvimport vtk

1、井位置和岩性

数据来自来自公开发表论文,选定的单位为:

  • 粗粒河流和冲积矿床
  • 上新世-更新世和中新世玄武岩
  • 细粒湖相沉积
  • 流纹岩和花岗岩基岩
wellLoc = pd.read_csv('../inputData/TV-HFM_Wells_1Location_Wgs11N.csv',index_col=0)wellLoc.head()
东向北向高度ft东向UTM北向UTM高程m
A. Isaac2333140.951372225.653204.0575546.6288344.820355e+06976.57920
A. Woodbridge2321747.001360096.952967.2564600.3665824.807827e+06904.40256
A.D. Watkins2315440.161342141.863168.3558944.8434044.789664e+06965.69784
A.L. Clark; 12276526.301364860.742279.1519259.0061594.810959e+06694.66968
A.L. Clark; 22342620.871362980.463848.6585351.1502704.811460e+061173.05328

2、岩性点云

litoPoints = []for index, values in wellLito.iterrows():    wellX, wellY, wellZ = wellLoc.loc[values.Bore][["EastingUTM","NorthingUTM","Elevation_m"]]    wellXY = [wellX, wellY]    litoPoints.append(wellXY + [values.topLitoElev_m,values.hydrogeoCode])    litoPoints.append(wellXY + [values.botLitoElev_m,values.hydrogeoCode])    litoLength = values.topLitoElev_m - values.botLitoElev_m    if litoLength < 1:        midPoint = wellXY + [values.topLitoElev_m - litoLength/2,values.hydrogeoCode]    else:        npoints = int(litoLength)        for point in range(1,npoints+1):            disPoint = wellXY + [values.topLitoElev_m - litoLength*point/(npoints+1),values.hydrogeoCode]            litoPoints.append(disPoint)litoNp=np.array(litoPoints)np.save('../outputData/litoNp',litoNp)litoNp[:5]array([[5.48261389e+05, 4.83802316e+06, 7.70442960e+02, 1.00000000e+00],       [5.48261389e+05, 4.83802316e+06, 7.70138160e+02, 1.00000000e+00],       [5.48261389e+05, 4.83802316e+06, 7.70138160e+02, 3.00000000e+00],       [5.48261389e+05, 4.83802316e+06, 7.68614160e+02, 3.00000000e+00],       [5.48261389e+05, 4.83802316e+06, 7.69376160e+02, 3.00000000e+00]])

3、坐标变换和神经网络分类器设置

from sklearn.neural_network import MLPClassifierfrom sklearn.metrics import confusion_matrixfrom sklearn import preprocessinglitoX, litoY, litoZ = litoNp[:,0], litoNp[:,1], litoNp[:,2]litoMean = litoNp[:,:3].mean(axis=0)litoTrans = litoNp[:,:3]-litoMeanlitoTrans[:5]#setting up scalerscaler = preprocessing.StandardScaler().fit(litoTrans)litoScale = scaler.transfORM(litoTrans)#check scalerprint(litoScale.mean(axis=0))print(litoScale.std(axis=0))[ 2.85924590e-14 -1.10313442e-15  3.89483608e-20][1. 1. 1.]#run classifierX = litoScaleY = litoNp[:,3]clf = MLPClassifier(activation='tanh',solver='lbfgs',hidden_layer_sizes=(15,15,15), max_iter=2000)clf.fit(X,Y)C:\Users\Gida\Anaconda3\lib\site-packages\sklearn\neural_network\_multilayer_perceptron.py:470: ConvergenceWarning: lbfgs failed to converge (status=1):STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.Increase the number of iterations (max_iter) or scale the data as shown in:    https://scikit-learn.org/stable/modules/preprocessing.html  self.n_iter_ = _check_optimize_result("lbfgs", opt_res, self.max_iter)MLPClassifier(activation='tanh', alpha=0.0001, batch_size='auto', beta_1=0.9,              beta_2=0.999, early_stopping=False, epsilon=1e-08,              hidden_layer_sizes=(15, 15, 15), learning_rate='constant',              learning_rate_init=0.001, max_fun=15000, max_iter=2000,              momentum=0.9, n_iter_no_change=10, nesterovs_momentum=True,              power_t=0.5, random_state=None, shuffle=True, solver='lbfgs',              tol=0.0001, validation_fraction=0.1, verbose=False,              warm_start=False)

4、混淆矩阵的确定

numberSamples = litoNp.shape[0]expected=litoNp[:,3]predicted = []for i in range(numberSamples):    predicted.append(clf.predict([litoScale[i]]))results = confusion_matrix(expected,predicted)print(results)

输出如下:

[[1370  128  377    0] [  67 2176   10    0] [ 274   33 1114    0] [   1    0    0  151]]

5、研究领域和输出网格细化

xMin = 540000xMax = 560000yMin = 4820000yMax = 4840000zMax = int(wellLito.topLitoElev_m.max())zMin = zMax - 300cellH = 200cellV = 20

6、岩性基质的测定

vertexCols = np.arange(xMin,xMax+1,cellH)vertexRows = np.arange(yMax,yMin-1,-cellH)vertexLays = np.arange(zMax,zMin-1,-cellV)cellCols = (vertexCols[1:]+vertexCols[:-1])/2cellRows = (vertexRows[1:]+vertexRows[:-1])/2 cellLays = (vertexLays[1:]+vertexLays[:-1])/2nCols = cellCols.shape[0]nRows = cellCols.shape[0]nLays = cellLays.shape[0]i=0litoMatrix=np.zeros([nLays,nRows,nCols])for lay in range(nLays):    for row in range(nRows):        for col in range(nCols):            cellXYZ = [cellCols[col],cellRows[row],cellLays[lay]]            cellTrans = cellXYZ - litoMean            cellNorm = scaler.transform([cellTrans])            litoMatrix[lay,row,col] = clf.predict(cellNorm)            if i%30000==0:                print("Processing %s cells"%i)                print(cellTrans)                print(cellNorm)                print(litoMatrix[lay,row,col])            i+=1Processing 0 cells[-8553.96427073  8028.26104284   356.7050941 ][[-1.41791371  2.42904321  1.11476509]]3.0Processing 30000 cells[-8553.96427073  8028.26104284   296.7050941 ][[-1.41791371  2.42904321  0.92725472]]3.0Processing 60000 cells[-8553.96427073  8028.26104284   236.7050941 ][[-1.41791371  2.42904321  0.73974434]]3.0Processing 90000 cells[-8553.96427073  8028.26104284   176.7050941 ][[-1.41791371  2.42904321  0.55223397]]2.0Processing 120000 cells[-8553.96427073  8028.26104284   116.7050941 ][[-1.41791371  2.42904321  0.3647236 ]]2.0plt.imshow(litoMatrix[0])

在这里插入图片描述

plt.imshow(litoMatrix[:,60])

在这里插入图片描述

np.save('../outputData/litoMatrix',litoMatrix)#matrix modification for Vtk representationlitoMatrixMod = litoMatrix[:,:,::-1]np.save('../outputData/litoMatrixMod',litoMatrixMod)plt.imshow(litoMatrixMod[0])

在这里插入图片描述

7、规则网格VTK的生成

import pyvistaimport vtk# Create empty gridgrid = pyvista.RectilinearGrid()# Initialize from a vtk.vtkRectilinearGrid objectvtkgrid = vtk.vtkRectilinearGrid()grid = pyvista.RectilinearGrid(vtkgrid)grid = pyvista.RectilinearGrid(vertexCols,vertexRows,vertexLays)litoFlat = list(litoMatrixMod.flatten(order="K"))[::-1]grid.cell_arrays["hydrogeoCode"] = np.array(litoFlat)grid.save('../outputData/hydrogeologicalUnit.vtk')

8、输入数据

你可以从这个链接下载本教程的输入数据。

9、数据源

Bartolino, J.R.,2019,爱达荷州和俄勒冈州宝藏谷及周边地区的水文地质框架:美国地质调查局科学调查报告 2019-5138,第 31 页。 链接
Bartolino, J.R.,2020,爱达荷州和俄勒冈州宝藏谷及周边地区的水文地质框架:美国地质调查局数据发布。链接


原文链接:3D地质神经网络模型 — BimAnt

来源地址:https://blog.csdn.net/shebao3333/article/details/132509764

--结束END--

本文标题: 基于神经网络的3D地质模型

本文链接: https://www.lsjlt.com/news/383229.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于神经网络的3D地质模型
    地球科学家需要对地质环境进行最佳估计才能进行模拟或评估。 除了地质背景之外,建立地质模型还需要一整套数学方法,如贝叶斯网络、协同克里金法、支持向量机、神经网络、随机模型,以在钻井日志或地球物理信息确实稀缺或不确定时定义哪些可能是岩石类型/属...
    99+
    2023-08-30
    神经网络 3d 人工智能
  • 基于Python3 神经网络的实现
    本次学习是Denny Britz(作者)的Python2神经网络项目修改为基于Python3实现的神经网络(本篇博文代码完整)。重在理解原理和实现方法,部分翻译不够准确,可查看Python2版的原文。原文英文地址(基于Python2)安装P...
    99+
    2023-01-31
    神经网络
  • 多层神经网络 —— Sequential模型
    前一节介绍说, 这里主要介绍 tf.keras 中的 Sequential 模型。 Sequential 是 Keras 中的一种神经网络框架,可以被认为是一个容器,其中封装了神经网络的结构。Seq...
    99+
    2023-09-02
    tensorflow python
  • 基于Pytorch的神经网络之Regression的实现
    目录1.引言2.神经网络搭建2.1准备工作2.2搭建网络2.3训练网络3.效果4.完整代码1.引言 我们之前已经介绍了神经网络的基本知识,神经网络的主要作用就是预测与分类,现在让我们...
    99+
    2024-04-02
  • 用PyTorch构建基于卷积神经网络的手写数字识别模型
    本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052 目录 一、MINST数据集介绍与分析 二、卷积神经网络 三、基于卷积神经网络的手写数字识别 一、MINST数据集...
    99+
    2023-09-06
    python 机器学习 人工智能 深度学习
  • python神经网络Keras GhostNet模型的实现
    目录什么是GhostNet模型GhostNet模型的实现思路1、Ghost Module2、Ghost Bottlenecks3、Ghostnet的构建GhostNet的代码构建1、...
    99+
    2024-04-02
  • 基于Pytorch的神经网络如何实现Regression
    这篇文章将为大家详细讲解有关基于Pytorch的神经网络如何实现Regression,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.引言我们之前已经介绍了神经网络的基本知识,神经网络的主要作用就是预测与...
    99+
    2023-06-29
  • python神经网络MobileNetV2模型的复现详解
    目录什么是MobileNetV2模型MobileNetV2网络部分实现代码图片预测什么是MobileNetV2模型 MobileNet它哥MobileNetV2也是很不错的呢 Mob...
    99+
    2024-04-02
  • python神经网络Xception模型复现详解
    目录什么是Xception模型Xception网络部分实现代码图片预测Xception是继Inception后提出的对Inception v3的另一种改进,学一学总是好的 什么是Xc...
    99+
    2024-04-02
  • python神经网络ShuffleNetV2模型复现详解
    目录什么是ShuffleNetV2ShuffleNetV21、所用模块2、网络整体结构网络实现代码什么是ShuffleNetV2 据说ShuffleNetV2比Mobilenet还要...
    99+
    2024-04-02
  • python神经网络Densenet模型复现详解
    目录什么是DensenetDensenet1、Densenet的整体结构2、DenseBlock3、Transition Layer网络实现代码什么是Densenet 据说Dense...
    99+
    2024-04-02
  • python神经网络ResNet50模型的复现详解
    目录什么是残差网络什么是ResNet50模型ResNet50网络部分实现代码图片预测什么是残差网络 最近看yolo3里面讲到了残差网络,对这个网络结构很感兴趣,于是了解到这个网络结构...
    99+
    2024-04-02
  • python神经网络MobileNet模型的复现详解
    目录什么是MobileNet模型MobileNet网络部分实现代码图片预测什么是MobileNet模型 MobileNet是一种轻量级网络,相比于其它结构网络,它不一定是最准的,但是...
    99+
    2024-04-02
  • python神经网络InceptionV3模型复现详解
    目录学习前言什么是InceptionV3模型InceptionV3网络部分实现代码图片预测学习前言 Inception系列的结构和其它的前向神经网络的结构不太一样,每一层的内容不是直...
    99+
    2024-04-02
  • 基于Tensorflow搭建一个神经网络的实现
    一、Tensorlow结构 import tensorflow as tf import numpy as np #创建数据 x_data = np.random.rand(...
    99+
    2024-04-02
  • PyTorch+PyG实现图神经网络经典模型目录
    前言 大家好,我是阿光。 本专栏整理了《图神经网络代码实战》,内包含了不同图神经网络的相关代码实现(PyG以及自实现),理论与实践相结合,如GCN、GAT、GraphSAGE等经典图网络,每一个代码...
    99+
    2023-08-31
    pytorch 神经网络 python 人工智能 深度学习
  • 基于Tensorflow如何搭建一个神经网络
    小编给大家分享一下基于Tensorflow如何搭建一个神经网络,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、Tensorlow结构import te...
    99+
    2023-06-15
  • python神经网络MobileNetV3 large模型的复现详解
    目录什么是MobileNetV3MobileNetV3(large)的网络结构1、MobileNetV3(large)的整体结构2、MobileNetV3特有的bneck结构网络实现...
    99+
    2024-04-02
  • python神经网络Inception ResnetV2模型复现详解
    目录什么是Inception ResnetV2Inception-ResNetV2的网络结构1、Stem的结构:2、Inception-resnet-A的结构:3、Inception...
    99+
    2024-04-02
  • 如何在Gluon中创建神经网络模型
    在Gluon中创建神经网络模型可以通过定义一个继承自gluon.Block的子类来实现。以下是一个简单的例子: from mxnet...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作