有没有办法用给定的成本函数合并两个numpy数组?

时间:2018-09-21 21:05:41

标签: python python-3.x numpy neural-network

对于我的神经网络,我正在尝试创建一个成本函数。我正在使用以下成本函数:

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 :(得分:0)

您可以使用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

此答案假设您的输入不是numpy数组,否则您可以直接使用actual_outputsdesired_outputs进行计算。

答案 1 :(得分:0)

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数组,可能会花费更长的时间

列表大小越大,您的收益就越大