【问题标题】:Approximating a smooth multidimensional function using Keras to an error of 1e-4使用 Keras 将平滑多维函数逼近到 1e-4 的误差
【发布时间】:2021-01-19 01:39:37
【问题描述】:

我正在尝试使用 Keras 逼近一个函数,该函数将五个输入平滑地映射到一个概率,但似乎已经达到了极限。在这里(Keras Regression to approximate function (goal: loss < 1e-7))针对十维函数提出了类似的问题,我发现那里提出的架构,即:

model = Sequential()

model.add(Dense(128,input_shape=(5,), activation='tanh'))

model.add(密集(64,activation='tanh'))

model.add(Dense(1,activation='sigmoid'))

model.compile(optimizer='adam', loss='mae')

给了我最好的结果,当批大小为 1000 时,在我的验证数据上收敛到大约 7e-4 的最佳损失。添加或删除更多的神经元或层似乎会降低准确性。 Dropout 正则化也会降低准确性。我目前正在使用 1e7 训练样本,需要两天时间才能生成(因此希望近似这个函数)。我想将 mae 降低另一个数量级,有没有人有任何建议如何做到这一点?

【问题讨论】:

    标签: tensorflow keras neural-network regression approximation


    【解决方案1】:

    我建议使用 keras 回调 ReduceLROnPlateau,文档在 [这里][1] 和 ModelCheckpoint,文档在 [这里][2]。首先,将其设置为监控验证损失,如果在固定数量(耐心)的连续 epoch 之后损失未能减少,它将降低学习率一个因子(因子)。其次,还要监控验证损失并将具有最低验证损失的模型的权重保存到目录中。训练后加载权重并使用它们对测试集进行评估或预测。我的代码实现如下所示。

    checkpoint=tf.keras.callbacks.ModelCheckpoint(filepath=save_loc, monitor='val_loss', verbose=1, save_best_only=True,
            save_weights_only=True, mode='auto', save_freq='epoch', options=None)
    lr_adjust=tf.keras.callbacks.ReduceLROnPlateau( monitor="val_loss", factor=0.5, patience=1, verbose=1, mode="auto",
            min_delta=0.00001,  cooldown=0,  min_lr=0)
    callbacks=[checkpoint, lr_adjust]
    history = model.fit_generator( train_generator, epochs=EPOCHS,
              steps_per_epoch=STEPS_PER_EPOCH,validation_data=validation_generator,
              validation_steps=VALIDATION_STEPS, callbacks=callbacks)
    model.load_weights(save_loc) # load the saved weights
    # after this use the model to evaluate or predict on the test set.
    # if you are satisfied with the results you can then save the entire model with
    model.save(save_loc)
    
    
      [1]: https://keras.io/api/callbacks/reduce_lr_on_plateau/
      [2]: https://keras.io/api/callbacks/model_checkpoint/
    

    【讨论】:

    • 谢谢。这对我的原始架构没有帮助,但它确实允许我训练一个更深的网络,以便使用这个带有 sgd 的回调获得更好的结果。就准确性而言,我还没有达到我的目标,但会继续尝试。
    猜你喜欢
    • 2019-11-08
    • 1970-01-01
    • 2019-05-19
    • 2015-08-29
    • 2019-04-26
    • 2021-01-24
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    相关资源
    最近更新 更多