• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PyTorch一小时掌握之神经网络气温预测篇

    概述

    具体的案例描述在此就不多赘述. 同一数据集我们在机器学习里的随机森林模型中已经讨论过.

    导包

    import numpy as np
    import pandas as pd
    import datetime
    import matplotlib.pyplot as plt
    from pandas.plotting import register_matplotlib_converters
    from sklearn.preprocessing import StandardScaler
    import torch
    

    数据读取

    # ------------------1. 数据读取------------------
    
    # 读取数据
    data = pd.read_csv("temps.csv")
    
    # 看看数据长什么样子
    print(data.head())
    
    # 查看数据维度
    print("数据维度:", data.shape)
    
    # 产看数据类型
    print("数据类型:", type(data))

    输出结果:
    year month day week temp_2 temp_1 average actual friend
    0 2016 1 1 Fri 45 45 45.6 45 29
    1 2016 1 2 Sat 44 45 45.7 44 61
    2 2016 1 3 Sun 45 44 45.8 41 56
    3 2016 1 4 Mon 44 41 45.9 40 53
    4 2016 1 5 Tues 41 40 46.0 44 41
    数据维度: (348, 9)
    数据类型: class 'pandas.core.frame.DataFrame'>

    数据预处理

    # ------------------2. 数据预处理------------------
    
    # datetime 格式
    dates = pd.PeriodIndex(year=data["year"], month=data["month"], day=data["day"], freq="D").astype(str)
    dates = [datetime.datetime.strptime(date, "%Y-%m-%d") for date in dates]
    print(dates[:5])
    
    # 编码转换
    data = pd.get_dummies(data)
    print(data.head())
    
    # 画图
    plt.style.use("fivethirtyeight")
    register_matplotlib_converters()
    
    # 标签
    labels = np.array(data["actual"])
    
    # 取消标签
    data = data.drop(["actual"], axis= 1)
    print(data.head())
    
    # 保存一下列名
    feature_list = list(data.columns)
    
    # 格式转换
    data_new = np.array(data)
    
    data_new  = StandardScaler().fit_transform(data_new)
    print(data_new[:5])

    输出结果:
    [datetime.datetime(2016, 1, 1, 0, 0), datetime.datetime(2016, 1, 2, 0, 0), datetime.datetime(2016, 1, 3, 0, 0), datetime.datetime(2016, 1, 4, 0, 0), datetime.datetime(2016, 1, 5, 0, 0)]
    year month day temp_2 ... week_Sun week_Thurs week_Tues week_Wed
    0 2016 1 1 45 ... 0 0 0 0
    1 2016 1 2 44 ... 0 0 0 0
    2 2016 1 3 45 ... 1 0 0 0
    3 2016 1 4 44 ... 0 0 0 0
    4 2016 1 5 41 ... 0 0 1 0

    [5 rows x 15 columns]
    year month day temp_2 ... week_Sun week_Thurs week_Tues week_Wed
    0 2016 1 1 45 ... 0 0 0 0
    1 2016 1 2 44 ... 0 0 0 0
    2 2016 1 3 45 ... 1 0 0 0
    3 2016 1 4 44 ... 0 0 0 0
    4 2016 1 5 41 ... 0 0 1 0

    [5 rows x 14 columns]
    [[ 0. -1.5678393 -1.65682171 -1.48452388 -1.49443549 -1.3470703
    -1.98891668 2.44131112 -0.40482045 -0.40961596 -0.40482045 -0.40482045
    -0.41913682 -0.40482045]
    [ 0. -1.5678393 -1.54267126 -1.56929813 -1.49443549 -1.33755752
    0.06187741 -0.40961596 -0.40482045 2.44131112 -0.40482045 -0.40482045
    -0.41913682 -0.40482045]
    [ 0. -1.5678393 -1.4285208 -1.48452388 -1.57953835 -1.32804474
    -0.25855917 -0.40961596 -0.40482045 -0.40961596 2.47023092 -0.40482045
    -0.41913682 -0.40482045]
    [ 0. -1.5678393 -1.31437034 -1.56929813 -1.83484692 -1.31853195
    -0.45082111 -0.40961596 2.47023092 -0.40961596 -0.40482045 -0.40482045
    -0.41913682 -0.40482045]
    [ 0. -1.5678393 -1.20021989 -1.8236209 -1.91994977 -1.30901917
    -1.2198689 -0.40961596 -0.40482045 -0.40961596 -0.40482045 -0.40482045
    2.38585576 -0.40482045]]

    构建网络模型

    # ------------------3. 构建网络模型------------------
    
    x = torch.tensor(data_new)
    y = torch.tensor(labels)
    
    # 权重参数初始化
    weights1 = torch.randn((14,128), dtype=float, requires_grad= True)
    biases1 = torch.randn(128, dtype=float, requires_grad= True)
    weights2 = torch.randn((128,1), dtype=float, requires_grad= True)
    biases2 = torch.randn(1, dtype=float, requires_grad= True)
    
    learning_rate = 0.001
    losses = []
    
    for i in range(1000):
        # 计算隐层
        hidden = x.mm(weights1) + biases1
        # 加入激活函数
        hidden = torch.relu(hidden)
        # 预测结果
        predictions = hidden.mm(weights2) + biases2
        # 计算损失
        loss = torch.mean((predictions - y) ** 2)
    
        # 打印损失值
        if i % 100 == 0:
            print("loss:", loss)
        # 反向传播计算
        loss.backward()
    
        # 更新参数
        weights1.data.add_(-learning_rate * weights1.grad.data)
        biases1.data.add_(-learning_rate * biases1.grad.data)
        weights2.data.add_(-learning_rate * weights2.grad.data)
        biases2.data.add_(-learning_rate * biases2.grad.data)
    
        # 每次迭代清空
        weights1.grad.data.zero_()
        biases1.grad.data.zero_()
        weights2.grad.data.zero_()
        biases2.grad.data.zero_()

    输出结果:
    loss: tensor(4746.8598, dtype=torch.float64, grad_fn=MeanBackward0>)
    loss: tensor(156.5691, dtype=torch.float64, grad_fn=MeanBackward0>)
    loss: tensor(148.9419, dtype=torch.float64, grad_fn=MeanBackward0>)
    loss: tensor(146.1035, dtype=torch.float64, grad_fn=MeanBackward0>)
    loss: tensor(144.5652, dtype=torch.float64, grad_fn=MeanBackward0>)
    loss: tensor(143.5376, dtype=torch.float64, grad_fn=MeanBackward0>)
    loss: tensor(142.7823, dtype=torch.float64, grad_fn=MeanBackward0>)
    loss: tensor(142.2151, dtype=torch.float64, grad_fn=MeanBackward0>)
    loss: tensor(141.7770, dtype=torch.float64, grad_fn=MeanBackward0>)
    loss: tensor(141.4294, dtype=torch.float64, grad_fn=MeanBackward0>)

    数据可视化

    # ------------------4. 数据可视化------------------
    
    def graph1():
        # 创建子图
        f, ax = plt.subplots(2, 2, figsize=(10, 10))
    
        # 标签值
        ax[0, 0].plot(dates, labels, color="#ADD8E6")
        ax[0, 0].set_xticks([""])
        ax[0, 0].set_ylabel("Temperature")
        ax[0, 0].set_title("Max Temp")
    
        # 昨天
        ax[0, 1].plot(dates, data["temp_1"], color="#87CEFA")
        ax[0, 1].set_xticks([""])
        ax[0, 1].set_ylabel("Temperature")
        ax[0, 1].set_title("Previous Max Temp")
    
        # 前天
        ax[1, 0].plot(dates, data["temp_2"], color="#00BFFF")
        ax[1, 0].set_xticks([""])
        ax[1, 0].set_xlabel("Date")
        ax[1, 0].set_ylabel("Temperature")
        ax[1, 0].set_title("Two Days Prior Max Temp")
    
        # 朋友
        ax[1, 1].plot(dates, data["friend"], color="#1E90FF")
        ax[1, 1].set_xticks([""])
        ax[1, 1].set_xlabel("Date")
        ax[1, 1].set_ylabel("Temperature")
        ax[1, 1].set_title("Friend Estimate")
    
        plt.show()
    

    输出结果:

    完整代码

    import numpy as np
    import pandas as pd
    import datetime
    import matplotlib.pyplot as plt
    from pandas.plotting import register_matplotlib_converters
    from sklearn.preprocessing import StandardScaler
    import torch
    
    
    # ------------------1. 数据读取------------------
    
    # 读取数据
    data = pd.read_csv("temps.csv")
    
    # 看看数据长什么样子
    print(data.head())
    
    # 查看数据维度
    print("数据维度:", data.shape)
    
    # 产看数据类型
    print("数据类型:", type(data))
    
    # ------------------2. 数据预处理------------------
    
    # datetime 格式
    dates = pd.PeriodIndex(year=data["year"], month=data["month"], day=data["day"], freq="D").astype(str)
    dates = [datetime.datetime.strptime(date, "%Y-%m-%d") for date in dates]
    print(dates[:5])
    
    # 编码转换
    data = pd.get_dummies(data)
    print(data.head())
    
    # 画图
    plt.style.use("fivethirtyeight")
    register_matplotlib_converters()
    
    # 标签
    labels = np.array(data["actual"])
    
    # 取消标签
    data = data.drop(["actual"], axis= 1)
    print(data.head())
    
    # 保存一下列名
    feature_list = list(data.columns)
    
    # 格式转换
    data_new = np.array(data)
    
    data_new  = StandardScaler().fit_transform(data_new)
    print(data_new[:5])
    
    # ------------------3. 构建网络模型------------------
    
    x = torch.tensor(data_new)
    y = torch.tensor(labels)
    
    # 权重参数初始化
    weights1 = torch.randn((14,128), dtype=float, requires_grad= True)
    biases1 = torch.randn(128, dtype=float, requires_grad= True)
    weights2 = torch.randn((128,1), dtype=float, requires_grad= True)
    biases2 = torch.randn(1, dtype=float, requires_grad= True)
    
    learning_rate = 0.001
    losses = []
    
    for i in range(1000):
        # 计算隐层
        hidden = x.mm(weights1) + biases1
        # 加入激活函数
        hidden = torch.relu(hidden)
        # 预测结果
        predictions = hidden.mm(weights2) + biases2
        # 计算损失
        loss = torch.mean((predictions - y) ** 2)
    
        # 打印损失值
        if i % 100 == 0:
            print("loss:", loss)
        # 反向传播计算
        loss.backward()
    
        # 更新参数
        weights1.data.add_(-learning_rate * weights1.grad.data)
        biases1.data.add_(-learning_rate * biases1.grad.data)
        weights2.data.add_(-learning_rate * weights2.grad.data)
        biases2.data.add_(-learning_rate * biases2.grad.data)
    
        # 每次迭代清空
        weights1.grad.data.zero_()
        biases1.grad.data.zero_()
        weights2.grad.data.zero_()
        biases2.grad.data.zero_()
    
    # ------------------4. 数据可视化------------------
    
    def graph1():
        # 创建子图
        f, ax = plt.subplots(2, 2, figsize=(10, 10))
    
        # 标签值
        ax[0, 0].plot(dates, labels, color="#ADD8E6")
        ax[0, 0].set_xticks([""])
        ax[0, 0].set_ylabel("Temperature")
        ax[0, 0].set_title("Max Temp")
    
        # 昨天
        ax[0, 1].plot(dates, data["temp_1"], color="#87CEFA")
        ax[0, 1].set_xticks([""])
        ax[0, 1].set_ylabel("Temperature")
        ax[0, 1].set_title("Previous Max Temp")
    
        # 前天
        ax[1, 0].plot(dates, data["temp_2"], color="#00BFFF")
        ax[1, 0].set_xticks([""])
        ax[1, 0].set_xlabel("Date")
        ax[1, 0].set_ylabel("Temperature")
        ax[1, 0].set_title("Two Days Prior Max Temp")
    
        # 朋友
        ax[1, 1].plot(dates, data["friend"], color="#1E90FF")
        ax[1, 1].set_xticks([""])
        ax[1, 1].set_xlabel("Date")
        ax[1, 1].set_ylabel("Temperature")
        ax[1, 1].set_title("Friend Estimate")
    
        plt.show()
    
    
    if __name__ == "__main__":
        graph1()
    

    到此这篇关于PyTorch一小时掌握之神经网络气温预测篇的文章就介绍到这了,更多相关PyTorch 神经网络气温预测内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • PyTorch一小时掌握之autograd机制篇
    • PyTorch一小时掌握之神经网络分类篇
    • PyTorch一小时掌握之图像识别实战篇
    • PyTorch一小时掌握之基本操作篇
    上一篇:浅析form标签中的GET和POST提交方式区别
    下一篇:如何利用饰器实现 Python 函数重载
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    PyTorch一小时掌握之神经网络气温预测篇 PyTorch,一小时,掌握,之,神经网络,