From 72e8ced33042bf8ff8eb8770c0499c445d31925a Mon Sep 17 00:00:00 2001 From: 1294271022 <1294271022@qq.com> Date: Tue, 26 May 2026 15:51:44 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=90=8C=E6=AD=A5=E4=BB=A3=E7=90=86?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E4=B8=8EPSO=E9=87=87=E6=A0=B7=E8=8C=83?= =?UTF-8?q?=E5=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../configs/data_gen_family_random_v2_q.yaml | 10 +++---- .../scripts/train_time_conditioned.py | 10 ++----- .../src/training/train_time_conditioned.py | 30 +++++-------------- 3 files changed, 15 insertions(+), 35 deletions(-) diff --git a/ML/nmWTAI-ML/configs/data_gen_family_random_v2_q.yaml b/ML/nmWTAI-ML/configs/data_gen_family_random_v2_q.yaml index fc31d08..108c29e 100644 --- a/ML/nmWTAI-ML/configs/data_gen_family_random_v2_q.yaml +++ b/ML/nmWTAI-ML/configs/data_gen_family_random_v2_q.yaml @@ -43,11 +43,11 @@ params: # 储层与井筒物理参数采样设置 active_param_names: ["k", "skin", "wellboreC", "phi", "h"] # 参与采样变化的物理参数列表 log_params: ["k", "wellboreC", "h"] # 采样时采用对数尺度的物理参数 ranges: # 各物理参数采样范围 - k: [1.0e-4, 100.0] # 渗透率采样范围 + k: [1.0e-3, 10.0] # 渗透率采样范围 skin: [-10.0, 10.0] # 表皮系数采样范围 wellboreC: [1.0e-4, 2.0] # 井筒储集系数采样范围 phi: [1.0e-2, 0.50] # 孔隙度采样范围 - h: [2.0, 100.0] # 储层厚度采样范围 + h: [2.0, 50.0] # 储层厚度采样范围 Cf: [1.0e-6, 5.0e-3] # 岩石压缩系数采样范围 fixed_params: # 固定不参与采样的物理参数 Cf: @@ -59,9 +59,9 @@ params: # 储层与井筒物理参数采样设置 strategies: # 按参数分别定义定向采样策略 k: components: # 分段采样组件列表 - - {prob: 0.55, range: [1.0e-4, 1.0e-1], scale: "log"} # 定向采样组件:prob 为概率,range 为范围,scale 为采样尺度 - - {prob: 0.30, range: [1.0e-1, 1.0], scale: "log"} # 定向采样组件:prob 为概率,range 为范围,scale 为采样尺度 - - {prob: 0.15, range: [1.0, 100.0], scale: "log"} # 定向采样组件:prob 为概率,range 为范围,scale 为采样尺度 + - {prob: 0.45, range: [1.0e-3, 1.0e-1], scale: "log"} # 定向采样组件:prob 为概率,range 为范围,scale 为采样尺度 + - {prob: 0.35, range: [1.0e-1, 1.0], scale: "log"} # 定向采样组件:prob 为概率,range 为范围,scale 为采样尺度 + - {prob: 0.20, range: [1.0, 10.0], scale: "log"} # 定向采样组件:prob 为概率,range 为范围,scale 为采样尺度 skin: components: # 分段采样组件列表 - {prob: 0.35, range: [-10.0, -3.0], scale: "linear"} # 定向采样组件:prob 为概率,range 为范围,scale 为采样尺度 diff --git a/ML/nmWTAI-ML/scripts/train_time_conditioned.py b/ML/nmWTAI-ML/scripts/train_time_conditioned.py index 2455d17..802d6fa 100644 --- a/ML/nmWTAI-ML/scripts/train_time_conditioned.py +++ b/ML/nmWTAI-ML/scripts/train_time_conditioned.py @@ -30,15 +30,13 @@ def main() -> None: parser.add_argument("--no-schedule", action="store_true") parser.add_argument( "--sample-weight-mode", - choices=["none", "pso_domain", "pso_domain_risk"], + choices=["none", "risk_region"], default="none", - help="Optional sample weighting; default keeps the original unweighted training behavior", + help="Optional risk-region sample weighting; default keeps the original unweighted training behavior", ) - parser.add_argument("--pso-outside-weight", type=float, default=0.5) - parser.add_argument("--pso-inside-weight", type=float, default=1.0) parser.add_argument("--risk-weight", type=float, default=2.5) parser.add_argument("--skin-lt-minus8-weight", type=float, default=3.5) - parser.add_argument("--sample-weight-min", type=float, default=0.25) + parser.add_argument("--sample-weight-min", type=float, default=1.0) parser.add_argument("--sample-weight-max", type=float, default=4.0) args = parser.parse_args() @@ -67,8 +65,6 @@ def main() -> None: huber_beta=float(args.huber_beta), use_schedule=not bool(args.no_schedule), sample_weight_mode=str(args.sample_weight_mode), - pso_outside_weight=float(args.pso_outside_weight), - pso_inside_weight=float(args.pso_inside_weight), risk_weight=float(args.risk_weight), skin_lt_minus8_weight=float(args.skin_lt_minus8_weight), sample_weight_min=float(args.sample_weight_min), diff --git a/ML/nmWTAI-ML/src/training/train_time_conditioned.py b/ML/nmWTAI-ML/src/training/train_time_conditioned.py index 2ee87bf..7fb455b 100644 --- a/ML/nmWTAI-ML/src/training/train_time_conditioned.py +++ b/ML/nmWTAI-ML/src/training/train_time_conditioned.py @@ -76,11 +76,9 @@ class TimeConditionedTrainConfig: huber_beta: float = 0.05 use_schedule: bool = True sample_weight_mode: str = "none" - pso_outside_weight: float = 0.5 - pso_inside_weight: float = 1.0 risk_weight: float = 2.5 skin_lt_minus8_weight: float = 3.5 - sample_weight_min: float = 0.25 + sample_weight_min: float = 1.0 sample_weight_max: float = 4.0 device: str = "cuda" if torch.cuda.is_available() else "cpu" @@ -143,29 +141,15 @@ def _build_sample_weight(data: dict, cfg: TimeConditionedTrainConfig, split: str n = int(data[f"X_params_{split}"].shape[0]) if mode in {"none", "off", "false"}: return np.ones((n,), dtype=np.float32) - if mode not in {"pso_domain", "pso_domain_risk"}: + if mode != "risk_region": raise ValueError(f"Unknown sample_weight_mode={cfg.sample_weight_mode!r}") params = _raw_params_from_processed_split(data, split) - pso_mask = ( - (params["k"] >= 0.001) - & (params["k"] <= 10.0) - & (params["skin"] >= -10.0) - & (params["skin"] <= 10.0) - & (params["wellboreC"] >= 1.0e-4) - & (params["wellboreC"] <= 2.0) - & (params["phi"] >= 0.01) - & (params["phi"] <= 0.5) - & (params["h"] >= 2.0) - & (params["h"] <= 50.0) - ) - - weight = np.where(pso_mask, float(cfg.pso_inside_weight), float(cfg.pso_outside_weight)).astype(np.float32) - if mode == "pso_domain_risk": - risk = pso_mask & (params["skin"] < -5.0) & (params["wellboreC"] > 0.1) - skin_extreme = pso_mask & (params["skin"] < -8.0) - weight[risk] = np.maximum(weight[risk], float(cfg.risk_weight)) - weight[skin_extreme] = np.maximum(weight[skin_extreme], float(cfg.skin_lt_minus8_weight)) + weight = np.ones((n,), dtype=np.float32) + risk = (params["skin"] < -5.0) & (params["wellboreC"] > 0.1) + skin_extreme = params["skin"] < -8.0 + weight[risk] = np.maximum(weight[risk], float(cfg.risk_weight)) + weight[skin_extreme] = np.maximum(weight[skin_extreme], float(cfg.skin_lt_minus8_weight)) weight = np.clip(weight, float(cfg.sample_weight_min), float(cfg.sample_weight_max)) return weight.astype(np.float32)