【问题标题】:Is there any way to merge two numpy arrays with a given cost function?有没有办法将两个具有给定成本函数的 numpy 数组合并?
【发布时间】:2019-02-26 07:07:30
【问题描述】:

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

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(或任何其他方法)来做到这一点?

【问题讨论】:

  • actual_outputdesired_output 长什么样子?
  • costs = sum((actual_output - desired_output) ** 2) 已经是答案,前提是您的两个输入变量 actual_outputdesired_output 都是 NumPy 数组

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


【解决方案1】:
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 数组可能需要更长的时间

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

【讨论】:

    【解决方案2】:

    你可以使用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 进行计算。

    【讨论】:

      猜你喜欢
      • 2017-12-31
      • 1970-01-01
      • 2019-06-09
      • 2020-03-06
      • 2021-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      相关资源
      最近更新 更多