import torch import torch.nn as nn import numpy as np import pandas as pd

定义GRU模型类

class GRUModel(nn.Module): def init(self, input_dim, hidden_dim, output_dim, num_layers): super(GRUModel, self).init() self.hidden_dim = hidden_dim self.num_layers = num_layers self.gru = nn.GRU(input_dim, hidden_dim, num_layers, batch_first=True) self.fc = nn.Linear(hidden_dim, output_dim)

def forward(self, x):
    h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_dim).requires_grad_()
    out, _ = self.gru(x, h0.detach())
    out = self.fc(out[:, -1, :])
    return out

定义训练函数

def train_model(model, train_data, train_labels, num_epochs, learning_rate): criterion = nn.MSELoss() optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)

for epoch in range(num_epochs):
    outputs = model(train_data)
    optimizer.zero_grad()
    loss = criterion(outputs, train_labels)
    loss.backward()
    optimizer.step()

    if epoch % 100 == 0:
        print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))

return model

读入csv文件

data = pd.read_csv('your_file_path.csv')

提取经纬度数据

latitudes = data['latitude'].values longitudes = data['longitude'].values

将经纬度数据组合成训练数据

train_data = [] for i in range(len(latitudes)-seq_length): temp = [] for j in range(seq_length): temp.append([latitudes[i+j], longitudes[i+j]]) train_data.append(temp) train_data = np.array(train_data)

将最后一组经纬度作为标签

train_labels = np.array([[latitudes[i+seq_length], longitudes[i+seq_length]] for i in range(len(latitudes)-seq_length)])

参数设置

input_dim = 2 hidden_dim = 32 output_dim = 2 num_layers = 1 learning_rate = 0.01 num_epochs = 500 seq_length = 10 # 序列长度

初始化模型并进行训练

model = GRUModel(input_dim, hidden_dim, output_dim, num_layers) trained_model = train_model(model, torch.tensor(train_data).float(), torch.tensor(train_labels).float(), num_epochs, learning_rate)

测试模型

test_data = np.array([[[latitudes[i+j], longitudes[i+j]] for j in range(seq_length)]]) predicted_trajectory = trained_model(torch.tensor(test_data).float()) print('Predicted trajectory:', predicted_trajectory.detach().numpy())

基于GRU模型的经纬度轨迹预测

原文地址: https://www.cveoy.top/t/topic/lPun 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录