前几天收到朋友发来的一篇文章,大体是用SVM预测油气井下岩性,作为一枚做过石油攻城狮的大数据IT男,决定尝试下用神经网络搭建机器学习模型,看看预测结果如何。
一、背景
油气田勘探开发过程中,通常会用MWD/LWD仪器或者电缆测井工具深入到几千米以下的油气井内,测得伽马射线、中子密度等等复杂的数据:
Geoscientist根据以上数据,凭借地质学专业知识以及长年累月的工作经验判断井下不同位置的岩性、进而找到油藏。常见岩性如下:
现有12口井的测井数据,这些数据已经被标注了岩性,12口井数据划分:11口井的数据训练集/测试集,用于训练模型;剩下的1口井数据作为预测数据集,来检验训练好的模型的预测准确度。
二、建模与训练
基于TensorFlow构建多层神经网络模型,步骤与部分代码:
导入相关建模依赖包
加载数据集并向量化
将岩性分类数据转化为“one hot”矩阵
创建placeholder
初始化权重和偏执
正向传播
计算损失函数
反向传播及优化
模型训练结果
模型训练结果如上图,损失函数快速收敛测试训练准确率57%,测值准确率51%。到此为止模型就初步训练好了,接下来就是激动人心的岩性预测时刻了。
三、结果预测与优化
1.岩性预测
把第12口井的测井数据输入给训练好的模型,预测岩性准确率结果如下:
模型预测准确率只有47%,结果并不理想,而且似乎存在过拟合。
2. 模型优化
调整神经网络层数、神经元个数、增加L2正则化、调整学习率、迭代次数等参数,最终训练得到模型的预测结果:
预测结果准确度为62%,相比之前有了大幅度提升。
四、几点总结
以上仅仅是初步搭建的模型,通过不断的调参与迭代,还有优化空间
用于训练模型的数据集只有3000多条,数据量太少影响了模型训练效果
对于只有小数据量的case,选择传统的机器学习算法可能优于神经网络
如果有足量、详实的数据,相信机器学习在油气勘探开发行业可以创造价值
Python大法好
最后,感谢@雪哥以及朋友们提供的相关资讯。
参考资料:
https://github.com/seg
Facies classification using machine learning
https://www.coursera.org/
领取专属 10元无门槛券
私享最新 技术干货