当前位置: 首页 > news >正文

网站图文混排怎么存放到数据库里wordpress自定义页面分页

网站图文混排怎么存放到数据库里,wordpress自定义页面分页,网络游戏代练,地方门户网站的发展代码功能概述 导入相关包与设置环境变量#xff1a; 首先导入了如 os、numpy、pandas 等常用的 Python 库#xff0c;同时设置了一些与特定库#xff08;如 XLA_PYTHON_CLIENT_PREALLOCATE 和 JAX_PM AP_USE_TENSORSTORE#xff09;相关的环境变量#xff0c;用于优化计算…代码功能概述 导入相关包与设置环境变量 首先导入了如 os、numpy、pandas 等常用的 Python 库同时设置了一些与特定库如 XLA_PYTHON_CLIENT_PREALLOCATE 和 JAX_PM AP_USE_TENSORSTORE相关的环境变量用于优化计算等操作。加载预训练的 TimesFM 模型 通过指定相关超参数如后端为 gpu、每核心批处理大小等以及预训练模型在 Hugging Face 上的仓库 id实例化了 TimesFm 模型对象用于后续的评估和微调等操作。准备数据集相关信息并加载数据 定义了一个数据集字典 DATA_DICT包含多个数据集如 ettm1 等的详细信息包括数据文件路径、时间频率、划分边界等。根据选定的数据集示例中初始化为 ettm1读取对应的数据文件为 DataFrame然后配置 TimeSeriesdata 类的实例来进行数据加载、划分训练集、验证集和测试集同时对数据进行了一些规范化等预处理操作并生成对应的批次数据train_batches、val_batches、test_batches。评估预训练模型在测试集上的 MAE平均绝对误差 通过迭代测试集批次数据利用预训练模型进行预测计算预测值和实际值之间的平均绝对误差以此来评估模型在当前数据集上的性能表现。微调模型 导入了一系列用于构建和训练模型的 praxis、paxml 相关的模块和类进行了诸如定义学习器包括优化器、学习率调度等配置、构建任务、初始化模型状态等操作。将预训练模型的参数设置为微调模型的初始权重然后通过定义训练步和评估步函数在多个 epoch 内循环进行训练和定期评估利用早停机制根据验证集损失决定是否提前停止训练在每个训练步中对模型参数进行更新每个评估步计算验证集上的损失保存最优模型状态的检查点。加载并评估微调后的模型 从保存的检查点中恢复最优的模型状态将其参数更新到原 TimesFM 模型中然后再次在测试集上计算平均绝对误差以对比微调前后模型性能的变化情况。 针对车辆销售数据的改写步骤 数据准备与加载部分适配车辆销售数据 修改数据集字典 DATA_DICT 创建一个新的字典项来对应你的车辆销售数据集例如取名为 vehicle_sales。填写对应的数据文件路径假设你的车辆销售数据存储在 ../datasets/vehicle_sales.csv则 data_path 设置为此路径。根据你的数据时间粒度来设置 freq比如如果是按天记录的就可以设置为 D代表 Daily如果是按月记录的可设置为 M代表 Monthly等。按照你的训练、验证、测试集划分的时间范围来设置 boundaries 列表中的值例如如果前 3 年数据作为训练集第 4 年作为验证集第 5 年作为测试集你需要根据数据点数量等信息确定对应的时间点边界值填入该列表。调整数据读取和数据加载配置部分 在 data_df pd.read_csv(open(data_path, r)) 这行代码中确认数据文件格式正确能被 read_csv 方法读取如果数据有特定的分隔符、编码等情况按需调整参数比如添加 sep 参数指定分隔符、encoding 参数指定编码格式等。根据你的车辆销售数据列名修改 ts_cols、num_cov_cols、cat_cov_cols 的定义。例如销售量和销售价格等数值型的时间序列列可添加到 ts_cols车型、经销商这些分类列可以根据需求分配到 num_cov_cols如果要进行数值编码等处理或者 cat_cov_cols作为分类特征中。同时修改 TimeSeriesdata 实例化时传入的参数确保数据能正确划分和预处理例如 datetime_col 设置为数据中代表日期的列名。 模型微调部分可能无需大改但检查配置合理性 确认微调时定义的学习器配置如优化器、学习率调度等参数是否适合车辆销售数据预测任务。你可能需要根据实际情况调整学习率、训练总步数等参数例如车辆销售数据如果比较复杂可能需要适当调小学习率、增加训练总步数等以保证模型能更好地收敛和学习到数据中的模式。检查 build_learner 函数中设置的 bprop_variable_exclusion 参数是否合理对于车辆销售数据微调场景下想要固定或者放开训练的模型层根据模型结构和需求进行调整确保只训练希望更新参数的那些部分。 模型评估部分保持逻辑基本一致 在计算微调前后模型在测试集上的平均绝对误差MAE部分确保数据维度等处理符合车辆销售数据的特点。例如在预测结果和实际结果对比计算 MAE 时确认预测的销售量、销售价格等和实际值的对应关系和维度对齐正确特别是如果有多个时间序列维度或者特征维度时保证 forecasts 和 actuals 的形状匹配能正确计算误差。 以下是一个python代码假设你的车辆销售数据 vehicle_sales.csv 有 date日期、car_model车型、dealer经销商、sales_volume销售量、sales_price销售价格这几列并且想将车型和经销商作为分类特征销售量和销售价格作为时间序列特征数据按年划分训练、验证、测试集这里简化假设前 3 年训练、第 4 年验证、第 5 年测试并且时间频率是按年 Y # 以下代码主要用于基于TimesFM模型对车辆销售数据进行预训练模型评估、模型微调以及微调后模型的评估操作 # 导入相关包用于微调操作同时设置一些环境变量来优化计算等相关配置 ## Importing relevant packages for finetuning import os os.environ[XLA_PYTHON_CLIENT_PREALLOCATE] false os.environ[JAX_PMAP_USE_TENSORSTORE] false import timesfm import gc import numpy as np import pandas as pd from timesfm import patched_decoder from timesfm import data_loader from tqdm import tqdm import dataclasses import IPython import IPython.display import matplotlib as mpl import matplotlib.pyplot as plt mpl.rcParams[figure.figsize] (8, 6) mpl.rcParams[axes.grid] False# 加载预训练的TimesFM模型通过指定相关超参数如后端使用的设备、每核心批处理大小、预测长度等以及从Hugging Face获取预训练模型的仓库id # 实例化TimesFm模型对象后续将利用该模型进行数据评估和微调等操作 ## Loading TimesFM pretrained checkpoint tfm timesfm.TimesFm(hparamstimesfm.TimesFmHparams(backendgpu,per_core_batch_size32,horizon_len128,),checkpointtimesfm.TimesFmCheckpoint(huggingface_repo_idgoogle/timesfm-1.0-200m),)# 配置车辆销售数据集相关信息包括数据集划分边界、数据文件路径、时间频率等用于后续的数据加载和处理 # 此处简化假设按年划分数据集前3年作为训练集第4年作为验证集第5年作为测试集时间频率设置为按年Y # 根据实际数据情况和需求这些设置都可以进行相应调整 ## Evaluating pretrained checkpoint on vehicle sales dataset DATA_DICT {vehicle_sales: {boundaries: [3, 4, 5], # 简化按年划分前3年训练第4年验证第5年测试data_path: ../datasets/vehicle_sales.csv,freq: Y, # 按年的时间频率} } dataset vehicle_sales data_path DATA_DICT[dataset][data_path] freq DATA_DICT[dataset][freq] int_freq timesfm.freq_map(freq) boundaries DATA_DICT[dataset][boundaries]# 读取车辆销售数据文件为DataFrame格式后续将基于此数据进行进一步处理例如划分数据集、提取特征列等操作 # 需要确保数据文件路径正确以及数据格式能被read_csv方法正常读取如有特殊格式可按需调整参数如分隔符、编码等 data_df pd.read_csv(open(data_path, r))# 定义时间序列特征列这里选取销售量和销售价格作为时间序列特征将用于模型的输入和预测等相关操作 # 根据实际业务需求和数据特点可调整此列表包含的列名 ts_cols [sales_volume, sales_price] # 暂未定义数值型协变量列可根据后续是否需要添加额外数值型特征进行设置 num_cov_cols None # 定义分类特征列这里选取车型和经销商作为分类特征模型可以根据这些特征学习不同分类下的销售模式等信息 cat_cov_cols [car_model, dealer] context_len 512 pred_len 96num_ts len(ts_cols) batch_size 16# 实例化TimeSeriesdata类用于加载、划分和预处理车辆销售数据配置训练集、验证集、测试集的范围以及设置数据归一化等参数 # 该类内部会根据设置对数据进行相应处理生成对应的批次数据便于后续模型训练和评估使用 dtl data_loader.TimeSeriesdata(data_pathdata_path,datetime_coldate,num_cov_colsnum_cov_cols,cat_cov_colscat_cov_cols,ts_colsnp.array(ts_cols),train_range[0, boundaries[0]],val_range[boundaries[0], boundaries[1]],test_range[boundaries[1], boundaries[2]],hist_lencontext_len,pred_lenpred_len,batch_sizenum_ts,freqfreq,normalizeTrue,epoch_lenNone,holidayFalse,permuteTrue,) # 获取训练集批次数据每个批次的数据将按照设置的batch_size进行划分便于在训练循环中迭代使用 train_batches dtl.tf_dataset(modetrain, shift1).batch(batch_size) # 获取验证集批次数据同样按照设置进行划分用于在模型训练过程中的定期验证以监控模型性能和防止过拟合等 val_batches dtl.tf_dataset(modeval, shiftpred_len) # 获取测试集批次数据用于最终评估模型在未见过的数据上的性能表现 test_batches dtl.tf_dataset(modetest, shiftpred_len) # 简单遍历训练集批次数据的迭代器此处主要是为了触发数据加载等相关操作确保数据可以正常获取暂未对数据做具体处理 for tbatch in tqdm(train_batches.as_numpy_iterator()):pass # 打印训练集批次数据中第一个元素通常是输入数据部分的形状用于检查数据维度是否符合预期 print(tbatch[0].shape)# 以下代码块用于计算预训练模型在测试集上的平均绝对误差MAE通过迭代测试集批次数据 # 利用预训练模型进行预测然后对比预测值和实际值计算平均绝对误差以此评估模型初始性能 ### MAE on the test split for the pretrained TimesFM model mae_losses [] for batch in tqdm(test_batches.as_numpy_iterator()):past batch[0]actuals batch[3]forecasts, _ tfm.forecast(list(past), [0] * past.shape[0], normalizeTrue)forecasts forecasts[:, 0 : actuals.shape[1]]mae_losses.append(np.abs(forecasts - actuals).mean())print(fMAE: {np.mean(mae_losses)})# 导入一系列用于构建和训练模型的praxis、paxml相关的模块和类这些模块提供了配置模型、定义学习器、优化训练过程等功能 # 后续将利用这些工具来对模型进行微调操作使其能更好地适应车辆销售数据特点和预测任务 ## Finetuning the model on the vehicle sales dataset import jax from jax import numpy as jnp from praxis import pax_fiddle from praxis import py_utils from praxis import pytypes from praxis import base_model from praxis import optimizers from praxis import schedules from praxis import base_hyperparams from praxis import base_layer from paxml import tasks_lib from paxml import trainer_lib from paxml import checkpoints from paxml import learners from paxml import partitioning from paxml import checkpoint_types # PAX shortcuts定义一些便捷使用的类型和函数别名方便后续代码中调用相关功能时书写简洁 NestedMap py_utils.NestedMap WeightInit base_layer.WeightInit WeightHParams base_layer.WeightHParams InstantiableParams py_utils.InstantiableParams JTensor pytypes.JTensor NpTensor pytypes.NpTensor WeightedScalars pytypes.WeightedScalars instantiate base_hyperparams.instantiate LayerTpl pax_fiddle.Config[base_layer.BaseLayer] AuxLossStruct base_layer.AuxLossStructAUX_LOSS base_layer.AUX_LOSS template_field base_layer.template_field# 定义标准的伪随机数生成器PRNG键名称用于在模型训练等过程中需要随机数的地方保持一致性和可复现性 # PARAMS和RANDOM是常见的用于区分不同用途随机数的标识 PARAMS base_layer.PARAMS RANDOM base_layer.RANDOM# 生成一个初始的随机数生成器的键设置种子为1234以便后续在需要随机初始化等操作时能复现结果 key jax.random.PRNGKey(seed1234) # 配置微调模型的结构使用PatchedDecoderFinetuneModel作为基础结构并将之前加载的预训练模型的核心层配置传入 # 以此构建微调模型的初始结构后续将在此基础上进行参数更新等微调操作 model pax_fiddle.Config(patched_decoder.PatchedDecoderFinetuneModel,namepatched_decoder_finetune,core_layer_tpltfm.model_p, )# 定义构建学习器的函数配置学习器相关参数如损失函数名称、优化器这里使用Adam优化器及其参数学习率、学习率调度策略、梯度裁剪阈值、指数移动平均衰减等 # 同时设置在微调过程中要固定的模型层通过bprop_variable_exclusion参数指定这里示例中固定了变压器层可根据实际情况调整 ### We will hold the transformer layers fixed while finetuning, while training all other components. pax_fiddle.auto_config def build_learner() - learners.Learner():return pax_fiddle.Config(learners.Learner,namelearner,loss_nameavg_qloss,optimizeroptimizers.Adam(epsilon1e-7,clip_threshold1e2,learning_rate1e-3, # 示例中适当调整学习率可根据实际情况进一步优化lr_schedulepax_fiddle.Config(schedules.Cosine,initial_value1e-4,final_value1e-5,total_steps40000,),ema_decay0.9999,),# 线性探测固定变压器层可根据实际情况调整要固定的层bprop_variable_exclusion[.*/stacked_transformer_layer/.*],)# 构建训练任务配置将之前定义的模型和学习器配置组合起来同时设置模型相关的分布式训练的一些参数如mesh形状和轴名称等 # 用于后续在多设备等分布式环境下进行模型训练时的配置管理 task_p tasks_lib.SingleTask(namevehicle_sales_learn,modelmodel,traintasks_lib.SingleTask.Train(learnerbuild_learner(),), ) task_p.model.ici_mesh_shape [1, 1, 1] task_p.model.mesh_axis_names [replica, data, mdl]# 获取可用的设备如GPU或CPU等信息并将其整理为特定的形状用于构建分布式训练的Mesh对象以支持模型在多设备上并行训练 DEVICES np.array(jax.devices()).reshape([1, 1, 1]) MESH jax.sharding.Mesh(DEVICES, [replica, data, mdl])# 获取本地设备数量用于后续在数据划分、并行操作等方面根据设备数量进行相应处理并打印设备相关信息方便查看 num_devices jax.local_device_count() print(fnum_devices: {num_devices}) print(fdevice kind: {jax.local_devices()[0].device_kind}) jax_task task_p key, init_key jax.random.split(key)# 以下两个函数用于处理训练批次数据和评估批次数据主要功能是对数据的形状进行调整和整理 # 确保数据格式符合模型输入和后续处理的要求例如将数据按照设备数量和批次大小等进行合理重塑 # 方便在分布式训练和评估过程中正确使用数据 # To correctly prepare a batch of data for model initialization (now that shape # inference is merged), we take one devices*batch_size tensor tuple of data, # slice out just one batch, then run the prepare_input_batch function over it. def process_train_batch(batch):past_ts batch[0].reshape(batch_size * num_ts, -1)actual_ts batch[3].reshape(batch_size * num_ts, -1)return NestedMap(input_tspast_ts, actual_tsactual_ts)def process_eval_batch(batch):past_ts batch[0]actual_ts batch[3]return NestedMap(input_tspast_ts, actual_tsactual_ts)# 初始化模型状态传入训练任务配置、初始化随机数键以及处理后的训练批次数据等信息 # 根据指定的检查点类型这里是GDA类型进行模型状态的初始化操作得到初始的模型状态信息 jax_model_states, _ trainer_lib.initialize_model_state(jax_task,init_key,process_train_batch(tbatch),checkpoint_typecheckpoint_types.CheckpointType.GDA, )# 将预训练模型的参数设置为微调模型的初始权重具体是将预训练模型的参数赋值给微调模型状态中对应核心层的参数部分 # 这样微调模型就可以在预训练的基础上进行进一步优化加快收敛并利用预训练学到的通用特征表示 ### Setting the initial model weights to the pretrained TimesFM parameters. jax_model_states.mdl_vars[params][core_layer] tfm._train_state.mdl_vars[params] jax_vars jax_model_states.mdl_vars gc.collect()# 以下是模型微调的训练循环部分定义了训练步和评估步的函数在多个训练轮次epoch内循环进行训练和定期评估 # 通过早停机制根据验证集损失决定是否提前停止训练来避免过拟合在每个训练步中更新模型参数每个评估步计算验证集上的损失并保存最优模型状态的检查点 ### Training loop# 将之前配置好的训练任务task_p赋值给jax_task变量后续在训练和评估步骤中会用到这个任务配置信息 jax_task task_p# 定义训练步函数train_step该函数内部调用了trainer_lib.train_step_single_learner函数用于执行单个学习器的一次训练步骤 # 它接收当前的模型状态states、伪随机数生成器的键prng_key以及输入数据inputs作为参数返回训练后的模型状态等相关信息 def train_step(states, prng_key, inputs):return trainer_lib.train_step_single_learner(jax_task, states, prng_key, inputs)# 定义评估步函数eval_step首先将模型状态转换为评估状态通过to_eval_state方法然后调用trainer_lib.eval_step_single_learner函数执行评估步骤 # 同样接收模型状态、伪随机数生成器的键以及输入数据作为参数返回评估相关的结果信息例如损失值等 def eval_step(states, prng_key, inputs):states states.to_eval_state()return trainer_lib.eval_step_single_learner(jax_task, states, prng_key, inputs)# 对初始的随机数生成器的键key进行分割生成三个新的随机数生成器的键分别用于后续的训练、评估以及其他可能的操作 # 这样可以保证在不同的步骤中使用不同的随机数流便于控制随机性和复现实验结果 key, train_key, eval_key jax.random.split(key, 3)# 根据本地设备数量jax.local_device_count()将训练用的随机数生成器的键train_key分割成多个子键每个子键对应一个设备 # 用于在分布式训练中为每个设备提供独立的随机数种子确保随机性在不同设备上的正确应用 train_prng_seed jax.random.split(train_key, numjax.local_device_count())# 同理将评估用的随机数生成器的键eval_key也按照本地设备数量进行分割为每个设备在评估过程中提供独立的随机数种子 eval_prng_seed jax.random.split(eval_key, numjax.local_device_count())# 使用jax.pmap对训练步函数train_step进行并行化处理指定按照batch轴进行并行使得训练可以在多个设备上并行执行提高训练效率 p_train_step jax.pmap(train_step, axis_namebatch)# 同样地对评估步函数eval_step进行并行化处理使其能在多个设备上并行执行评估操作也是按照batch轴进行并行 p_eval_step jax.pmap(eval_step, axis_namebatch)# 对初始的模型状态jax_model_states进行复制操作以适配分布式训练环境使得每个设备都有一份相同的初始模型状态副本 # 后续每个设备可以基于这份副本进行独立的参数更新等操作最终再进行汇总等处理 replicated_jax_states trainer_lib.replicate_model_state(jax_model_states)# 获取复制后的模型状态中的变量部分mdl_vars方便后续在训练和评估过程中对模型参数等变量进行操作和访问 replicated_jax_vars replicated_jax_states.mdl_vars# 初始化最优验证集损失值为一个较大的数1e7在训练过程中一旦发现更小的验证集损失值就会更新这个最优值并保存对应的模型状态 best_eval_loss 1e7# 记录当前已经执行的训练步数初始化为0随着训练循环的进行每执行一次训练步就会加1用于判断是否达到定期评估的步数等条件 step_count 0# 早停机制相关的耐心值patience初始化为0代表目前还没有出现验证集损失不再下降的情况 # 当验证集损失连续多次由PATIENCE变量定义没有下降时就会触发早停机制提前结束训练 patience 0# 设定总的训练轮次epoch数量这里设置为100表示模型将对整个训练数据集完整遍历100次可根据实际情况调整该值 NUM_EPOCHS 100# 设定早停机制中的耐心值即验证集损失连续多少次没有下降就触发早停这里设置为5意味着如果连续5次评估验证集损失都没有变小就停止训练 PATIENCE 5# 定义每经过多少个训练步就进行一次模型在验证集上的评估操作这里设置为1000步评估一次用于定期监控模型在验证集上的性能表现 TRAIN_STEPS_PER_EVAL 1000# 指定保存模型检查点的目录路径训练过程中当发现当前模型在验证集上的性能更好验证集损失更小时会将模型状态保存到这个目录下 CHECKPOINT_DIR /home/senrajat_google_com/vehicle_sales_finetune# 定义一个函数reshape_batch_for_pmap用于根据设备数量对批次数据进行形状重塑使其能正确地在分布式训练环境下分配到各个设备上 # 具体操作是将输入张量的第一个维度通常是批次大小维度按照设备数量进行划分重新调整张量的形状 def reshape_batch_for_pmap(batch, num_devices):def _reshape(input_tensor):bsize input_tensor.shape[0]residual_shape list(input_tensor.shape[1:])nbsize bsize // num_devicesreturn jnp.reshape(input_tensor, [num_devices, nbsize] residual_shape)return jax.tree.map(_reshape, batch)# 外层循环按照设定的训练轮次NUM_EPOCHS进行循环训练每个epoch代表对整个训练数据集的一次完整遍历 for epoch in range(NUM_EPOCHS):# 打印当前所处的训练轮次信息方便在训练过程中查看训练进度flushTrue用于立即输出信息不缓冲print(f__________________Epoch: {epoch}__________________, flushTrue)# 获取训练集批次数据的迭代器用于在当前epoch内逐个批次地遍历训练数据train_its train_batches.as_numpy_iterator()# 判断如果早停的耐心值patience达到设定的阈值PATIENCE则触发早停机制结束训练if patience PATIENCE:print(Early stopping., flushTrue)break# 内层循环遍历当前epoch的每个训练批次数据for batch in tqdm(train_its):train_losses []# 再次检查早停条件若满足则提前停止当前批次的训练if patience PATIENCE:print(Early stopping., flushTrue)break# 调用函数处理训练批次数据主要是对数据形状进行调整使其符合模型训练输入要求tbatch process_train_batch(batch)# 根据设备数量对处理后的批次数据进行重塑以便在分布式训练环境下能正确分配到各个设备上进行并行计算tbatch reshape_batch_for_pmap(tbatch, num_devices)# 执行分布式训练的一个训练步传入当前模型状态、训练随机数种子以及处理好的批次数据# 返回更新后的模型状态以及包含训练损失等信息的输出结果step_fun_outreplicated_jax_states, step_fun_out p_train_step(replicated_jax_states, train_prng_seed, tbatch)# 将当前训练步的损失值添加到训练损失列表train_losses中后续可以用于计算平均训练损失等操作train_losses.append(step_fun_out.loss[0])# 判断当前训练步数是否达到了设定的定期评估步数TRAIN_STEPS_PER_EVAL如果达到则进行模型在验证集上的评估操作if step_count % TRAIN_STEPS_PER_EVAL 0:# 打印当前训练步数下的平均训练损失值方便查看训练过程中模型在训练集上的损失变化情况flushTrue用于立即输出信息print(fTrain loss at step {step_count}: {np.mean(train_losses)},flushTrue,)# 清空训练损失列表为下一个评估周期准备避免累计之前的损失值影响下一次平均损失的计算train_losses []# 打印提示信息表示开始进行模型在验证集上的评估操作print(Starting eval., flushTrue)# 获取验证集批次数据的迭代器用于在验证过程中逐个批次地遍历验证数据val_its val_batches.as_numpy_iterator()# 初始化用于存储每个验证批次损失值的列表用于后续计算平均验证集损失eval_losses []# 遍历验证集的每个批次数据for ev_batch in tqdm(val_its):# 调用函数处理验证批次数据对数据形状进行调整使其符合模型评估输入要求ebatch process_eval_batch(ev_batch)# 根据设备数量对处理后的验证批次数据进行重塑适配分布式评估环境ebatch reshape_batch_for_pmap(ebatch, num_devices)# 执行分布式评估的一个评估步传入当前模型状态、评估随机数种子以及处理好的验证批次数据# 返回包含评估损失等信息的输出结果这里只关心损失值所以用下划线忽略其他返回信息_, step_fun_out p_eval_step(replicated_jax_states, eval_prng_seed, ebatch)# 将当前验证批次的损失值添加到验证损失列表eval_losses中eval_losses.append(step_fun_out.loss[0])# 计算平均验证集损失值通过对验证损失列表中的所有损失值求平均得到mean_loss np.mean(eval_losses)# 打印当前训练步数下的平均验证集损失值方便查看模型在验证集上的性能表现flushTrue用于立即输出信息print(fEval loss at step {step_count}: {mean_loss}, flushTrue)# 判断当前平均验证集损失值是否小于之前记录的最优验证集损失值best_eval_loss或者是否为NaN表示出现异常情况# 如果满足条件说明当前模型在验证集上的性能更好需要保存当前的模型状态作为最优模型状态if mean_loss best_eval_loss or np.isnan(mean_loss):# 更新最优验证集损失值为当前的平均验证集损失值best_eval_loss mean_loss# 打印提示信息表示正在保存模型检查点print(Saving checkpoint.)# 对复制后的模型状态进行处理将其转换为适合保存的格式可能涉及去除一些分布式相关的冗余信息等操作jax_state_for_saving py_utils.maybe_unreplicate_for_fully_replicated(replicated_jax_states)# 调用函数保存模型检查点将处理后的模型状态保存到指定的目录CHECKPOINT_DIR下并且设置覆盖已存在的同名检查点checkpoints.save_checkpoint(jax_state_for_saving, CHECKPOINT_DIR, overwriteTrue)# 将早停机制的耐心值重置为0因为当前模型性能有提升重新开始计算耐心值patience 0# 删除已经保存的模型状态变量释放内存空间避免内存占用过多del jax_state_for_saving# 手动触发垃圾回收及时回收不再使用的内存优化内存使用情况gc.collect()# 如果当前平均验证集损失值没有小于最优验证集损失值说明模型在验证集上的性能没有提升则增加早停机制的耐心值else:patience 1# 打印当前的耐心值方便查看早停机制的触发进度情况print(fpatience: {patience})# 每执行完一个训练步训练步数加1用于跟踪训练的进度以及判断是否达到定期评估等条件step_count 1# 以下代码用于加载根据验证集损失选出的最优微调后的模型检查点并在测试集上对其进行评估计算平均绝对误差MAE来衡量模型性能 ## Loading and evaluating the best (according to validation loss) finetuned checkpoint# 调用函数从指定的目录CHECKPOINT_DIR中恢复之前保存的最优模型状态将其赋值给train_state变量用于后续的模型参数更新和评估操作 train_state checkpoints.restore_checkpoint(jax_model_states, CHECKPOINT_DIR)# 打印恢复的模型状态对应的训练步数信息可用于查看加载的是哪个阶段保存的模型状态 print(train_state.step)# 将微调后模型的参数更新到原TimesFM模型中具体是将恢复的模型状态中的核心层参数赋值给原TimesFM模型的对应参数部分 # 使得原模型可以使用微调后的参数进行预测等操作用于在测试集上评估微调后的模型性能 tfm._train_state.mdl_vars[params] train_state.mdl_vars[params][core_layer]# 对TimesFM模型执行即时编译jit相关的解码操作可能是为了优化模型在后续预测过程中的性能加快预测速度 tfm.jit_decode()# 初始化用于存储测试集上每个批次预测结果与实际结果的平均绝对误差MAE的列表后续将通过循环计算并填充该列表 mae_losses []# 遍历测试集的每个批次数据用于计算在整个测试集上的平均绝对误差MAE for batch in tqdm(test_batches.as_numpy_iterator()):# 获取当前批次的输入数据通常是历史时间序列数据等作为模型预测的输入past batch[0]# 获取当前批次的实际值真实的目标数据例如实际销售量、销售价格等用于与模型预测结果进行对比计算误差actuals batch[3]# 使用更新参数后的TimesFM模型进行预测传入当前批次的输入数据以及一些相关的辅助参数这里辅助参数都设置为0具体含义可能取决于模型的定义# 返回预测结果forecasts以及其他可能的相关信息这里用下划线忽略_, forecasts tfm.forecast(list(past), [0] * past.shape[0])# 对预测结果进行维度处理选取与实际值维度对应的部分确保两者可以正确地进行误差计算这里假设实际值和预测值在维度上需要进行一定的对齐操作forecasts forecasts[:, 0 : actuals.shape[1], 5]# 计算当前批次预测结果与实际结果的平均绝对误差MAE通过计算预测值与实际值差值的绝对值的平均值得到# 将每个批次的MAE值添加到mae_losses列表中后续可以通过求平均得到整个测试集上的平均MAE值mae_losses.append(np.abs(forecasts - actuals).mean())print(fMAE: {np.mean(mae_losses)}) 请注意 上述代码中的路径等相关设置如 CHECKPOINT_DIR、数据文件路径等需要根据你的实际运行环境进行调整确保可以正确读写文件以及保存和加载模型检查点。代码中关于模型的一些超参数如学习率、训练轮数、批处理大小等都是示例值你可能需要根据车辆销售数据的特点、模型训练情况等进行多次试验和调整以获得更好的预测性能。假设数据文件 vehicle_sales.csv 的格式是比较规范的能被 pandas 的 read_csv 方法正常读取如果实际数据有特殊格式例如包含标题行、特定的日期格式、缺失值表示等情况可能需要进一步对数据读取部分进行修改完善。
http://www.hkea.cn/news/14386072/

相关文章:

  • 网站制作与网页建设wordpress做图片集
  • 本溪市住房和城乡建设局网站营销策划方案包括哪些内容
  • 网络营销网站建设论文郑州做网站设计的公司
  • 一个空间可以做几个网站外贸平台有哪些知乎
  • 做网站排名优化是怎么回事无锡做网站公司在哪里
  • 建站公司 万维科技网站界面 ui 设计答案
  • 8g流量网站百度SEO网站
  • 备案怎么关闭网站吗网站推广培训哪里好
  • APP和网站是一样吗郑州网站建设公司
  • 海外商城网站建设服装定制创业计划书
  • Python建网站的步骤做网站策划书
  • 郑州代做网站广州网站制作一般多少钱
  • 用博客网站做淘宝客微信商户平台登录入口
  • 建设企业网站怎样收费wordpress著名案例
  • wap网站设计方案南宁网络公司有哪些
  • 怎么开彩票网站做站长金山网站制作
  • 网站制作公司去哪找客户进度插件 wordpress
  • 在线建站wordpress 站长主题
  • 免费1级做爰片在线观看网站关于旅行的网站怎样做
  • 重庆网站建设制作费用名城建设有限公司网站
  • 门户网站简介八年级信息技术网站建立怎么做
  • 备案后网站可以改名吗wordpress 第一张图片不显示
  • 上海营销型网站建站建设网站需要哪些域名
  • 有哪些做数据分析的网站wordpress 登录 缓存
  • 泰州做网站软件做视频播放网站 赚钱
  • 女人和男人做床上爱网站永州静默管理
  • 做抽纸行业网站wordpress菜单对齐修改
  • 学校培训网站开发苏州公司网站建设价格
  • 网站建设项目实施方案建设路第3小学网站电话
  • 网站信息内容建设建设银行网站打不开别的网站可以吗