我正在生成一个圆形的均匀分布的数据点,其中每个圆的半径也被均匀生成。这些圈子如下所示:
[![在此处输入图片描述] [1]] [1]
均匀分布的半径如下所示:
[![在此处输入图片描述] [2]] [2]
我在本练习中的目标是仅通过输入数据点的x,y坐标即可使用NN预测这些圆的半径。 (为此,我正在使用其半径和数据点生成1000个圆)
但是,当使用以下架构尝试此操作时:
model = Sequential()
model.add(Flatten(input_shape=(X.shape[1],2)))
model.add(Dense(128, activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dense(1))
model.compile('adam', 'mse', metrics=['accuracy'])
model.summary()
我得到这些结果:model.predict(X_test)[:10]
array([[1.0524317],
[0.9874419],
[1.1739452],
[1.0584671],
[1.035887 ],
[1.1663618],
[1.1536952],
[0.7245674],
[1.0469185],
[1.328696 ]], dtype=float32)
Y_test[:10]
array([[1.34369499],
[0.9539995 ],
[1.73399686],
[1.56665937],
[0.40627674],
[1.73467557],
[0.87950118],
[1.13395495],
[0.51870017],
[1.28441215]])
[![在此处输入图片描述] [3]] [3]如您所见,预测半径时结果非常糟糕。
我在这里想念什么?还是NN并不是执行此任务的最佳方法?
[编辑]
现在,我尝试了10万个圆及其相应的半径:
[![在此处输入图片描述] [4]] [4]
该图显示了针对半径预测的实际值。随着训练样本的增加,预测会好得多,但是对于这样一个简单的任务,y = x周围仍然存在很大的分散。
最佳答案
我认为您的结果看起来还不错。在损失与时期的关系图中,您可以看到模型只是在内存/指纹训练数据。只要您不显着提高TD,就会发生这种情况。
在经典特征工程方法中,通常将训练数据的中心定为平均点数。之后,您按递减的x
和y
方向对数据点进行排序。通过这种预处理,任务确实很简单。
相反,您也可以尝试以下过程。然后使用1-d卷积层作为输入,再次对沿x
轴和y
轴的点进行排序。希望模型能够学习半径的概念。
关于python - 用神经网络预测圆的半径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62624105/