我的名字是Sabber。我的研究兴趣在于计算地球物理学。最近,我开始研究将深度学习应用于地球物理学的工作。作为这项工作的一部分,我使用了“Tensorflow”和“Keras”玩了一些玩具示例(螺旋数据)。经过一些尝试和错误,我能够获得97%的精度。顺便说一下,所有问题都是回归问题。
在这项工作中,我想根据一些物理参数(温度、密度、P波、S波速度、热能和深度)预测任何应力分量。
然而,当我使用实际的地质物理数据时,从第一个epoch开始,精度就为零。我现在完全不知道是什么导致了精度为零。我花了很多时间来学习是否犯了什么错误。由于我无法找出问题所在,我感到有点沮丧。可能有几个选项可以深入研究:
- 要么我的数据没有什么可学的,或者
- 数据预处理有误。
在现阶段,我觉得我迫切需要一些帮助。为了方便您,我已经包括了以下内容:
- 代码(“Tensorflow”和“Keras”):https://github.com/msahamed/deep_learning_stress_model
这个存储库有三个文件。在这三个“ipynb”文件中,您可以查看“predict_stress_keras.ipynb”或“predict_stress_tensorflow.ipynb”。代码非常简单。我已经写了所有必要的注释。
数据文件没有标题,共有11列。前七列可以作为X。我们不需要x坐标(第8列)。这一列可以忽略。基于X,我们希望预测任何应力分量(xx/xz/zz)。
更新:即使忽略这个回归问题的精度,所有预测结果都是相同的(见图)
请给我一些反馈。我非常感谢您的帮助。
回答:
Matias Valdenegro 说得对——在这种情况下,精度没有意义,零值是可以预期的。请参见这个讨论:https://github.com/fchollet/keras/issues/108
关于您的代码的一些快速建议:
10层太多了。从最多2到3层开始。从Keras的默认设置开始,只有在必要时才进行更改。
尝试类似这样的设置,然后从中改进:
model = Sequential()model.add(Dense(units = 64, activation = 'tanh', input_dim = 7))model.add(Dense(units = 32, activation = 'tanh'))model.add(Dense(units = 16, activation = 'tanh'))model.add(Dense(units = 1, activation="linear"))model.compile(optimizer = 'rmsprop', loss = 'mean_absolute_error')history = model.fit(X_train, Y_train, batch_size = 2048, epochs = 20, validation_split= 0.2, verbose=0)score = model.evaluate(X_test, Y_test, batch_size=2048)print(score)