我正在尝试在Keras中实现自定义损失功能。该模型需要大量时间才能编译,并且用完了内存(RAM)。
我的预测具有以下形状:(无,16、16、5),其中最后一个维度包含以下元素:
[probability, x_coordinate_of_box, y_coordinate of box, width_of_box, height_of_box]
我正在尝试实现类似于此损失功能的功能:
import keras.backend as K
def yoloLoss(y_true, y_pred):
sse = 0
l_bbox = 0
shape = y_pred.get_shape().as_list()
w_coord = 1
w_box = 5
for x in range(32):
for i in range(shape[1]):
for j in range(shape[2]):
sse += (y_pred[x][i][j][0] - y_true[x][i][j][0])**2
l_bbox += w_coord*((y_pred[x][i][j][1] - y_true[x][i][j][1])**2 + (y_pred[x][i][j][2] - y_true[x][i][j][2])**2) + w_box*((y_pred[x][i][j][2]**0.5 - y_true[x][i][j][2]**0.5)**2 + (y_pred[x][i][j][3]**0.5 - y_true[x][i][j][3]**0.5)**2)
return sse + l_bbox
注意:x的范围是32,因为batch_size是32。
K.get_shape().as_list()
或K.int_shape()
返回批处理大小为无
我希望模型使用自定义丢失,但是model.compile()
步骤会继续处理并耗尽内存/ RAM。
此外,如果有人可以帮助我确定运行时的预测形状,那真是太好了!