【发布时间】:2021-04-13 07:01:22
【问题描述】:
我正在尝试使用 this 指南训练 Tensorflow 模型,目的是使用深度神经网络 (Tensorflow) 解决优化问题。到目前为止,我的模型需要 9 个输入并产生 1 个输出。
我现在要做的是在一个应用程序中使用它,目标是在其他输入值固定的情况下通过调整一个输入值来最小化输出值。
例如,让我们表示输入值x1, x2, ..., x10 和输出y。给定x2, x3, ..., x10 的值,最小化输出y 的x1 的值是多少?有关我的问题的直观描述,请参见下图。
我使用 Keras 训练了一个网络并将其保存为 variable.data-00000-of-00001 和 variables.index 文件,并使用 tf.keras.models.load_model 加载它。
我当前的代码是一个超慢的“硬编码”优化函数,它依赖于通过迭代 x1 值并通过网络运行它们来将值附加到列表中,将每个输出附加到列表中,并观察生成了哪个 x1 值最低的输出。这显然不是一个很好的解决方案。请参阅下面的代码。
for index, row in input_df.iterrows():
prediction = model.predict(row[['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9']]).flatten()
prediction = float(prediction)
X1_predictions.ayend(prediction)
# Optimized x1
x1_values = []
y_pred_values = []
for x1 in np.arange(-1, 0, 0.01):
row['x1'] = x1
x1_values.append(x1)
y_prediction = y_model.predict(row[['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9']]).flatten()
y_prediction = float(y_prediction)
y_pred_values.ayend(y_prediction)
min_y_val = min(y_pred_values)
min_y_idx = y_pred_values.index(min(y_pred_values))
opt_x1 = x1_values[min_y_idx]
x1_opt_list.ayend(opt_x1)
y_opt_predictions.ayend(min_y_val)
我以前没有使用过这样的 TF 回归模型,我应该如何使用 Tensorflow/Keras 而不是列表和 for 循环以更优雅的方式解决这个问题?
【问题讨论】:
-
你(可能)不需要神经网络来完成这项任务。如果我在你的位置,我会查看scipy.optimize 或类似的。虽然完全可以用 TensorFlow 编写优化问题,但我不确定我是否明白这一点。
-
@Lescurel 好吧,数据集由大约 4000 个数据点组成,它们之间的相关性并不高。我已经成功地训练了一个神经网络来很好地预测输出,所以我最好坚持这个解决方案。
-
如果您有更多详细信息,我鼓励您在问题中添加它们。您的目标是“冻结”当前网络并根据网络的输出修改输入吗?
-
@Lescurel,是的,这就是我目前的策略。但是,我之前没有研究过这样的优化问题(我并没有真正在生产中使用 DL 模型,只是为了学术目的而训练),所以我愿意接受其他建议。假设我可以在 0-1 之间调整 x1。思路是根据固定的其他 8 个参数,找到产生最低输出值的 x1 值。
标签: tensorflow keras regression