网页设计与网站建设作品,做网站的几个必要步骤,免费的云服务器哪家好,网站开发包括1.Runner类
一个任务应用机器学习方法流程#xff1a;
数据集构建
模型构建
损失函数定义
优化器
模型训练
模型评价
模型预测
所以根据以上#xff0c;我们把机器学习模型基本要素封装成一个Runner类#xff08;加上模型保存、模型加载等功能。#xff09; Runne…1.Runner类
一个任务应用机器学习方法流程
数据集构建
模型构建
损失函数定义
优化器
模型训练
模型评价
模型预测
所以根据以上我们把机器学习模型基本要素封装成一个Runner类加上模型保存、模型加载等功能。 Runner类的成员函数定义如下 __init__函数实例化Runner类时默认调用需要传入模型、损失函数、优化器和评价指标等train函数完成模型训练指定模型训练需要的训练集和验证集evaluate函数通过对训练好的模型进行评价在验证集或测试集上查看模型训练效果predict函数选取一条数据对训练好的模型进行预测save_model函数模型在训练过程和训练结束后需要进行保存load_model函数调用加载之前保存的模型。 class Runner(object):def __init__(self, model, optimizer, loss_fn, metric):self.model model # 模型self.optimizer optimizer # 优化器self.loss_fn loss_fn # 损失函数 self.metric metric # 评估指标# 模型训练def train(self, train_dataset, dev_datasetNone, **kwargs):pass# 模型评价def evaluate(self, data_set, **kwargs):pass# 模型预测def predict(self, x, **kwargs):pass# 模型保存def save_model(self, save_path):pass# 模型加载def load_model(self, model_path):pass
1.2Runner类流程
①初始化传入模型、损失函数、优化器和评价指标
②训练基于训练集调用train()函数训练模型基于验证集通过evaluate()函数验证模型。通过save_model()函数保存模型
③评价基于测试集通过evaluate()函数得到指标性能。
④预测给定样本通过predict()函数得到该样本标签 2.案例波士顿房价预测
波士顿房价预测基于线性回归模型和Runner类实现
2.1数据处理
2.1.1构建
开源库pandas导入。
import pandas as pd # 开源数据分析和操作工具# 利用pandas加载波士顿房价的数据集
datapd.read_csv(/home/aistudio/work/boston_house_prices.csv)
# 预览前5行数据
data.head()
2.1.2数据集划分
训练集 和 测试集。
import paddlepaddle.seed(10)# 划分训练集和测试集
def train_test_split(X, y, train_percent0.8):n len(X)shuffled_indices paddle.randperm(n) # 返回一个数值在0到n-1、随机排列的1-D Tensortrain_set_size int(n*train_percent)train_indices shuffled_indices[:train_set_size]test_indices shuffled_indices[train_set_size:]X X.valuesy y.valuesX_trainX[train_indices]y_train y[train_indices]X_test X[test_indices]y_test y[test_indices]return X_train, X_test, y_train, y_test X data.drop([MEDV], axis1)
y data[MEDV]X_train, X_test, y_train, y_test train_test_split(X,y)# X_train每一行是个样本shape[N,D]
2.1.3特征化工程
避免数据之间的可比性对特征数据进行归一化处理将数据缩放到[0, 1]区间
import paddleX_train paddle.to_tensor(X_train,dtypefloat32)
X_test paddle.to_tensor(X_test,dtypefloat32)
y_train paddle.to_tensor(y_train,dtypefloat32)
y_test paddle.to_tensor(y_test,dtypefloat32)X_min paddle.min(X_train,axis0)
X_max paddle.max(X_train,axis0)X_train (X_train-X_min)/(X_max-X_min)X_test (X_test-X_min)/(X_max-X_min)# 训练集构造
train_dataset(X_train,y_train)
# 测试集构造
test_dataset(X_test,y_test)
2.2模型构建
rom nndl.op import Linear# 模型实例化
input_size 12
modelLinear(input_size)
2.3完善Runner类
测试集上使用MSE对模型性能进行评估。本案例利用飞桨框架提供的MSELoss API实现
import paddle
import os
from nndl.opitimizer import optimizer_lsmclass Runner(object):def __init__(self, model, optimizer, loss_fn, metric):# 优化器和损失函数为None,不再关注# 模型self.modelmodel# 评估指标self.metric metric# 优化器self.optimizer optimizerdef train(self,dataset,reg_lambda,model_dir):X,y datasetself.optimizer(self.model,X,y,reg_lambda)# 保存模型self.save_model(model_dir)def evaluate(self, dataset, **kwargs):X,y datasety_pred self.model(X)result self.metric(y_pred, y)return resultdef predict(self, X, **kwargs):return self.model(X)def save_model(self, model_dir):if not os.path.exists(model_dir):os.makedirs(model_dir)params_saved_path os.path.join(model_dir,params.pdtensor)paddle.save(model.params,params_saved_path)def load_model(self, model_dir):params_saved_path os.path.join(model_dir,params.pdtensor)self.model.paramspaddle.load(params_saved_path)optimizer optimizer_lsm# 实例化Runner
runner Runner(model, optimizeroptimizer,loss_fnNone, metricmse_loss)
2.4模型训练
组装完成Runner之后我们将开始进行模型训练、评估和测试
# 模型保存文件夹
saved_dir /home/aistudio/work/models# 启动训练
runner.train(train_dataset,reg_lambda0,model_dirsaved_dir)columns_list data.columns.to_list()
weights runner.model.params[w].tolist()
b runner.model.params[b].item()for i in range(len(weights)):print(columns_list[i],weight:,weights[i])print(b:,b)
2.5模型测试
加载训练好的模型参数在测试集上得到模型的MSE指标
# 加载模型权重
runner.load_model(saved_dir)mse runner.evaluate(test_dataset)
print(MSE:, mse.item())
2.6模型预测
load_model函数加载保存好的模型使用predict进行模型预测
runner.load_model(saved_dir)
pred runner.predict(X_test[:1])
print(真实房价,y_test[:1].item())
print(预测的房价,pred.item()) 真实房价 33.099998474121094
预测的房价 33.04654312133789