Gekko 深度学习找不到解决方案

问题描述 投票:0回答:1

我想用 Gekko 创建一个回归 ANN 模型。我使用 tf_Keras 制作了这个模型,效果非常好。不幸的是,无法将 Keras 模型转换为 Gekko amp 模型。因此,我需要使用 Gekko Brain 类来制作它。然而,它未能找到解决方案。

这是我的数据集:ss10_1k_converted.csv

这是我在 Gekko 中的模型:

import pandas as pd
import numpy as np
from gekko import  brain

# load dataset
df = pd.read_csv("ss10_1k_converted.csv")

# split data for train and test
train=df.sample(frac=0.8,random_state=200)
test=df.drop(train.index)

# Preparing training data
train_x = train[['D','V']].to_numpy()
train_x = np.transpose(train_x)
train_y = train['F'].to_numpy()
train_y = np.transpose(train_y).reshape(1,-1)

# Preparing test data
test_x = test[['D','V']].to_numpy()
test_y = test['F'].to_numpy().reshape(1,-1)

# neural network
b = brain.Brain()
b.input_layer(2)
b.layer(relu=61)
#b.layer(relu=61)
b.output_layer(1)
b.learn(train_x, train_y, obj=2)

这是错误:

EXIT: Restoration Failed!
 
 An error occured.
 The error code is           -2
 
 
 ---------------------------------------------------
 Solver         :  IPOPT (v3.12)
 Solution time  :    179.147199999999      sec
 Objective      :    2064584.02728447     
 Unsuccessful with error code            0
 ---------------------------------------------------
 
 Creating file: infeasibilities.txt
 @error: Solution Not Found

完全错误 --> 链接

请让我知道问题是什么。

谢谢你

gekko
1个回答
0
投票

由于输入数据的某些限制或问题,模型似乎无法找到解决方案。以下是一些可以帮助您解决问题的建议:

  1. 检查数据:确保输入数据(train_x 和 train_y)格式正确且不包含任何缺失值或异常值。您可以使用 pandas 的

    describe()
    info()
    函数来检查数据。

  2. 标准化数据:如果输入数据具有不同的尺度,则可能会导致模型出现问题。您可以尝试使用最小-最大缩放或标准化等技术将数据标准化为通用比例。

  3. 增加层数或神经元数量:当前模型只有一个隐藏层,有 61 个神经元。您可以尝试增加层数或神经元数量,看看是否有助于模型找到更好的解决方案。

  4. 更改激活函数:当前模型使用ReLU激活函数。您可以尝试将激活函数更改为其他类型,例如 sigmoid 或 tanh,看看是否可以改进解决方案。

  5. 提高学习率:学习率是一个超参数,控制优化算法每次迭代的步长。您可以尝试提高学习率,看看是否有助于模型找到更好的解决方案。

  6. 使用不同的求解器:当前模型使用IPOPT求解器。您可以尝试使用其他求解器,例如 APOPT 或 CONOPT,看看它们是否提供更好的解决方案。

要实现这些建议,您可以按如下方式修改 Gekko 模型:

# neural network
b = brain.Brain()
b.input_layer(2)
b.layer(relu=61)
b.layer(relu=61)  # Add another hidden layer
b.output_layer(1)

# Normalize the data
# ...

# Change the activation function
b.setActivation('sigmoid')  # or 'tanh'

# Increase the learning rate
b.setLearningRate(0.01)

# Use a different solver
b.setSolver('APOPT')

b.learn(train_x, train_y, obj=2)
© www.soinside.com 2019 - 2024. All rights reserved.