Я хочу, чтобы моя сеть keras предсказывала числовой вывод в диапазоне 60..200.По моему опыту, просто вывести сигмоид * 140 + 60 или аналогичный результат очень плохо в этом случае, и преобразовать его в класс может быть лучше.
Однако я борюсь с определением функции потерь.Очевидно, что предсказывать соседний класс лучше, и его нужно штрафовать меньше.
Пример кода ниже.Сеть, очевидно, будет более сложной и, вероятно, частично сверточной, но это только начало работы.
Текущий код выдает ошибку: «IndexError: только целые числа, кусочки (:
), многоточие (...
)), numpy.newaxis (`None ') и целые или логические массивы являются допустимыми индексами".Я думаю, это имеет смысл, поскольку обратное распространение ограничивает то, что можно сделать, но я не уверен, как правильно разрабатывать и отлаживать функции потерь.
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) )