目录1 高级神经网络Keras知识点讲解及入门算例2 CNN-GRU-Attention负荷预测2.1 Python代码实现2.2 运行结果【数学建模】“华为杯”高级神经网络Keras(Python代码实现)数据:
3、相关技术
相比LSTM,使用
GRU
能够达到相当的效果,准确率不会差多少,并且相比之下
GRU
更容易进行训练,能够很大程度上提高训练效率,因此硬件资源有限时会更倾向于使用
GRU
。
GRU
结构图如下:
4、完整
代码
和步骤
此
代码
的依赖环境如下:
tensorflow==2.5.0
numpy==1.19.5
keras
==2.6.0
matplotlib==3.5.2
————————————————
版权声明:本文为CSDN博主「AI信仰者」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_30803353/article/details/129108978
首先导入数据
import tensorflow as tf
python
from tensorflow.examples.tutorials.mnist import input_data
#导入tensorflow里的mnist数据集
mnist=input_data.read_data_sets('MNIST_data',one_hot=true)
下面呢...
在交通需求日益增长的今天,一系列的交通问题也相继出现,其中表现最明显的当属交通拥堵问题.为了有效地缓解此问题,智能交通系统(ITS)被广泛应用于动态交通管理中,而短时交通流作为相关交管部门实行管控的重要依据,一直是智能交通系统(ITS)的重点研究内容.准确的短时交通流预测不仅能
实现
对交通状态的动态把控并据此实施交通诱导,还能为出行者提供实时,具体的道路信息,提高道路通行能力.针对当前道路交通流预测方法不能充分揭示交通流内部本质规律的问题,提出一种基于深度学习的预测模型,利用长短期记忆网络(LSTM),对交通流量进行了预测.结果显示,提出的预测模型具有较高的准确性,是一种有效的交通流预测方法.
包含:数据集、模型
代码
及系统
实现
运行环境:
python
3.7.6 配置tensorflow==2.1.0、
Keras
==2.3.1等,内含配置文件。
参考博客内容:
https://blog.csdn.net/weixin_40651515/article/details/128690977?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22r
默认情况下,注意力层使用附加注意力并在计算相关性时考虑整个上下文。 以下
代码
创建了一个注意力层,它遵循第一部分中的方程(
attention
_activation是e_{t, t'}的激活函数):
import
keras
from
keras
_self_
attention
import SeqSelf
Attention
model =
keras
. models . Sequential ()
model . add (
keras
. layers . Embedding ( input_dim = 10000 ,
output_dim =
cnn
-bilstm-
attention
-time-series-prediction_
keras
-master
cnn
-bilstm-
attention
-time-series-prediction_
keras
-master
cnn
-bilstm-
attention
-time-series-prediction_
keras
-master
cnn
-bilstm-
attention
-time-series-prediction_
keras
-master
cnn
-bilstm-
attention
-time-series-prediction_
keras
-master
cnn
-bilstm-
attention
-time-series-prediction_
keras
-master
cnn
-bilstm-
attention
-time-series-prediction_
keras
-master
cnn
-bilstm-
attention
-time-series-prediction_
keras
-master
cnn
-bilstm-
attention
-time-series-prediction_
keras
-ma
文章目录1. 依赖安装和导入2. 数据加载与预处理3. 数据探索性分析3.1 基本分析3.2 查看类别分布4. 辅助函数评估函数5. 模型训练与推理 (TensorFlow 2.2+)5.1 Net 15.2 Net 35.3 Net 86. 软投票融合 + 阈值法7. 保存结果用于提交8. 后话
写在前面:
这比赛也跟着各位大佬打了一遍,可惜的是当初使用的是传统的机器学习模型,并没有使用
CNN
这种深度学习框架,但是在这过程中也学习到好多——列如各样特征技巧、处理技巧!
从结束的那天起,就好像看前几名的关键
class MultiHead
Attention
(
keras
.layers.Layer):
def __init__(self, num_heads, d_model):
super(MultiHead
Attention
, self).__init__()
self.num_heads = num_heads
self.d_model = d_model
assert d_model % self.num_heads == 0
self.depth = d_model // self.num_heads
self.wq =
keras
.layers.Dense(d_model)
self.wk =
keras
.layers.Dense(d_model)
self.wv =
keras
.layers.Dense(d_model)
self.dense =
keras
.layers.Dense(d_model)
def split_heads(self, x, batch_size):
x = tf.reshape(x, (batch_size, -1, self.num_heads, self.depth))
return tf.transpose(x, perm=[0, 2, 1, 3])
def call(self, v, k, q, mask):
batch_size = tf.shape(q)[0]
q = self.wq(q)
k = self.wk(k)
v = self.wv(v)
q = self.split_heads(q, batch_size)
k = self.split_heads(k, batch_size)
v = self.split_heads(v, batch_size)
scaled_
attention
,
attention
_weights = scaled_dot_product_
attention
(q, k, v, mask)
scaled_
attention
= tf.transpose(scaled_
attention
, perm=[0, 2, 1, 3])
concat_
attention
= tf.reshape(scaled_
attention
, (batch_size, -1, self.d_model))
output = self.dense(concat_
attention
)
return output,
attention
_weights
def scaled_dot_product_
attention
(q, k, v, mask):
matmul_qk = tf.matmul(q, k, transpose_b=True)
dk = tf.cast(tf.shape(k)[-1], tf.float32)
scaled_
attention
_logits = matmul_qk / tf.math.sqrt(dk)
if mask is not None:
scaled_
attention
_logits += (mask * -1e9)
attention
_weights = tf.nn.softmax(scaled_
attention
_logits, axis=-1)
output = tf.matmul(
attention
_weights, v)
return output,
attention
_weights
在这个例子中,`MultiHead
Attention
`是一个继承自
Keras
的`Layer`的类,它
实现
了multi-head self-
attention
。具体来说,`MultiHead
Attention
`包括以下几个步骤:
1. 将输入的`q`、`k`、`v`通过三个全连接层(分别是`self.wq`、`self.wk`、`self.wv`)映射到`d_model`维空间。
2. 将映射后的`q`、`k`、`v`分别按照`num_heads`个头进行切分,并将切分后的张量进行维度重排,以便于后续计算。
3. 对切分后的`q`、`k`、`v`进行scaled dot-product
attention
操作,得到加权后的`v`,以及注意力权重。
4. 将加权后的`v`进行维度重排和拼接,并通过一个全连接层进行线性变换,得到最终的输出。
在
实现
过程中,需要用到`scaled_dot_product_
attention
`函数,该函数
实现
了scaled dot-product
attention
的计算。具体来说,它包括以下几个步骤:
1. 将`q`和`k`进行矩阵乘法,并除以$\sqrt{d_k}$得到相似度矩阵。
2. 如果有掩码,则将掩码中的位置设置为$-\infty$,以便在softmax之后得到0的注意力权重。
3. 对相似度矩阵进行softmax操作,得到注意力权重。
4. 将注意力权重和`v`进行矩阵乘法,得到加权后的`v`。
需要注意的是,这个
实现
中的`mask`参数是可选的,如果没有传入掩码,则不进行掩码操作。