Как определить переменную с такой же формой тензора в Керасе? - PullRequest
2 голосов
/ 29 апреля 2019

Я хочу определить свою собственную функцию потерь в кератах, а bce_loss умножить на переменную W.На самом деле, W имеет ту же форму, что и тензор bce_loss.

Если я печатаю тензор bce_loss, возможно, это можно показать следующим образом:

Tensor("loss_8/activation_14_loss/logistic_loss:0", shape=(?, 3), dtype=float32)

Теперь яне знаю, как получить форму bce_loss и сделать переменную W такой же, как bce_loss.

Мой код:

def myLoss(y_true, y_pred):
    bce_loss = K.binary_crossentropy(y_true, y_pred)
    # want to get a variable W with the same shape of bce_loss
    # And W is initialized with normal distribution.
    val = np.random.normal(0, 0.05, size= bce_loss.size()) 
    W = keras.variable( val )
    return K.mean(self.W*bce_loss, axis = -1)

1 Ответ

2 голосов
/ 29 апреля 2019

Вы можете определить свою функцию потерь следующим образом:

from keras import backend as K
import numpy as np

def myLoss(y_true, y_pred):
    bce_loss = K.binary_crossentropy(y_true, y_pred)
    w = K.random_normal(K.shape(bce_loss), 0, 0.05)
    return K.mean(w * bce_loss, axis=-1)

y_t = K.placeholder((1,2))
y_p = K.placeholder((1,2))
loss = myLoss(y_t, y_p)
print(K.get_session().run(loss, {y_t: np.array([[1,1]]), y_p: np.array([[0.5, 0.2]])}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...