Проблемы формирования тензора Кераса (нарезка) add_loss потеря подавления нуля

#keras #shapes #tensor #loss-function #loss

Вопрос:

Я реализовал автоэнкодер, который принимает в качестве входных данных реальные изображения, скрытое пространство должно быть черно-белым кодированием состояний этого изображения. (это настольная игра) Я пытаюсь создать новую потерю, используя класс Layer. Я хочу реализовать нулевую потерю подавления. Моя проблема в линии, где происходит нарезка. (строка 7 здесь) Может ли кто-нибудь помочь мне решить проблему нарезки

 class Zero_Suppress(Layer):
    def __init__(self, rate=1e-2):
        super(Zero_Suppress, self).__init__()
        self.rate = rate

    def call(self, inputs):
        loss = K.mean(inputs, axis = [0,1])
        loss = K.mean(loss[:, 1:], axis =1)
        #loss = K.reshape(loss, (-1,1,1))
        self.add_loss(loss * self.rate)
        return inputs 
 

Код ошибки, который я получаю:

 ValueError: in user code:

    min_paper.py:17 call  *
        loss = K.mean(loss[:, 1:], axis =1)
    ValueError: Index out of range using input dim 0; input has only 0 dims for '{{node zero__suppress/strided_slice}} = StridedSlice[Index=DT_INT32, T=DT_FLOAT, begin_mask=1, ellipsis_mask=0, end_mask=3, new_axis_mask=0, shrink_axis_mask=0](zero__suppress/Mean, zero__suppress/strided_slice/stack, zero__suppress/strided_slice/stack_1, zero__suppress/strided_slice/stack_2)' with input shapes: [], [2], [2], [2] and with computed input tensors: input[3] = <1 1>.```