让我们先来设一个场景:
你拥有一个书店,现在你要统计书店每天卖了多少本书,你可能写一个简单的列表来记录:
[45、55、30]
过了一段时间后,你还想分类记录每天不同类型的书销量如何,你可能记录如下:
小说 | 科学 | 艺术 | |
---|---|---|---|
第一天 | 10 | 20 | 30 |
第二天 | 15 | 25 | 35 |
第三天 | 5 | 10 | 15 |
又过了一段时间, 除了销量外,你还想进一步记录每天各阶段每个类型书的访客数、以及带来的收,这样表格记录就变得更加复杂了:
时间\数据 | 销量 | 访客数 | 收入 | ||||||
---|---|---|---|---|---|---|---|---|---|
小说 | 科学 | 艺术 | 小说 | 科学 | 艺术 | 小说 | 科学 | 艺术 | |
早上 | 10 | 20 | 30 | 15 | 25 | 35 | 100 | 200 | 300 |
中午 | 12 | 22 | 32 | 18 | 28 | 38 | 120 | 220 | 320 |
晚上 | 8 | 18 | 28 | 13 | 23 | 33 | 80 | 180 | 280 |
基于第一种场景,我们可以通过销量来预测未来门店书籍的销量;
基于第二种场景,我们可以根据不同书籍的销量对比,来对不同类型书籍作库存的管理和需求设计;
基于第三种场景,我们则能构建更多、更复杂的预测模型,比如:
是否还有更复杂的“表”、更复杂的统计场景呢??
当然,还能增加额外的维度:不同地区的书店、再细化书的类别、细化时间维度等等。
信息量太大了,以至于一般的计算可能无法满足了,这时,就需要用到 “深度学习”!!
其中,用来计算这些信息量的深度框架就是本篇的主角 —— PyTorch ~
直接上手,不多BB ~~
查一下之前装的:Python,没问题,通过 pip 安装 torchvision
运行:
from __future__ import print_function
import torch
x= torch.rand(5,3)
print(x)
上述代码先导入PyTorch库,然后创建了一个5行3列的张量(或者称作矩阵)。
基于上述书店卖书的例子,举一个实践示例:
假设我们有过去五天每种书籍(小说、科学、艺术)的销售收入数据,现在将尝试预测第六天的总收入。
import torch
import torch.nn as nn
import torch.optim as optim
# 假设的历史销售数据(每天的收入:小说,科学,艺术)
past_sales_data = torch.tensor([
[100, 200, 300],
[110, 210, 310],
[120, 220, 320],
[130, 230, 330],
[140, 240, 340],
], dtype=torch.float32)
# 标准化输入数据
mean = past_sales_data.mean(dim=0)
std = past_sales_data.std(dim=0)
normalized_sales_data = (past_sales_data - mean) / std
# 总收入(每天的总和)
total_income = past_sales_data.sum(axis=1)
# 标准化输出数据
mean_total_income = total_income.mean()
std_total_income = total_income.std()
normalized_total_income = (total_income - mean_total_income) / std_total_income
# 构建一个简单的线性模型
model = nn.Linear(3, 1)
# 损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
# 训练模型
epochs = 1000
for epoch in range(epochs):
# 预测
predictions = model(normalized_sales_data)
# 计算损失
loss = criterion(predictions, normalized_total_income.unsqueeze(1))
# 反向传播和优化
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 使用模型进行预测
# 假设第六天的销售数据
day_6_sales = torch.tensor([150, 250, 350], dtype=torch.float32)
# 对新数据进行与训练数据相同的标准化处理
normalized_day_6_sales = (day_6_sales - mean) / std
predicted_income_normalized = model(normalized_day_6_sales.unsqueeze(0))
# 反标准化预测结果以得到实际预测收入
predicted_income = predicted_income_normalized.item() * std_total_income + mean_total_income
print(f"预测的第六天总收入: {predicted_income:.2f}元")
运行结果:
如果报错:Error "Import Error: No module named numpy" on Windows
,就是没装 numpy,安装即可。
除此之外建议:
为了更好的处理Python版本问题、以及第三方包安装问题,这里推荐下载:
—— 先下载 Anaconda,地址:Anaconda3-5.1.0-Windows-x86_64.exe
一直 next ,然后下载完成。
配置环境变量:
然后就妥了,打开:Anaconda Navigator
OK,以上便是本篇分享。点赞关注评论,为好文助力👍 我是掘金安东尼,安东尼陪你一起度过漫长编程岁月 🌏