Я хотел бы построить локально связанную матрицу весов, которая представляет локально связанную нейронную сеть в чистом python / numpy без систем глубокого обучения, таких как Torch или TensorFlow.
Весовая матрица представляет собой неквадратную 2D-матрицу с размером (number_input, number_output). (в моем случае автоэнкодер; ввод> скрытый)
Итак, функцию, которую я хотел бы построить, взять размер матрицы и размер рецептивного поля (номер локального соединения) и дать соответствующую матрицу весов. Я уже создал такую функцию, но для размера ввода 8 и размера вывода 4 (и RF = 4) вывод моей функции:
[[ 0.91822845 0. 0. 0. ]
[-0.24264655 -0.54754138 0. 0. ]
[ 0.55617366 0.12832513 -0.28733965 0. ]
[ 0.27993286 -0.33150324 0.06994107 0.61184121]
[ 0. 0.04286912 -0.20974503 -0.37633903]
[ 0. 0. -0.10386762 0.33553009]
[ 0. 0. 0. 0.09562682]
[ 0. 0. 0. 0. ]]
но я бы хотел:
[[ 0.91822845 0. 0. 0. ]
[-0.24264655 -0.54754138 0. 0. ]
[ 0.55617366 0.12832513 0. 0. ]
[ 0 -0.33150324 0.06994107 0 ]
[ 0. 0.04286912 -0.20974503 0. ]
[ 0. 0. -0.10386762 0.33553009]
[ 0. 0. 0.11581854 0.09562682]
[ 0. 0. 0. 0.03448418]]
Вот мой код Python:
import numpy as np
def local_weight(input_size, output_size, RF):
input_range = 1.0 / input_size ** (1/2)
w = np.zeros((input_size, output_size))
for i in range(0, RF):
for j in range(0, output_size):
w[j+i, j] = np.random.normal(loc=0, scale=input_range, size=1)
return w
print(local_weight(8, 4, 4))
Я с нетерпением жду вашего ответа!