目录
前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
选题指导:
大家好,这里是海浪学长毕设专题,本次分享的课题是
🎯基于深度学习的建筑能耗预测算法研究
课题背景和意义
建筑能耗预测在能源管理和建筑设计中起着关键作用。准确地预测建筑能耗可以帮助优化能源使用,提高能源效率,减少能源浪费,并且为建筑能源系统的规划和管理提供决策支持。然而,由于建筑系统的复杂性、不确定性和动态变化性,传统的建筑能耗预测方法往往存在准确性不高、模型复杂度高和对专业知识依赖程度高等问题。
近年来,深度学习技术的快速发展为解决建筑能耗预测问题带来了新的机会。深度学习算法具有强大的特征学习和模式识别能力,能够从大规模、复杂的建筑数据中自动学习到高层次的抽象特征,从而提高能耗预测的准确性和鲁棒性。
实现技术思路
一、 LSTM算法
1.1 LR
逻辑回归(Logistic Regression,LR)是一种经典的统计学习方法,用于解决二分类问题。虽然名字中带有"回归"一词,但逻辑回归实际上是一种分类算法。
逻辑回归的基本思想是通过建立一个线性模型,将输入特征与对数几率(log-odds)之间的关系进行建模。对数几率是指事件发生的概率与不发生的概率之比的对数。为了将线性模型的输出转化为概率,逻辑回归使用了一个称为sigmoid函数(也称为逻辑函数)的非线性函数。Sigmoid函数将任意实数映射到0到1之间的概率范围内。
P(y=1|x) = sigmoid(w^T * x + b)
1.2 MLP
多层感知器(Multilayer Perceptron,MLP)是一种基本的前馈神经网络模型,用于解决分类和回归问题。它由多个神经元组成,分布在一个或多个隐藏层中,通过非线性激活函数将输入特征映射到输出。
MLP的基本组成单元是神经元(也称为节点或感知器)。每个神经元接收一组输入特征,并对这些特征进行加权求和,再经过一个非线性激活函数进行转换。这个转换后的输出将作为下一层神经元的输入,以此类推,直到达到输出层。
MLP的每个神经元都有一组可学习的权重,用于控制输入特征的重要性,以及一个偏置项用于调整神经元的激活阈值。通过反向传播算法,MLP可以从训练数据中学习到适当的权重和偏置,以最小化预测输出与真实标签之间的误差。
1.3LSTM&RNN
循环神经网络(Recurrent Neural Network,RNN)是一种能够处理序列数据的神经网络模型。长短期记忆网络(Long Short-Term Memory,LSTM)则是RNN的一种特殊类型,专门用于解决传统RNN中的梯度消失和梯度爆炸问题。
LSTM通过引入记忆单元和门控机制,能够有效地处理长期依赖关系。记忆单元允许LSTM记住和存储过去的信息,并根据当前输入和上一个时间步的信息来更新和输出记忆。门控机制由三个门组成:遗忘门、输入门和输出门。
二、 数据集
2.1 数据集
收集建筑物的能耗数据以及其他相关信息,如建筑物特征、天气数据等。能耗数据可以来自传感器、智能电表、历史能耗记录等途径。对收集到的原始数据进行预处理。包括数据清洗、缺失值处理、异常值处理等。同时,还需要进行特征工程,提取和选择与能耗预测相关的特征,如温度、湿度、季节等。
三、相关代码
class LR(nn.Module):
def __init__(self,
feature_nums,
output_dim = 1):
super(LR, self).__init__()
self.linear = nn.Linear(feature_nums, output_dim)
self.bias = nn.Parameter(torch.zeros((output_dim,)))
def forward(self, x):
"""
:param x: Int tensor of size (batch_size, feature_nums, latent_nums)
:return: pctrs
"""
out = self.bias + torch.sum(self.linear(x), dim=1)
return out.unsqueeze(1)
class RNN(nn.Module):
def __init__(self,
feature_nums,
hidden_dims,
bi_lstm,
out_dims=1):
super(RNN, self).__init__()
self.feature_nums = feature_nums # 输入数据特征维度
self.hidden_dims = hidden_dims # 隐藏层维度
self.bi_lism = bi_lstm # LSTM串联数量
self.lstm = nn.LSTM(self.feature_nums, self.hidden_dims, self.bi_lism)
self.out = nn.Linear(self.hidden_dims, out_dims)
def forward(self,x):
x1, _ = self.lstm(x)
a, b, c = x1.shape
out = self.out(x1.view(-1, c))
out1 = out.view(a, b, -1)
return out1
class MLP(nn.Module):
def __init__(self,
feature_nums,
neuron_nums,
dropout_rate,
output_dim=1):
super(MLP, self).__init__()
self.feature_nums = feature_nums
self.neuron_nums = neuron_nums
self.dropout_rate = dropout_rate
deep_input_dims = self.feature_nums
layers = list()
neuron_nums = self.neuron_nums
for neuron_num in neuron_nums:
layers.append(nn.Linear(deep_input_dims, neuron_num))
# layers.append(nn.BatchNorm1d(neuron_num))
layers.append(nn.ReLU())
layers.append(nn.Dropout(p=0.2))
deep_input_dims = neuron_num
weight_init(layers)
layers.append(nn.Linear(deep_input_dims, output_dim))
self.mlp = nn.Sequential(*layers)
def forward(self, x):
"""
:param x: Int tensor of size (batch_size, feature_nums, latent_nums)
:return: pctrs
"""
out = self.mlp(x)
return out
最后
我是海浪学长,创作不易,欢迎点赞、关注、收藏。
毕设帮助,疑难解答,欢迎打扰!