您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:PyTorch一小时掌握之神经网络气温预测篇

51自学网 2021-10-30 22:13:34
  python
这篇教程PyTorch一小时掌握之神经网络气温预测篇写得很实用,希望能帮到您。

概述

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

导包

import numpy as npimport pandas as pdimport datetimeimport matplotlib.pyplot as pltfrom pandas.plotting import register_matplotlib_convertersfrom sklearn.preprocessing import StandardScalerimport 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.001losses = []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 npimport pandas as pdimport datetimeimport matplotlib.pyplot as pltfrom pandas.plotting import register_matplotlib_convertersfrom sklearn.preprocessing import StandardScalerimport 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.001losses = []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 神经网络气温预测内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


浅析form标签中的GET和POST提交方式区别
如何利用饰器实现 Python 函数重载
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。