代码拉取完成,页面将自动刷新
基于CNN_A_LSTM的小时天气预测(有问题请联系qq:869114539,vx:15234405680)
文件 | 用途 |
---|---|
code目录 | 代码 |
Houston.csv | 数据集 |
util.py | 工具类 |
基于torch框架完成
模型 | 参数 |
---|---|
RNN | 神经元个数=32 步长=24 |
LSTM | 神经元个数=32 步长=24 |
GRU | 神经元个数=64 步长=24 |
CNN_LSTM | 神经元个数=64 步长=24 |
CNN_A_LSTM | 神经元个数=64 步长=24 |
插值填充 df = df.interpolate()
label_encoder = LabelEncoder()
df['weather'] = label_encoder.fit_transform(df['weather'])
category_mapping = dict(zip(label_encoder.classes_, label_encoder.transform(label_encoder.classes_)))
因需要预测未来一小时天气(时间序列单步预测),基于滑动窗口的方式对数据格式进行处理:
def create_sliding_window(data, window_size):
window_data = []
for i in range(len(data) - window_size):
window = data[i:i + window_size]
target = data[i + window_size][2]
window_data.append((window, target))
return window_data
class RNN(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(LSTMModel, self).__init__()
self.hidden_size = hidden_size
self.lstm = nn.RNN(input_size, hidden_size)
self.fc = nn.Linear(hidden_size, output_size)
def forward(self, x):
lstm_out, _ = self.lstm(x)
output = self.fc(lstm_out[:, -1, :])
return output
class LSTMModel(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(LSTMModel, self).__init__()
self.hidden_size = hidden_size
self.lstm = nn.LSTM(input_size, hidden_size)
self.fc = nn.Linear(hidden_size, output_size)
def forward(self, x):
lstm_out, _ = self.lstm(x)
output = self.fc(lstm_out[:, -1, :])
return output
class CNNLSTMModel(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(CNNLSTMModel, self).__init__()
self.hidden_size = hidden_size
self.conv1 = nn.Conv1d(input_size, hidden_size, kernel_size=3, padding=1)
self.lstm = nn.LSTM(hidden_size, hidden_size)
self.fc = nn.Linear(hidden_size, output_size)
def forward(self, x):
x = x.permute(0, 2, 1) # 转换输入的维度,使其适合卷积层的输入
x = F.relu(self.conv1(x))
x = x.permute(2, 0, 1) # 将维度转换回原始维度
lstm_out, _ = self.lstm(x)
output = self.fc(lstm_out[-1, :, :]) # 只使用最后一个时间步的输出
return output
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。