Я работаю над своим обратным распространением для базовой нейронной сети, и для каждого примера я должен вычислить новые веса. Я сохраняю свои веса в двумерном массиве numpy под названием weights, который выглядит так:
[[0.09719335 0.03077288 0.84256845 0.78993436]
[0.87452232 0.9833483 0.803617 0.46675746]
[0.77805488 0.11567956 0.63747511 0.14045771]]
Для новых весов мне нужно среднее значение каждого веса между парой нейронов. Моя идея заключалась в том, чтобы вычислить его для всех элементов данных в моем обучающем наборе, а затем вычислить среднее значение. Для этого я хотел создать массив нулей с np.zeros, с размером верхнего массива, умноженным на количество элементов данных, которые у меня есть в моем наборе. Я пробовал вот так
newWeights = np.zeros((2,(weights.shape)))
Но это не сработало. есть ли способ инициализировать такой массив или есть другой способ сделать это проще (Я думал о np.append, но не мог этого понять)






weights.shape - это кортеж, поэтому вы не можете включать его как есть, поскольку размеры должны быть целыми числами. Вы можете использовать * для распаковки кортежа:
newWeights = np.zeros((2, *weights.shape))
По сути, это распаковывает weights.shape, поэтому его размеры эквивалентны (2, x, y).
Вы можете сделать это так
import numpy as np
arr = np.array( [[0.09719335, 0.03077288, 0.84256845, 0.78993436],
[0.87452232, 0.9833483, 0.803617, 0.46675746],
[0.77805488, 0.11567956, 0.63747511, 0.14045771]])
arr3D = np.zeros((2,*arr.shape))
Затем вы сохраняете один 2D-массив в 3D-массиве следующим образом:
arr3D[0,:,:] = arr
Расчет среднего массива работает следующим образом:
mean_arr = arr3D.mean(axis=0)
Предполагая, что вы в порядке с изменением вашего массива weights на месте, np.ndarray.resize изменит размер вашего массива до (2, 3, 4) и заполнит новые значения 0:
import numpy as np
weights = np.asarray([[0.09719335, 0.03077288, 0.84256845, 0.78993436], [0.87452232, 0.9833483, 0.803617, 0.46675746],
[0.77805488, 0.11567956, 0.63747511, 0.14045771]])
print(weights.shape) # (3, 4)
weights.resize((2, *weights.shape), refcheck=False)
print(weights.shape) # (2, 3, 4)
[[[0.09719335 0.03077288 0.84256845 0.78993436]
[0.87452232 0.9833483 0.803617 0.46675746]
[0.77805488 0.11567956 0.63747511 0.14045771]]
[[0. 0. 0. 0. ]
[0. 0. 0. 0. ]
[0. 0. 0. 0. ]]]