对于我的神经网络,我正在尝试创建一个成本函数。我正在使用以下成本函数:
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(或任何其他方法)执行此操作的更有效方法?
答案 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_outputs
和desired_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数组,可能会花费更长的时间
列表大小越大,您的收益就越大