我如何设置我的目标来训练Keras-CNN模型?

2024-04-23 22:50:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据集是鲸鱼的图像。我正在尝试训练一个CNN,它可以在给定的图像中定位鲸鱼的2个点。我的训练特征是numpy数组中的图像,目标是图像中2个点(鲸鱼上的2个点)的x和y坐标。你知道吗

用Keras建立神经网络的最佳方法是什么?Keras可以从我拥有的数据集中学习,这样它就能够在新的、未标记的图像上定位这些点?你知道吗

我目前的主要问题是如何格式化目标(图像中的2个点),以便我的Keras模型能够理解/读取数据。你知道吗

我的坏代码是:

x_train = np.array([cv2.imread("1small.jpg")])
y_train = np.array([14.1, 13.5, 16.3, 14.1])

x_test = np.array([cv2.imread("0small.jpg")])
y_test = np.array([11.8, 10.8, 17.0, 16.0]) # fake data just to test

model = Sequential()
model.add(Dense(1,32,32,3))
model.add(Activation('tanh'))
model.add(Dense(1))
model.compile(loss='mean_absolute_error', optimizer='rmsprop')

model.fit(x_train, y_train, nb_epoch=1, batch_size=1)

prediction = model.predict(x_test)
print prediction

Tags: 数据定位test图像add目标modelnp
1条回答
网友
1楼 · 发布于 2024-04-23 22:50:46

这些网络非常适合学习坐标,因此可以将数据保留为四个坐标。然后你可以把你的损失定义为距离的平方和。第一个好处是,它将更多地惩罚大错误,更少地惩罚小错误,因此它将使网络平稳地走向完美。:)第二件好事是,如果你仔细想想,两点的平方距离就是坐标差的平方和。所以基本上你可以用坐标阵列上的均方误差作为这个网络的损耗。又好又简单。你知道吗

看看你的网络,你应该在前面添加一些卷积层和池层,密集层不是先看到图像的好层。他们应该在网络的顶端。你知道吗

而且,tanh的激活在过去十年也是如此。:)使用relu,除了最后一层,它应该没有激活。你知道吗

还要考虑变换坐标,使图像的中间是原点,边在-1和1之间。这将规范化预测空间一点,可能会有所帮助。你知道吗

希望这有帮助。你知道吗

相关问题 更多 >