做过几年地质大数据的人大概都有过这种体验:手里攥着一堆地质图、航磁、重力、水系沉积物测量和遥感蚀变异常图层,想圈几个找矿靶区,结果图层越叠越多,人眼已经分不清哪些组合真正有意义。卷积神经网络,也就是大家常说的CNN,恰好能接住这个活——它本身就是为图像设计的,而地质、物探、化探、遥感这些图层叠在一起,本质上就是一张多波段"图像"。这篇内容讲的是怎么把CNN模型落地到找矿预测(mineral prospectivity mapping),从数据栅格化、样本构造、网络结构设计,一路走到预测热力图转靶区分级,尽量写成能直接抄作业的程度。适合两类人看:一类是懂地质但对深度学习只停留在听说阶段的一线勘探人员,另一类是懂模型但没碰过地质数据的算法工程师。中间我会重点讲清楚几个容易翻车的地方,比如空间自相关导致虚高AUC、正负样本怎么选、滑窗推理怎么拼接不出现接缝。
1. 为什么找矿预测会用到CNN:从地质图到特征图的那一步
1.1 传统找矿预测方法的瓶颈到底卡在哪
早些年做找矿预测,主流是证据权重法、信息量法、特征分析法这一套。流程大致是:先圈出已知矿床点,统计每个证据图层在矿点附近的分布特征,算权重,最后加权叠加得到成矿有利度图。这套方法在数据少、区域小的时候很好用,逻辑也清楚,评审专家一眼能看懂权重表。
但它的软肋也很明显。第一是证据图层之间的关系必须靠人手工设定,比如"断裂缓冲区200米内权重高"这种规则,需要地质人员凭经验给定,换一个成矿区带规则就得重来。第二是它默认各图层线性叠加,可现实里矿床的形成是"构造+岩性+蚀变"的耦合结果,是非线性的、有组合效应的。第三,也是最要命的,它丢掉了空间纹理信息——一个环形构造的形态、磁异常的走向梯度、蚀变异常的分带特征,这些在栅格数据里就是像素邻域的模式,传统方法基本用不上,只能靠人看图。
我印象很深的一次,某个斑岩型铜矿带,用证据权重法圈出来的高值区是一个沿着断裂带拉长的窄条,但实际矿化中心是一个围绕岩体分布的环状区域。问题不在权重给错,而在于方法本身只做了"逐像元独立打分",没考虑像元周围的形态。
1.2 CNN到底替我们干了什么,用一个类比说透
把找矿预测的数据想象成一张"多波段卫星照片":第1个波段是地层岩性编码,第2个是距断裂距离,第3个是磁异常强度,第4个到第8个是铜铅锌银钼几种元素的化探异常,第9个是遥感羟基蚀变指数……每个像元位置上,你有一串数值。
一位干了三十年的老地质队员看这张图,他不是盯着单个像元看,而是扫视一片区域:这里磁异常圆圆的,外面有一圈铁染蚀变,再外面有化探异常晕,边上还有几条断裂交汇——"这地方有戏"。CNN做的就是这个动作。卷积核在一张图上滑动,每次只看一个小窗口(比如5×5、11×11),把窗口内的数值组合起来响应成一个特征值。层层堆叠之后,浅层卷积学到的是"边缘""梯度"这类低级纹理,深层卷积学到的是"环形形态""异常套合关系"这种高级组合模式。最后接一个分类头,输出"这里成矿概率0.87"。
所以CNN的核心价值有三点:一是自动提取空间纹理,把老地质队员的"看图直觉"变成了可学习的参数;二是能拟合非线性组合,构造、岩性、蚀变之间的交互效应由网络自己去找;三是它天然处理栅格数据,跟GIS导出的GeoTIFF格式无缝对接,不需要额外的特征工程。
1.3 为什么这里不用全连接前馈网络
这个问题几乎每次做技术汇报都会被问到。假设我们的研究区栅格是1000×1000,取一个17×17的滑动窗口,10个波段,那输入维度就是17×17×10=2890维。如果接一层256个神经元的全连接层,参数量是2890×256≈74万——单层就这么多。再往深堆,参数量会指数级膨胀,几千万参数配几千个矿点样本,过拟合是必然的。
更根本的问题是,全连接层把输入展平成一维向量,位置信息就丢了。窗口左上角的像元和右下角的像元,在展平后只是索引不同的两个数,网络不知道它们之间的空间关系。而找矿里恰恰是"环形""线性""套合"这类空间关系最有信息量,位置一丢就什么都没了。
卷积操作则有两个硬性优势。一是权值共享,一个3×3卷积核在整张图上滑动,参数量只有9个(乘上输入输出通道数),跟图像尺寸无关。二是局部连接加平移不变性,同一个地质模式出现在研究区东边还是西边,卷积核给出的响应是一样的——这正是我们想要的,因为矿床不挑位置,只挑地质条件组合。
注意:如果有人说"我用全连接网络做找矿预测效果也不错",先问清楚他的研究区面积和样本数量。小区域、几十个矿点的场景下,任何模型都能凑出漂亮数字,这不代表方法本身合适。
2. 数据准备:把地质、物探、化探、遥感图层拼成一张"多波段图像"
2.1 找矿预测常用数据源清单与栅格化处理
这一步是整条链路里最耗时间、也最容易埋雷的部分。模型跑不通,八成问题出在数据而不是网络。下面这张表是我这几年常用的数据源清单和处理方式,可以直接对着准备。
| 图层类别 | 具体数据 | 常用处理方式 | 栅格化建议 |
|---|---|---|---|
| 地质 | 地层单元、岩性分类、岩体边界 | 按含矿性重分类编码 | 分类栅格,每类一个整数编码 |
| 构造 | 断裂、褶皱轴、环形构造 | 计算欧氏距离、密度、方位 | 距离栅格 + 密度栅格 |
| 地球物理 | 航磁ΔT、重力布格异常、放射性 | 化极、延拓、求导、归一化 | 连续栅格,需统一量纲 |
| 地球化学 | 水系沉积物、土壤测量多元素 | 对数变换、背景校正、异常下限 | 每元素一张连续栅格 |
| 遥感 | 羟基蚀变、铁染蚀变、泥化指数 | 主成分分析、比值法提取 | 连续栅格,注意云掩膜 |
| 地形 | DEM、坡度、坡向 | 派生坡度、起伏度 | 连续栅格 |
| 已知矿点 | 矿床、矿化点坐标及规模 | 转栅格点、缓冲 | 用于构造标签 |
关键动作是统一到同一套网格。我一般用研究区投影坐标系(比如高斯-克吕格),像元大小取100米或250米。为什么是这两个值?100米是大多数1:5万地质调查和化探采样的合理插值精度,再细就是假精度;250米适合覆盖面积上百万平方公里的大区带研究,能显著压缩计算量。确定像元后,所有图层用同一个模板栅格做重采样,分类数据用最近邻法,连续数据用双线性或三次卷积。
化探数据一定要做对数变换。地球化学元素含量近似服从对数正态分布,直接归一化的话,几个高异常值会把整张图压扁,其他区域全变成0附近。做法是x' = log10(x + 1),然后按分位数(比如2%和98%)做截断再归一化到[0,1]。航磁和重力数据则要先做趋势面去除,否则区域场会主导整个数值范围。
注意:所有图层必须在同一坐标系、同一像元大小、同一行列数下严格对齐。我踩过的坑是化探点位坐标用的老坐标系,没做参数转换直接插值,结果化探异常整体偏移了几百米,模型学出来的关系全是错的,AUC还挺高——纯属自欺欺人。
2.2 样本标签怎么造:正样本、负样本与不确定性区
这是找矿预测里最需要地质判断力的一步,也是最容易被算法出身的人做歪的一步。
正样本就是已知矿点。把矿点坐标按像元落到栅格上,对应像元标为1。但这里有个尺度问题:一个矿床的影响范围远不止一个像元,可能是几百米到几公里的蚀变晕。所以实践中不直接用单像元,而是把矿点周围一个小窗口(比如3×3或5×5像元)都标成正样本,或者用矿点缓冲区做软标签。
负样本的选择更讲究。最偷懒的做法是在研究区内随机撒点,但这样会引入大量"其实可能有矿只是没发现"的假负样本。更严谨的做法有三档:
- 已知无矿区:做过系统勘探、明确否定矿化的区域,取点作负样本,最可靠但数量有限。
- 地质条件排斥区:比如全是第四系覆盖、或者岩性明显不利于成矿的区域,可以放心取负样本。
- 随机背景点:从远离已知矿点的区域随机采样,要求与最近矿点距离大于某个阈值(我一般取5公里以上)。
实践中我常用的是"分层采样":负样本中一半来自明确无矿区,一半来自远距离随机背景点。同时,把已知矿点周围的缓冲区设为"忽略区",训练时不计算损失,这样能避免正负样本在空间上贴脸打架。
提示:正负样本比例不用强求1:1。地质上矿点天然稀少,1:5到1:20都合理,具体靠损失函数里的类别权重去平衡(后面3.3会讲),而不是硬凑样本数量。
2.3 归一化、缺失值与坐标系对齐的具体坑
归一化统一用训练集的统计量。什么意思?如果研究区跨越多个图幅,不能每个图幅各自归一化,那样同一个地质体在不同图幅里数值不同。正确做法是先划分训练区和预测区,用训练区内该波段的最小值和最大值(或2%、98%分位数)去归一化整个数据集,验证区和预测区套用同一组参数。预测阶段遇到超出范围的值,直接截断到[0,1],不做重归一化。
缺失值处理要分情况。遥感图层里被云遮挡的像元、化探上未采样的空白区,都不能简单填0,因为0在数值上有地质含义。我的做法是:增加一个与数据层同尺寸的"有效性掩膜"波段,同时有效像元填该波段的均值、无效像元填0,让网络通过掩膜通道自己学会忽略这些位置。
坐标对齐有个细节容易忽略:断裂距离栅格的边界。计算欧氏距离时,如果只对研究区边界内的断裂计算,边界附近的距离值会严重失真。解决办法是把研究区向外buffer 20公里,在这个外扩范围内计算距离,然后再裁剪回研究区。
3. 网络结构设计与训练:从LeNet5改造说起
3.1 输入通道数、窗口大小与感受野的取舍
先说输入通道数。你有几张图层,输入通道就是多少。我做过的一个项目用了12个通道:地层编码、岩性编码、断裂距离、断裂密度、环形构造距离、航磁化极、航磁垂向一阶导、重力剩余异常、Cu异常、Mo异常、羟基蚀变、DEM。加掩膜波段就是13。通道越多信息越全,但也带来噪声和维度灾难,一般控制在20以内比较稳。
窗口大小直接决定单次预测能看到多大范围的地质背景。窗口17×17、像元250米,在空间上覆盖约4.25公里见方,这个尺度大致对应一个中小型矿床的成矿地质单元。如果用100米像元,11×11窗口只覆盖1.1公里,可能只看到了矿体本身而看不到外围的蚀变分带。经验值是让窗口覆盖范围落在3到8公里之间。
感受野的计算要跟上。网络层数决定了实际感受野比输入窗口小还是大。假设用3个池化层(每次下采样2倍),那么有效感受野约为窗口尺寸的1/8。想覆盖4公里,用17×17窗口配两层池化比较合适。窗口越大计算量越大,17×17到33×33是个比较舒服的区间。
3.2 一个可以直接抄的PyTorch实现
下面这套结构是我在几个不同成矿区带上跑下来比较稳的版本,参考了LeNet5的简洁思路但做了现代化改造:加BatchNorm加速收敛、用两个3×3卷积堆叠代替单个5×5卷积(同样感受野但参数更少、非线性更强)、末尾用全局平均池化替代大尺寸全连接。
import torch import torch.nn as nn class ProspectCNN(nn.Module): """找矿预测二分类CNN,输入 [B, C, H, W],输出 [B, 2]""" def __init__(self, in_ch=13, n_class=2, p_drop=0.3): super().__init__() self.block1 = nn.Sequential( nn.Conv2d(in_ch, 32, 3, padding=1), nn.BatchNorm2d(32), nn.ReLU(inplace=True), nn.Conv2d(32, 32, 3, padding=1), nn.BatchNorm2d(32), nn.ReLU(inplace=True), nn.MaxPool2d(2), # 17 -> 8 ) self.block2 = nn.Sequential( nn.Conv2d(32, 64, 3, padding=1), nn.BatchNorm2d(64), nn.ReLU(inplace=True), nn.Conv2d(64, 64, 3, padding=1), nn.BatchNorm2d(64), nn.ReLU(inplace=True), nn.MaxPool2d(2), # 8 -> 4 ) self.block3 = nn.Sequential( nn.Conv2d(64, 128, 3, padding=1), nn.BatchNorm2d(128), nn.ReLU(inplace=True), nn.MaxPool2d(2), # 4 -> 2 ) self.gap = nn.AdaptiveAvgPool2d(1) self.classifier = nn.Sequential( nn.Flatten(), nn.Dropout(p_drop), nn.Linear(128, 64), nn.ReLU(inplace=True), nn.Dropout(p_drop), nn.Linear(64, n_class), ) def forward(self, x): x = self.block1(x) x = self.block2(x) x = self.block3(x) x = self.gap(x) return self.classifier(x)为什么这么设计,逐条说清楚。用两个3×3卷积堆叠,感受野等于一个5×5,但参数量是2×(3×3×C×C)对比5×5×C×C,明显更省,而且中间多插了一个ReLU,非线性表达能力更强,这是VGG验证过的经典结论。BatchNorm放在卷积和ReLU之间,作用是把每层输出拉回稳定分布,学习率可以开大一些,收敛快很多,这对动辄几十个通道的地学数据很关键。全局平均池化替代展平后接大全连接层,参数量几乎归零,还能缓解过拟合——地学样本量本来就少,能省参数就省。
3.3 损失函数、类别不平衡与训练超参
类别不平衡是绕不开的。正样本可能就几百个,负样本几千个。三种处理方式我按推荐度排序:
第一,加权交叉熵。给正样本一个较大的权重,比如weight = [1.0, 5.0](负样本在前,正样本在后)。写法是nn.CrossEntropyLoss(weight=torch.tensor([1.0, 5.0]))。权重的设定有个经验公式:权重比约等于负正样本数量的平方根之比,而不是直接的数量比,直接按数量比会矫枉过正。
第二,Focal Loss。对难分类样本加大梯度,对已分对的简单样本降权。工程上alpha=0.25, gamma=2是常见起点,但在地学数据上我一般把gamma调到1.5,因为gamma太大容易让模型只盯着边界样本,忽略整体地质规律。
第三,数据层面重采样。正样本做小幅度旋转、镜像、轻微平移增强,负样本随机欠采样。旋转增强在地质上要注意:有些图层(比如断裂方位)有方向性,随意旋转会破坏其地质含义,所以旋转角度我一般只取90度整数倍,或者干脆不用旋转,只做镜像。
训练超参我常用的范围整理成表:
| 超参数 | 推荐范围 | 说明 |
|---|---|---|
| 优化器 | AdamW | 带权重衰减,比纯Adam更稳 |
| 初始学习率 | 1e-3 | 配合余弦退火,按epoch衰减到1e-5 |
| Batch Size | 32-64 | 样本少时用16,配梯度累积 |
| Epoch | 50-150 | 早停patience设15 |
| Dropout | 0.3-0.5 | 样本越少取值越大 |
| 权重衰减 | 1e-4 | L2正则,抑制过拟合 |
| 空间交叉验证 | 5折 | 见5.1,这条最重要 |
注意:随机划分训练集和验证集在找矿预测里是错误做法。因为空间自相关,相邻像元的特征高度相似,随机划分会让验证集样本跟训练集样本在空间上几乎重叠,AUC能干到0.95以上,但换一片区域预测就崩。必须用空间分块交叉验证,比如把研究区切成若干块,轮流留一块做验证。
4. 从预测热力图到找矿靶区:模型输出如何落回地质图
4.1 滑窗推理与整图拼接的正确姿势
训练好模型,下一步是对整个研究区做预测。做法是把模型当作滑窗分类器,从左上角开始,按步长滑动取窗口,每个窗口输出该中心像元的成矿概率。这里有三个参数要定好。
窗口大小跟训练时保持一致,这个不用商量,不一致会导致输入分布偏移。步长一般取1个像元,也就是逐像元预测,结果最平滑。计算量太大时可以把步长设为窗口的1/4,然后对重叠区域做加权平均,边缘权重低、中心权重高,用高斯核做加权,这样能消除接缝。第三个是批处理推理,把窗口batch起来送进GPU,比一个个送快几十倍。
实际代码里我是这么写的:先把整幅研究区栅格读成numpy数组,形状[H, W, C],用numpy.lib.stride_tricks.sliding_window_view切出所有窗口,再分batch喂给模型。最后得到一张[H, W]的概率图,用rasterio写入GeoTIFF,保持跟原始栅格相同的坐标系和像元大小。
拼接完了别急着看图,先做高斯平滑。概率图里经常出现孤立的单像元高值点,那是噪声,不是矿化。用一个σ=1.5到2的高斯滤波扫一遍,让高值区变成连片、有形态的异常,这才是地质上讲得通的东西。
4.2 阈值划分与靶区分级怎么做才合理
概率图出来后,圈靶区的常用方法是取分位数阈值。比如取概率最高的1%像元作为一级靶区,1%到5%作为二级,5%到15%作为三级。为什么用分位数而不是固定值?因为模型输出的概率分布每年、每个研究区都不一样,固定阈值(比如0.7)在有些区域可能圈不出一块地,有些区域又圈出半个省。
分位数的取值要跟已知矿点做交叉验证。我的做法是:统计不同阈值下,已知矿点落入高值区的比例,也就是"捕获率",同时统计高值区面积占总面积的比例,也就是"预测面积比"。理想结果是"用20%的面积捕获80%的矿点"。把不同阈值下的捕获率-面积比画成曲线,取曲线拐点作为分级依据。下面是一个典型的分析结果示意:
| 分级 | 概率分位 | 面积占比 | 已知矿点捕获率 | 建议动作 |
|---|---|---|---|---|
| 一级靶区 | 前1% | 1% | 35% | 优先安排野外查证 |
| 二级靶区 | 1%-5% | 4% | 62% | 列入年度勘查计划 |
| 三级靶区 | 5%-15% | 10% | 85% | 作为后备区带 |
| 背景区 | 后85% | 85% | 15% | 暂不投入 |
一级靶区面积小、命中率高,拿来交差最合适;三级靶区面积大,用来做区域成矿潜力评估。分级之后一定要叠加已知矿权、保护区、交通条件这些现实约束,模型给的只是地质有利度,能不能落地还得看这些。
4.3 3D卷积在深部找矿里的尝试值不值得做
近几年3D卷积神经网络在深部找矿里被提得比较多。思路是把地球物理反演得到的不同深度切片堆成一个三维体,比如每50米一个切片,从地表到地下2公里,一共40层,每层有磁化率、密度、电阻率几个属性,那就得到一个40×H×W×C的四维张量,用3D卷积核去提取"深度方向"上的异常变化模式。
这个方向有价值,因为很多矿化系统在垂向上有明显的分带:浅部蚀变、中部硫化物、深部岩体,3D卷积能捕捉这种垂向组合。但要泼点冷水。第一,深部数据的可靠性随深度急剧下降,2公里以下的地球物理反演基本是"猜",把噪声喂给网络只会学到假模式。第二,3D卷积的参数量和显存占用是2D的数倍,一个40层、每层512×512的体数据,普通工作站很难训练。第三,也是最重要的,深部验证成本极高,一个钻孔几百万,模型预测错了没法快速纠错,不像地表可以随时跑野外。
我的建议是:3D CNN可以作为探索方向,但不要一上来就做全区块的深部预测。先在已知矿床上有钻孔控制的剖面上做,用钻孔数据作为深度方向的标签,验证模型能不能重现已知的垂向分带,这算是个可行的技术验证路径。等这个方法在几个已知矿床上站得住脚,再谈推广应用。
5. 实操踩坑与常见问题排查
5.1 常见问题速查表
这套流程跑下来会遇到的坑,我整理成一张表,遇到问题先在这张表里对号入座。
| 现象 | 可能原因 | 排查与解决 |
|---|---|---|
| 训练集AUC 0.98,验证集0.6 | 空间泄漏,随机划分数据集 | 改用空间分块交叉验证 |
| 训练一开始loss就不降 | 学习率过大或数据未归一化 | 检查归一化,学习率降到1e-4试 |
| 预测图全是斑噪,没有连片异常 | 未做平滑,或窗口步长过大 | 加高斯滤波,步长设为1 |
| 高值区集中在研究区边界 | 断裂距离等图层边界效应 | 研究区外buffer 20公里算距离 |
| 每年预测结果差异很大 | 阈值用固定值,样本划分不同 | 用分位数阈值+固定随机种子 |
| 模型只看化探,忽略地质 | 图层数值尺度差异太大 | 逐波段标准化,检查各波段分布 |
| 正样本学不会,全预测为背景 | 类别权重过小 | 提高正样本权重或用Focal Loss |
| 某元素异常区全被标为正 | 存在数据泄漏,化和矿点采样同源 | 检查化探数据是否含矿点采样值 |
第一行那个问题值得多说两句。我见过太多论文报出0.95以上的AUC,仔细一问都是随机划分。地质数据相邻像元的特征是高度相似的,随机划分相当于把测试集样本的"邻居"放进了训练集,模型只要记住邻居就够了。换成空间分块交叉验证后,AUC通常会掉到0.75到0.85,这才是真实水平。掉得越多说明你的模型越依赖空间记忆而不是地质规律。
最后一行也很阴险。化探数据本身是沿水系或网格采样的,如果某些采样点恰好落在矿点上,那么这些点的元素含量天然就高,而你又拿同一批矿点做正样本,等于把答案直接喂给了模型。解决办法是把已知矿点周围的化探采样点从输入数据中剔除,或者用周围采样点的插值值替代。
5.2 模型可解释性校验:让地质专家能看懂
模型跑完不能只甩一张热力图,得能解释"为什么这里高"。三种方法按易用度排序。
第一种是敏感性分析(也称置换重要性)。做法是把某个波段的值随机打乱,重新推理,看预测概率下降多少。下降得越多说明这个波段越重要。我做过的一个项目里,把断裂距离波段打乱后,一级靶区概率平均下降32%,说明模型确实抓住了构造控矿这一条,地质人员看了就服气。
第二种是类激活图(CAM / Grad-CAM)。把最后卷积层的特征图和分类头的权重结合,生成一张热力图,叠在原始栅格上,能看到模型"关注"的是哪个位置。如果模型对某个已知矿点的响应热点落在矿点外的蚀变晕上,这是好现象,说明它学到的是蚀变分带;如果热点落在矿点正中心,反而要警惕,可能是数据泄漏。
第三种是消融实验。逐步去掉某些波段,看性能变化。去掉遥感蚀变波段后性能掉得最厉害,说明研究区蚀变信息最关键;去掉重力后几乎无变化,说明该数据对这个矿种贡献不大,下一轮可以省掉这块数据处理成本。
提示:可解释性结果一定要请一线地质人员过目。他们会指出很多算法看不出的问题,比如"这个高值区其实在一条年轻冲沟里,是地形效应不是矿",这种反馈比任何指标都有价值。
5.3 我个人的几条经验心得
第一条,数据准备的时间应该占总时间的七成。我早期做项目总想赶紧把网络搭起来看效果,结果是反复在数据上返工。后来改成先把所有图层对齐、归一化、边界处理做扎实,再动手写模型,整体效率反而高得多。网络结构用现成的成熟方案就行,找矿预测的瓶颈从来不在网络多新,而在数据质量和标签合理性。
第二条,一定要留一块"时空独立"的验证区。如果研究区有几个不同成矿带,训练时故意留一个成矿带完全不参与训练,最后用这个带上的已知矿点检验模型的泛化能力。这个数字才是真正能拿出去说的。我在某次项目里,训练带AUC 0.83,独立带AUC 0.71,虽然掉了,但说明模型学到的是可迁移的地质规律,而不是区域记忆。
第三条,模型的输出要当"建议"而不是"结论"。CNN给出的是基于已有数据的概率排序,它能帮你把几十万平方公里的区域压缩到几千平方公里值得跑的地方,但最终圈靶、布孔还得靠地质综合研判。我见过有人直接拿模型概率0.9以上的位置去申请探矿权,后来发现那一片是第四系厚覆盖区,模型看不到覆盖层下面的情况,这种坑还是得靠人兜底。
第四条,版本管理要做。地质数据、样本集、模型权重、阈值参数,每一项变更都会影响最终靶区,用Git或者简单的文件夹版本号管理起来,别到时候评审问"你这个结果跟半年前那版差在哪",自己都说不清。我一般会把每次运行的配置文件、随机种子、数据快照路径都存进一个运行日志,靠这个日志能完整复现任何一次预测结果。
关于后续扩展,我觉得有两个方向值得试。一个是把CNN提取的空间特征和传统证据权重法的成矿有利度做融合,相当于把数据驱动和知识驱动两条路子合起来,在很多数据稀疏的区带可能比纯CNN更稳。另一个是用迁移学习,在数据丰富的老矿区预训练,然后迁移到勘探程度低的新区带,微调最后几层,这对新区找矿来说能省下大量样本收集成本。这两条我自己也还在摸索,有新的体会再单独写一篇。