Есть ли способ объединить два пустых массива с заданной функцией стоимости? - PullRequest
0 голосов
/ 22 сентября 2018

Для моей нейронной сети я пытаюсь создать функцию стоимости.Я использую следующую функцию стоимости:

C = sum((an - yn)^2)
# C = Cost Function, sum = sigma, an = actual_output, yn = desired_output

Вот способ, которым я реализовал это в python:

def cost(actual_outputs, desired_outputs):
    # actual_outputs and desired outputs are numpy arrays
    costs = [(actual_output - desired_output) ** 2 for actual_output, desired_output in zip(actual_outputs, desired_outputs)]
    return sum(costs)

Есть ли более эффективный способ сделать это, используя numpy (или любой другой метод)?

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018
import timeit
import random
import numpy as np
def cost(actual_outputs, desired_outputs):
    # actual_outputs and desired outputs are numpy arrays
    costs = [(actual_output - desired_output) ** 2 for actual_output, desired_output in zip(actual_outputs, desired_outputs)]
    return sum(costs)

def cost2(actual_outputs,desired_outputs):
    return ((actual_outputs-desired_outputs)**2).sum()

actual = [random.random() for _ in range(1000)]
desired = [random.random() for _ in range(1000)]
actual2 = np.array(actual)
desired2 = np.array(desired)
if __name__ == "__main__":
    print(timeit.timeit('cost(actual,desired)','from __main__ import cost,actual,desired',number=10))
    # 0.00271458847557
    print(timeit.timeit('cost2(actual2,desired2)','from __main__ import cost2,actual2,desired2',number=10))
    # 0.000187942916669

выглядит быстрее ... при условии, что это уже массив numpy ... вероятно, потребуется больше времени, если вам придется преобразовать его в массив numpy

чем больше размер списка, тем больше ваша прибыльбудет

0 голосов
/ 22 сентября 2018

Вы можете использовать linalg.norm :

import numpy as np

def cost(actual_outputs, desired_outputs):
    return np.linalg.norm(np.array(actual_outputs) -  np.array(desired_outputs)) ** 2

В этом ответе предполагается, что ваши входные данные не являются пустыми массивами, в противном случае вы можете вычислять, используя actual_outputs и desired_outputs напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...