我遇到了物理问题:构建产品10根据10个输入参数(性能,温度,容量等)确定输出参数(宽度,长度,材料等)。输出参数显然取决于输入参数。但我不知道怎么做。例如,输出参数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]。
感谢您的任何建议
答案 0 :(得分:2)
如果我做对了,这是一个回归问题,基于一些我希望找到一些输出值的输入值
是的,我认为你是对的。
这样的神经网络怎么样?什么是最佳做法?
这是一个非常广泛的问题。我认为你应该将你的数据分成火车和验证集,从最简单的网络(可能没有隐藏层或只有一个隐藏层)开始,然后在你的验证错误减少时使它变得越来越复杂(添加更多层和隐藏单元)。当您的网络变得非常深时,最好在密集层之间添加批量标准化层。您还可以查看剩余连接,但不确定您是否真的需要它。
有什么建议我应该改变吗?我想过使用“sigmoid”作为激活并将数据标准化为[0,1]。
loss: 47634520366153.6016
真的很大,但它告诉我们的不是优化。如果它减少可能你可以提高学习率。如果它增长尝试降低学习率或尝试另一种优化算法。 强烈地说神经网络调试是一个庞大而复杂的领域,我不确定它是否适合stackoverflow讨论
PS抱歉我的英文
答案 1 :(得分:1)
正如@Dark_davier所说,这是一个需要一些经验的领域。没有真正做一些测试,真的无法回答。但是作为指导,请注意网络的大小。在你的网络中,你有大约(更多)10e4参数,你说你只有#34;只有#34; 30k观察。所以过度拟合的概率很高......所以你需要小心。您需要使用更复杂的技术来避免它(首先进行交叉验证以检查,然后可能进行正则化)。但这需要一些NN优化的经验......