gpt4 book ai didi

machine-learning - 10 个输入和 10 个输出的神经元网络

转载 作者:行者123 更新时间:2023-11-30 09:29:00 24 4
gpt4 key购买 nike

我遇到了一个物理问题:要构造一个产品,需要根据 10 个输入参数(性能、温度、容量等)确定 10 个输出参数(宽度、长度、 Material 等)。输出参数显然取决于输入参数。但我不知道怎么办。例如,输出参数 O1 可能依赖于输入参数 I1、I2 和 I3。

我已经获得了 30k 个产品的数据及其输入/输出参数。数据库如下所示:

----------------------------------------------
| Product| I1 | I2 | I3 | ... | O1 | O2 | 03 |
----------------------------------------------
| Prod A | 1.2| 2.3| 4.2| ... | 5.3| 6.2| 1.2|
----------------------------------------------
| Prod B | 2.3| 4.1| 1.2| ... | 8.2| 5.2| 5.0|
----------------------------------------------
| Prod C | 6.3| 3.7| 9.1| ... | 3.1| 4.1| 7.7|
----------------------------------------------
| ... | |
----------------------------------------------

所以我需要做的是根据输入参数 I 1 - I 10 找到输出参数 O 1 - O 10 。

第一个问题:如果我答对了,这是一个回归问题,基于一些输入值,我想找到一些输出值(在数据中,有一个函数/公式来确定正确的值)。这是正确的吗?

我的想法是使用/训练神经网络(使用keras和tensorflow作为后端)

这样的神经网络会是什么样子?最佳实践是什么?

这是我到目前为止所拥有的:输入层有 10 个输入,两个全连接深层有 100 个神经元,还有一个层有 10 个输出。在 keras 中,这看起来像这样:

def baseline_model(self, callback):
model = Sequential()
model.add(Dense(100, input_dim=10, activation="relu"))
model.add(Dense(100, activation="relu"))
model.add(Dense(10))

model.compile(loss='mean_squared_error', optimizer='adam', metrics=["accuracy"])
model.fit(input_train, output_train, batch_size=5, epochs=2000, verbose=2, callbacks=[callback], shuffle=True, validation_data=(input_val,output_val))

scores = model.evaluate(input_val, output_val, verbose=1)
print("Scores:",scores)

当然,模型没有按预期工作,这就是我寻求帮助的原因......训练失败:

Epoch 1999/2000
7s - loss: 47634520366153.6016 - acc: 0.0000e+00 - val_loss: 9585392308285.4395 - val_acc: 0.0000e+00

有什么我应该更改的建议吗?我考虑过使用“sigmoid”作为激活并将数据标准化为 [0,1]。

感谢您的建议

最佳答案

If I get it right, this is a regression problem, based on some input values I want to find some output values

是的,我认为你是对的。

How would such a neuronal network look like? What is the best practice?

这是一个非常广泛的问题。我认为你应该将数据分成训练集和验证集,从最简单的网络开始(可能没有隐藏层或只有一个隐藏层),然后使其变得越来越复杂(添加更多层和隐藏单元),同时验证错误减少。当您的网络变得相当深时,最好在密集层之间添加批量归一化层。您还可以查看剩余连接,但不确定您是否真的需要它。

Any suggestions what I should change? I thought about using "sigmoid" as activation and to normalize the Data to [0,1].

  • 激活函数类型取决于您的输出类型。对于分类输出 sigmoid/softmax 可能是不错的选择,对于 float 来说线性应该可以。
  • 此外,如果您的输入之一是分类的(例如 Material 类型),那么最好将其拆分为多个二进制输入。
  • 标准化您的输入和输出几乎总是一个好主意。非标准化数据确实可能会损害训练过程。
  • 绘制误差并检查它随时间的变化情况。 loss: 47634520366153.6016 确实很大,但它并没有告诉我们太多关于优化的信息。如果它减少也许你可以提高学习率。如果它增长,请尝试降低学习率或尝试其他优化算法。
  • 检查您的渐变,如果太大,请尝试使用渐变裁剪。
  • 也尝试从简单的模型开始。也许来自线性回归。

严格来说,神经网络调试是一个庞大而复杂的领域,我不确定它是否适合在 stackoverflow 上讨论

PS对不起我的英语

关于machine-learning - 10 个输入和 10 个输出的神经元网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46194327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com