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

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

Keras学习

函数式API

Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow作为后端运行。Keras 的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果,是做好研究的关键。

Keras 的核心数据结构是 model,一种组织网络层的方式。最简单的模型是 Sequential 顺序模型,它由多个网络层线性堆叠。

  • 构建模型

    • 激活函数可以通过设置单独的激活层实现,也可以在构造层对象时通过传递,LSTM默认为activation=‘tanh’,keras中其它自带的激活函数

    • lstm_model = tf.keras.models.Sequential([
          # Shape [batch, time, features] => [batch, time, lstm_units]
          tf.keras.layers.LSTM(32, return_sequences=True),
          # Shape => [batch, time, features]
          tf.keras.layers.Dense(units=1)
      ])
      
    • Sequential顺序模型;

  • 编译模型:

    • 损失函数(或称目标函数、优化评分函数)是编译模型时所需的两个参数之一,衡量模型模型预测的好坏,keras自带的损失函数

    • 评价函数用于评估当前训练模型的性能。当模型编译后(compile),评价函数应该作为 metrics 的参数来输入,评价函数和 损失函数 相似,只不过评价函数的结果不会用于训练过程中;

    • 优化器 (optimizer) 是编译 Keras 模型的所需的两个参数之一,用来更新和计算影响模型训练和模型输出的网络参数,使其逼近或达到最优值,从而最小化(或最大化)损失函数,SGD(随机梯度下降优化器),keras中其他自带的优化器

    • model.compile(loss=tf.losses.MeanSquaredError(),
                    optimizer=tf.optimizers.Adam(),
                    metrics=[tf.metrics.MeanAbsoluteError()])
      
    • loss损失函数(均方误差);optimizer优化器();metrics指标(平均绝对误差)

    • Adam优化器–2014年12月,Kingma和Lei Ba两位学者提出了Adam优化器,结合AdaGrad和RMSProp两种优化算法的优点。对梯度的一阶矩估计(First Moment Estimation,即梯度的均值)和二阶矩估计(Second Moment Estimation,即梯度的未中心化的方差)进行综合考虑,计算出更新步长。

      • 实现简单,计算高效,对内存需求少
      • 参数的更新不受梯度的伸缩变换影响
      • 超参数具有很好的解释性,且通常无需调整或仅需很少的微调
      • 更新的步长能够被限制在大致的范围内(初始学习率)
      • 能自然地实现步长退火过程(自动调整学习率)
      • 很适合应用于大规模的数据及参数的场景
      • 适用于不稳定目标函数
      • 适用于梯度稀疏或梯度存在很大噪声的问题
  • 训练模型:

    • callback回调函数:

      • ModelCheckpoint在每个训练期之后保存模型
      keras.callbacks.ModelCheckpoint(filepath, monitor='val_loss', verbose=0, save_best_only=**False**, save_weights_only=**False**, mode='auto', period=1)
      
      • EarlyStopping当被监测的数量不再提升,则停止训练
      keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=0, patience=0, verbose=0, mode='auto', baseline=None, restore_best_weights=False)
      
      • ReduceLROnPlateau当标准评估停止提升时,降低学习速率
      keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=10, verbose=0, mode='auto', min_delta=0.0001, cooldown=0, min_lr=0)
      
    • early_stopping = tf.keras.callbacks.EarlyStopping(monitor='val_loss',
                                                            patience=patience+1,
                                                            mode='min')
      reduceLROnPlateau = tf.keras.callbacks.ReduceLROnPlateau(monitor='val_loss',
                                                                   patience=patience-1,
                                                                   factor=0.1,
                                                                   mode='min')
      history = model.fit(window.train, epochs=MAX_EPOCHS,
                              validation_data=window.val,
                              callbacks=[early_stopping,reduceLROnPlateau])
      
    • epochs训练次数;validation_data验证集;callbacks回调函数

  • 使用模型:

    • evaluate:在测试模式,返回误差值和评估标准值

      • evaluate(x=None, y=None, batch_size=None, verbose=1, sample_weight=None, steps=None)
        
      • verbose: 0, 1。日志显示模式。0 = 安静模式, 1 = 进度条

    • predict:为输入样本生成输出预测

      • predict(x, batch_size=None, verbose=0, steps=None)
        
      • x: 输入数据,Numpy 数组(或者如果模型有多个输入,则为 Numpy 数组列表)。

      • batch_size: 整数。如未指定,默认为 32。

      • verbose: 日志显示模式,0 或 1。

      • steps: 声明预测结束之前的总步数(批次样本)。默认值 None

      • 返回预测的numpy数组

  • 保存Keras模型:

    • 你可以使用 model.save(filepath) 将 Keras 模型保存到单个 HDF5 文件中,该文件将包含:

      • 模型的结构,允许重新创建模型
      • 模型的权重
      • 训练配置项(损失函数,优化器)
      • 优化器状态,允许准确地从你上次结束的地方继续训练。
    • 你可以使用 keras.models.load_model(filepath) 重新实例化模型。load_model 还将负责使用保存的训练配置项来编译模型(除非模型从未编译过)。

      from keras.models import load_model
      
      model.save('my_model.h5')  # 创建 HDF5 文件 'my_model.h5'
      del model  # 删除现有模型
      
      # 返回一个编译好的模型
      # 与之前那个相同
      model = load_model('my_model.h5')
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值