我希望我的 keras 网络预测 60..200 范围内的数字输出。以我的经验,在这种情况下,仅输出 sigmoid*140+60 或类似的效果非常差,将其转换为类会更好。
但是,我正在努力定义损失函数。显然,预测附近的类会更好,并且应该受到较少的惩罚。
下面的示例代码。网络显然会更复杂,并且可能部分是卷积的,但这只是开始。
当前代码给出错误:“IndexError: only integers, slices ( :), ellipsis ( ...), numpy.newaxis (`None') 和 integer or boolean arrays are valid indexes”。我想这是有道理的,因为反向传播限制了可以做的事情,但我不确定如何正确设计和调试损失函数。
classes = np.array(range(60,200,5))
nc = classes.shape[0]
def myloss(y_true, y_pred):
pred_class = K.argmax(y_pred,axis=1)
return K.sqrt( K.sum( K.square( classes[pred_class] - y_true ) ) )
in1 = Input(shape=(77,))
mid = Dense(50, activation='tanh')( in1 )
out = Dense(nc, activation='softmax')( mid )
model = Model(inputs=in1, outputs=out)
model.add_loss( myloss(sbp, out) )
相关分类