import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import SVR
from sklearn.preprocessing import StandardScaler
import torch
import torch.onnx
# 读取数据
def load_data():
with open('Position_Salaries.csv', 'r') as f:
data = np.loadtxt(f, delimiter=',', skiprows=1)
X = data[:, 1:2] # 特征变量
y = data[:, 2:] # 标签变量
return X, y
# 特征处理和标准化
def feature_normalization(X, y):
scaler_X = StandardScaler()
X = scaler_X.fit_transform(X)
scaler_y = StandardScaler()
y = scaler_y.fit_transform(y)
return X, y, scaler_X, scaler_y
# 创建SVR模型并训练
def train_model(X_train, y_train, kernel='rbf'):
regressor = SVR(kernel=kernel).fit(X_train, y_train)
return regressor
# 绘制散点图和预测曲线
def plot_result(X, y, regressor):
plt.scatter(X, y)
X_test = np.linspace(X.min(), X.max(), 100).reshape(-1, 1)
y_pred = regressor.predict(X_test)
plt.plot(X_test, y_pred, color='r')
plt.show()
# 保存模型
def save_model(model, path):
torch.save(model, path)
# 生成ONNX模型
def save_onnx(model, input_shape, output_path):
xx = torch.randn(input_shape)
with torch.no_grad():
torch.onnx.export(model,
xx,
output_path,
opset_version=11,
input_names=['input'],
output_names=['output'])
def modelrun():
model = torch.load('regressor.pt', map_location=torch.device('cpu'))#加载模型
score = model.predict([[-1.5]])#模型预测
print(score)
if __name__ == "__main__":
X, y = load_data()
X_train, y_train, scaler_X, scaler_y = feature_normalization(X, y)
regressor = train_model(X_train, y_train)
plot_result(X_train, y_train, regressor)
save_model(regressor, 'regressorr.pt')
#save_onnx(regressor, [1, 10], "regressor.onnx")
modelrun()
生成.pt,并运行模型预测