山东大学暑期项目实训——云主机服务比价与预测系统

山东大学暑期项目实训——云主机服务比价与预测系统(十五)

使用tensorflow做预测

4.构建模型!!!—进行多时间步长预测

有两种大致的解决方法:

  1. 一次预测整个时间序列的单发预测。
  2. 模型仅进行单步预测并且其输出作为其输入反馈的自回归预测。
1)卷积神经网络

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aIuFBtGO-1627623079662)(https://www.tensorflow.org/tutorials/structured_data/images/multistep_conv.png?hl=zh-cn)]

# 多时间步的卷积神经网络预测
def muliCNN():
    CONV_WIDTH = 3
    multi_conv_model = tf.keras.Sequential([
        # Shape [batch, time, features] => [batch, CONV_WIDTH, features]
        tf.keras.layers.Lambda(lambda x: x[:, -CONV_WIDTH:, :]),
        # Shape => [batch, 1, conv_units]
        tf.keras.layers.Conv1D(256, activation='relu', kernel_size=(CONV_WIDTH)),
        # Shape => [batch, 1,  out_steps*features]
        tf.keras.layers.Dense(OUT_STEPS * num_features,
                              kernel_initializer=tf.initializers.zeros()),
        # Shape => [batch, out_steps, features]
        tf.keras.layers.Reshape([OUT_STEPS, num_features])
    ])

    history = compile_and_fit(multi_conv_model, multi_window)

    IPython.display.clear_output()

    multi_val_performance['Conv'] = multi_conv_model.evaluate(multi_window.val)
    multi_performance['Conv'] = multi_conv_model.evaluate(multi_window.test, verbose=0)
    multi_window.plot(multi_conv_model)
    return history

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ne8hwLeL-1627623079668)(/Users/yuanbao/Library/Application Support/typora-user-images/image-20210429214447346.png)]

2)RNN递归神经网络

如果循环模型与模型所做的预测相关,则可以学习使用悠久的输入历史。在此,模型将在24小时内累积内部状态,然后为下一个24小时做出单个预测。

在这种单发格式中,LSTM只需要在最后一个时间步上生成输出,因此将其设置为return_sequences=False

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jadP3vX3-1627623079670)(https://www.tensorflow.org/tutorials/structured_data/images/multistep_lstm.png?hl=zh-cn)]

# RNN做多步预测
def muliRNN():
    multi_lstm_model = tf.keras.Sequential([
        # Shape [batch, time, features] => [batch, lstm_units]
        # Adding more `lstm_units` just overfits more quickly.
        tf.keras.layers.LSTM(32, return_sequences=False),
        # Shape => [batch, out_steps*features]
        tf.keras.layers.Dense(OUT_STEPS * num_features,
                              kernel_initializer=tf.initializers.zeros()),
        # Shape => [batch, out_steps, features]
        tf.keras.layers.Reshape([OUT_STEPS, num_features])
    ])

    history = compile_and_fit(multi_lstm_model, multi_window)

    IPython.display.clear_output()

    multi_val_performance['LSTM'] = multi_lstm_model.evaluate(multi_window.val)
    multi_performance['LSTM'] = multi_lstm_model.evaluate(multi_window.test, verbose=0)
    multi_window.plot(multi_lstm_model)
    return history

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zialXG0e-1627623079673)(/Users/yuanbao/Library/Application Support/typora-user-images/image-20210429214614441.png)]

三、RNN(Recurrent Neural Network递归神经网络的结构详解)

----最适合处理自然语言处理

便于处理序列化的数据;

前后文数据关联性很大(时间,语言)

1.普通神经网络的结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yT623utw-1627623079675)(/Users/yuanbao/Library/Application Support/typora-user-images/image-20210430151010452.png)]

存在的缺点:训练数据之间没有任何影响,相互独立。

2.RNN的网络结构

基本结构:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SnOHKw4s-1627623079676)(/Users/yuanbao/Library/Application Support/typora-user-images/image-20210430151331343.png)]

隐藏层中存在一个递归(循环),保存上一次的训练数据的中间输出结果,于是每个训练数据都与前面的训练数据存在依赖。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L6AgJH3g-1627623079677)(/Users/yuanbao/Library/Application Support/typora-user-images/image-20210430151547405.png)]

充分利用上一次训练数据的信息。

反向传播

只要相连的都需要进行梯度更新,每进行一步都需要进行更新;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-APq1y5zm-1627623079678)(/Users/yuanbao/Library/Application Support/typora-user-images/image-20210430152549825.png)]

存在问题:

  • 计算量大,需要记录所有的数据,但是只有靠的近的数据价值很大
  • 计算过程中可能存在梯度消失和梯度爆炸的问题

3.LSTM长短期记忆(Long Short-Term Memory, 简称 LSTM)

文章理解!!!

1)基本结构:

每一条黑线传输着一整个向量,从一个节点的输出到其他节点的输入。粉色的圈代表按位 pointwise 的操作,诸如向量的和,而黄色的矩阵就是学习到的神经网络层。合在一起的线表示向量的连接,分开的线表示内容被复制,然后分发到不同的位置。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zi2mYoMu-1627623079679)(/Users/yuanbao/Library/Application Support/typora-user-images/image-20210430153953710.png)]

C控制参数:

决定了什么样的信息会被保留什么样的会被遗忘;

该参数需要学习,x–门,

LSTM 有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid 神经网络层和一个按位的乘法操作。Sigmoid 层输出 0 到 1 之间的数值,描述每个部分有多少量可以通过。0 代表“不许任何量通过”,1就指“允许任意量通过”!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4pH1ReAH-1627623079679)(/Users/yuanbao/Library/Application Support/typora-user-images/image-20210430153731978.png)]

LSTM 拥有三个门,来保护和控制细胞状态。

在我们 LSTM 中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为忘记门层完成。该门会读取 h t − 1 h_{t-1} ht1 x t x_t xt,输出一个在 0 到 1之间的数值给每个在细胞状态 C t − 1 C_{t-1} Ct1 中的数字。 1表示“完全保留”,0 表示“完全舍弃”。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dETGc1zG-1627623079680)(/Users/yuanbao/Library/Application Support/typora-user-images/image-20210430154318781.png)]

下一步是确定什么样的新信息被存放在细胞状态中。这里包含两个部分。第一,sigmoid 层称 “输入门层” 决定什么值我们将要更新。然后,一个 tanh 层创建一个新的候选值向量, C ~ t \tilde{C}_t C~t,会被加入到状态中。

现在是更新旧细胞状态的时间了, C t − 1 C_{t-1} Ct1 更新为 C t C_t Ct.

我们把旧状态与 f t f_t ft 相乘,丢弃掉我们确定需要丢弃的信息。接着加上 i t ∗ C ~ t i_t * \tilde{C}_t itC~t。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S5tnOQph-1627623079680)(/Users/yuanbao/Library/Application Support/typora-user-images/image-20210430154542455.png)]

最终,我们需要确定输出什么值。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。首先,我们运行一个 sigmoid 层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过 tanh 进行处理(得到一个在 -1 到 1 之间的值)并将它和 sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yjI45hcN-1627623079681)(/Users/yuanbao/Library/Application Support/typora-user-images/image-20210430155540567.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值