我一直在研究神經網路中的反向傳播演算法。我的程式計算每個權重相對于損失函式的偏導數,并將其存盤在一個陣列中。每層的權重存盤在單個 2d numpy 陣列中,因此偏導數存盤為 numpy 陣列的陣列,其中每個 numpy 陣列具有不同的大小,具體取決于每層中的神經元數量。
當我想在使用大量訓練資料后對偏導數陣列求平均值時,我想將每個陣列加在一起并除以陣列數。目前,我只是遍歷每個陣列并將每個元素添加在一起,但有沒有更快的方法?我可以將 ndarray 與 dtype=object 一起使用,但顯然,這已被棄用。
例如,如果我有陣列:
arr1 = [ndarray([[1,1],[1,1],[1,1]]), ndarray([[2,2],[2,2]])]
arr2 = [ndarray([[3,3],[3,3],[3,3]]), ndarray([[4,4],[4,4]])]
我怎樣才能把這些加在一起得到陣列:
arr3 = [ndarray([[4,4],[4,4],[4,4]]), ndarray([[6,6],[6,6]])]
uj5u.com熱心網友回復:
您不需要按元素添加陣列中的數字,通過使用numpy.add來利用 numpy 的并行計算
這里有一些代碼可以做到這一點:
import numpy as np
arr1 = np.asarray([[[1,1],[1,1],[1,1]], [[2,2],[2,2]]])
arr2 = np.asarray([[[3,3],[3,3],[3,3]], [[4,4],[6,6]]])
ans = []
for first, second in zip(arr1, arr2):
ans.append(np.add(first,second))
輸出:
>>> [array([[4, 4], [4, 4], [4, 4]]), array([[6, 6], [8, 8]])]
PS 也可以使用單行串列理解
ans = [np.add(first, second) for first, second in zip(arr1, arr2)]
uj5u.com熱心網友回復:
您可以使用zip/ map/ sum:
import numpy as np
arr1 = [np.array([[1,1],[1,1],[1,1]]), np.array([[2,2],[2,2]])]
arr2 = [np.array([[3,3],[3,3],[3,3]]), np.array([[4,4],[4,4]])]
arr3 = list(map(sum, zip(arr1, arr2)))
輸出:
>>> arr3
[array([[4, 4],
[4, 4],
[4, 4]]),
array([[6, 6],
[6, 6]])]
uj5u.com熱心網友回復:
在 NumPy 中,您可以通過添加兩個 NumPy 陣列來按元素添加兩個陣列。注意:如果您的陣列形狀發生變化,則重新調整陣列的形狀并用 0 填充。
arr1 = np.array([np.array([[1,1],[1,1],[1,1]]), np.array([[2,2],[2,2]])])
arr2 = np.array([np.array([[3,3],[3,3],[3,3]]), np.array([[4,4],[4,4]])])
arr3 = arr2 arr1
uj5u.com熱心網友回復:
您可以使用串列理解:
[x y for x, y in zip(arr1, arr2)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/351765.html
下一篇:為什么我可以將陣列作為輸入傳遞給使用numpy的lambda函式,但我不能將它傳遞給沒有numpy的lambda函式?
