Реализация пользовательской функции потерь mse в тензорном потоке - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь реализовать пользовательскую функцию потерь в TensorFlow для расчета среднеквадратичной потери ошибок.

Я принимаю разницу истинных и предсказанных значений, y и yPredict, которые являются векторами (1D). Я добавляю еще одну переменную 2 * j * pi, где j колеблется от -20 до 20. Однако при вычислении этой строки кода возникает проблема.

err_matrix = tf.Variable(np.zeros((np.shape(yPredict)[0], np.shape(yPredict)[1], k.shape[0])))

Вот сообщение об ошибке:

ValueError: slice index 1 of dimension 1 out of bounds. for 'strided_slice' (op: 'StridedSlice') with input shapes: [100,1,41], [2], [2], [2] and with computed input tensors: input[1] = <0 1>, input[2] = <0 2>, input[3] = <1 1>.

Это полная функция и вызов функции, а также то, как она связана с оптимизатором.

Функция:

def wmse(yPredict,y):
    k = tf.constant(np.array(range(-20, 21)))
    err_matrix = tf.Variable(np.zeros((np.shape(yPredict)[0], np.shape(yPredict)[1], k.shape[0])))
    for j in range(1, k.shape[0]):
        err_matrix[:, j] += tf.subtract(tf.subtract(yPredict,y), tf.constant(2*j*tf.constant(np.pi)))
    errs = tf.reduce_min(err_matrix, axis=1)
    std_CNN_errors = tf.sqrt(tf.reduce_mean(tf.square(errs)))
    return std_CNN_errors

Вызов функции:

cost_function = wmse(network_outputs, outputs)
optimizer = tf.train.AdamOptimizer(learning_rate=1e-4).minimize(cost_function, var_list=tf.trainable_variables())

Может ли кто-нибудь помочь мне с этим, пожалуйста? Спасибо!

...