PyTorch 学习:线性回归

栏目: Python · 发布时间: 7年前

内容简介:PyTorch 学习:线性回归

简单的一个机器学习应用到日常的游戏运维工作:通过游戏的在线人数来预测游戏服的 CPU 利用率。

首先从 bosun 获取数据,在线人数和对应的 CPU 利用率,注意归一化:

import json  
import requests

online_payload = 'q("sum:2m-avg:application.game.online{node=xxx}", "25h", "1h")'  
cpu_payload = 'q("sum:2m-avg:rate{counter,,1}:linux.proc.cpu{name=xxx}", "25h", "1h")'

def get_data(payload):  
    resp = requests.post('http://BosunServer:8070/api/expr?date=&time=', data=payload)
    js = json.loads(resp.text)
    values = js['Results'][0]['Value']
    max_ = max([values[k] for k in values.keys()]),
    return [[values[k]] for k in sorted(values.keys())], max_

X, maxX = get_data(online_payload)  
Y, maxY = get_data(cpu_payload)

trainX = [[float(x[0])/maxX[0]] for x in X]  
trainY = [[float(y[0])/maxY[0]] for y in Y]

len(X), len(Y), maxX, maxY

然后转成 Variable

import matplotlib.pyplot as plt

plt.rcParams['figure.figsize'] = (12,12)

import torch  
from torch.autograd import Variable  
import torch.nn.functional as F

x_data = Variable(torch.Tensor(trainX))  
y_data = Variable(torch.Tensor(trainY))

搭模型:

class NET(torch.nn.Module):

    def __init__(self):
        super(NET, self).__init__()
        self.hidden = torch.nn.Linear(1, 10)
        self.predict = torch.nn.Linear(10, 1)

    def forward(self, x):
        out = F.relu(self.hidden(x))
        out = self.predict(out)
        return out

net = NET()

简单的两层线性层:

NET (  
  (hidden): Linear (1 -> 10)
  (predict): Linear (10 -> 1)
)

损失函数 和 优化器:

criterion = torch.nn.MSELoss()  
optimizer = torch.optim.SGD(net.parameters(), lr=0.5)

训练喽:

for epoch in range(100):  
    y_pred = net(x_data)
    loss = criterion(y_pred, y_data)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    if epoch % 10 == 0:
        plt.subplot(5, 2, (epoch/10)+1)
        plt.scatter(x_data.data.numpy(), y_data.data.numpy())
        plt.plot(x_data.data.numpy(), y_pred.data.numpy(), 'r-', lw=5)
        plt.text(0.5, 0, 'Loss=%.4f' % loss.data[0], fontdict={'size': 10, 'color':  'red'}, position=(0.5, 0.5))
    if loss.data[0] < 0.0015:
        break

PyTorch 学习:线性回归

可以看到,loss 逐渐减少,预测曲线逐渐拟合到真实的数据上。

好了,可以用来预测新数据了,因为之前归一化了,所以要注意还原:

def pred_cpu(online):  
    cpu_pred = net(Variable(torch.Tensor([[float(online)/maxX[0]]])))
    return cpu_pred.data[0][0]*maxY[0]

pred_cpu(300)

输出:52.789943492412576,对比监控图上的值 52.53 ,还是挺准确的。

保存:

torch.save(net, 'game_online_and_cpu_model')

# 下次加载:
# net2 = torch.load('game_online_and_cpu_model')

应用场景?

主要是通过在线人数,来判断当前 CPU 利用率是否在符合统计学的范围内。额,好像用处不太大,其实主要是用来学习 PyTorch 。。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据分析技术白皮书

数据分析技术白皮书

伍海凤、刘鹏、杨佳静、马师慧Sara、李博、Shirley Song、Zinc、李晓艳 / 2016-8-11 / 0

关于数据分析技术白皮书(Analytics Book 中文版),主要内容围绕: 1. 分析(Analytics):网站分析 & APP分析 2. 谷歌分析工具的原理、部署与使用 3. 开源网站分析工具的原理、部署与使用 4. Log日志分析原理 5. 网站分析的维度与指标定义 6. 如何炼成为一个互联网数据分析师 请访问书的数据分析技术白皮书官网“免费”阅......一起来看看 《数据分析技术白皮书》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具