用Pytorch实现利用前馈神经网络预测共享单车的使用数量过程

时间: 2023-07-14 16:14:14 浏览: 59
好的,下面是一个简单的前馈神经网络模型的实现,可以用来预测共享车的使用数量过程。首先,我们需要准备数据集,并对数据进行预处理。 数据集可以从UCI Machine Learning Repository上下载,包含了每小时的共享单车使用数量以及相关的天气和时间信息。我们将数据集分为训练集和测试集,并使用特征缩放将所有特征值缩放到0到1的范围内。 ```python import pandas as pd import numpy as np import torch from torch.utils.data import Dataset, DataLoader from sklearn.preprocessing import MinMaxScaler # 加载数据集 url = "http://archive.ics.uci.edu/ml/machine-learning-databases/00275/Bike-Sharing-Dataset.zip" data = pd.read_csv(url, compression='zip', header=0, sep=',', quotechar='"') # 预处理数据 data = data.drop(['instant', 'dteday', 'casual', 'registered'], axis=1) scaler = MinMaxScaler() data[['cnt', 'temp', 'atemp', 'hum', 'windspeed']] = scaler.fit_transform(data[['cnt', 'temp', 'atemp', 'hum', 'windspeed']]) # 划分数据集 train_data = data.sample(frac=0.8) test_data = data.drop(train_data.index) # 转换为PyTorch张量 train_targets = torch.tensor(train_data['cnt'].values).float() test_targets = torch.tensor(test_data['cnt'].values).float() train_features = torch.tensor(train_data.drop(['cnt'], axis=1).values).float() test_features = torch.tensor(test_data.drop(['cnt'], axis=1).values).float() # 创建数据集类 class BikeSharingDataset(Dataset): def __init__(self, features, targets): self.features = features self.targets = targets def __len__(self): return len(self.features) def __getitem__(self, idx): return self.features[idx], self.targets[idx] # 创建数据加载器 train_dataset = BikeSharingDataset(train_features, train_targets) test_dataset = BikeSharingDataset(test_features, test_targets) train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True) test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False) ``` 接下来我们可以定义模型了。这里我们使用一个具有两个隐藏层的前馈神经网络,激活函数为ReLU。 ```python class NeuralNet(torch.nn.Module): def __init__(self, input_size, hidden_size, num_hidden_layers): super(NeuralNet, self).__init__() self.layers = [] self.layers.append(torch.nn.Linear(input_size, hidden_size)) self.layers.append(torch.nn.ReLU()) for i in range(num_hidden_layers-1): self.layers.append(torch.nn.Linear(hidden_size, hidden_size)) self.layers.append(torch.nn.ReLU()) self.layers.append(torch.nn.Linear(hidden_size, 1)) self.layers = torch.nn.Sequential(*self.layers) def forward(self, x): return self.layers(x) ``` 接下来是训练代码: ```python def train(model, optimizer, loss_fn, train_loader, device): model.train() total_loss = 0 for batch_idx, (data, target) in enumerate(train_loader): data, target = data.to(device), target.to(device) optimizer.zero_grad() output = model(data).squeeze() loss = loss_fn(output, target) loss.backward() optimizer.step() total_loss += loss.item() return total_loss / len(train_loader) def test(model, loss_fn, test_loader, device): model.eval() total_loss = 0 with torch.no_grad(): for batch_idx, (data, target) in enumerate(test_loader): data, target = data.to(device), target.to(device) output = model(data).squeeze() loss = loss_fn(output, target) total_loss += loss.item() return total_loss / len(test_loader) # 设置超参数 input_size = train_features.shape[1] hidden_size = 64 num_hidden_layers = 2 learning_rate = 0.001 num_epochs = 100 # 定义模型、损失函数和优化器 model = NeuralNet(input_size, hidden_size, num_hidden_layers).to(device) loss_fn = torch.nn.MSELoss() optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate) # 训练模型 for epoch in range(num_epochs): train_loss = train(model, optimizer, loss_fn, train_loader, device) test_loss = test(model, loss_fn, test_loader, device) print("Epoch {} | Train Loss {:.4f} | Test Loss {:.4f}".format(epoch+1, train_loss, test_loss)) ``` 最后,我们可以使用训练好的模型进行预测: ```python # 使用训练好的模型进行预测 test_predictions = model(test_features.to(device)).squeeze().detach().cpu().numpy() test_targets = test_targets.numpy() # 可视化预测结果 import matplotlib.pyplot as plt plt.plot(test_targets, label="Actual") plt.plot(test_predictions, label="Predicted") plt.legend() plt.show() ``` 这样就可以利用前馈神经网络预测共享单车的使用数量过程了。

相关推荐

最新推荐

recommend-type

pytorch下使用LSTM神经网络写诗实例

今天小编就为大家分享一篇pytorch下使用LSTM神经网络写诗实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

PyTorch上搭建简单神经网络实现回归和分类的示例

本篇文章主要介绍了PyTorch上搭建简单神经网络实现回归和分类的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
recommend-type

使用 pytorch 创建神经网络拟合sin函数的实现

主要介绍了使用 pytorch 创建神经网络拟合sin函数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

关于pytorch中全连接神经网络搭建两种模式详解

今天小编就为大家分享一篇关于pytorch中全连接神经网络搭建两种模式详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

使用pytorch实现论文中的unet网络

设计神经网络的一般步骤: 1. 设计框架 2. 设计骨干网络 Unet网络设计的步骤: 1. 设计Unet网络工厂模式 2. 设计编解码结构 3. 设计卷积模块 4. unet实例模块 Unet网络最重要的特征: 1. 编解码结构。 2. 解码结构,...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用matlab绘制高斯色噪声情况下的频率估计CRLB,其中w(n)是零均值高斯色噪声,w(n)=0.8*w(n-1)+e(n),e(n)服从零均值方差为se的高斯分布

以下是用matlab绘制高斯色噪声情况下频率估计CRLB的代码: ```matlab % 参数设置 N = 100; % 信号长度 se = 0.5; % 噪声方差 w = zeros(N,1); % 高斯色噪声 w(1) = randn(1)*sqrt(se); for n = 2:N w(n) = 0.8*w(n-1) + randn(1)*sqrt(se); end % 计算频率估计CRLB fs = 1; % 采样频率 df = 0.01; % 频率分辨率 f = 0:df:fs/2; % 频率范围 M = length(f); CRLB = zeros(M,1); for
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。