我的数据集是鲸鱼的图像。我正在尝试训练一个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
这些网络非常适合学习坐标,因此可以将数据保留为四个坐标。然后你可以把你的损失定义为距离的平方和。第一个好处是,它将更多地惩罚大错误,更少地惩罚小错误,因此它将使网络平稳地走向完美。:)第二件好事是,如果你仔细想想,两点的平方距离就是坐标差的平方和。所以基本上你可以用坐标阵列上的均方误差作为这个网络的损耗。又好又简单。你知道吗
看看你的网络,你应该在前面添加一些卷积层和池层,密集层不是先看到图像的好层。他们应该在网络的顶端。你知道吗
而且,
tanh
的激活在过去十年也是如此。:)使用relu
,除了最后一层,它应该没有激活。你知道吗还要考虑变换坐标,使图像的中间是原点,边在-1和1之间。这将规范化预测空间一点,可能会有所帮助。你知道吗
希望这有帮助。你知道吗
相关问题 更多 >
编程相关推荐