Изменение значений матрицы-это изменение весов модели

#python-3.x #deep-learning #neural-network #numpy-ndarray

Вопрос:

Я работаю с весами нейронных сетей и вижу странную вещь. Я написал этот код:

 x = list(mnist_classifier.named_parameters()) weight = x[0][1].detach().cpu().numpy().squeeze() print(weight)  

Таким образом, я получаю следующие значения:

 [[[-0.2435195 0.05255396 -0.32765684]  [ 0.06372751 0.03564635 -0.31417745]  [ 0.14694464 -0.03277654 -0.10328879]]   [[-0.13716389 0.0128522 0.24107361]  [ 0.45231998 0.15497956 0.11112727]  [ 0.18206735 -0.22820294 -0.29146808]]   [[ 1.1747813 0.9206593 0.49848938]  [ 1.1558323 1.0859997 0.7743778 ]  [ 1.0287125 0.52122927 0.4096022 ]]   [[-0.2980809 -0.04358199 -0.26461622]  [-0.1165191 -0.2267315 0.37054354]  [ 0.4429275 0.44967037 0.06866694]]   [[ 0.39549246 0.10898255 0.32859102]  [-0.07753246 0.1628792 0.03021396]  [ 0.323148 0.5103844 0.16282919]]  ....  

Теперь, когда я изменяю значение первой матрицы weight[0] на 0.1 , оно изменяет значения исходных весов:

 x = list(mnist_classifier.named_parameters()) weight = x[0][1].detach().cpu().numpy().squeeze() weight[0] = weight[0] * 0   0.1 print(list(mnist_classifier.named_parameters()))  
 [('conv1.weight', Parameter containing: tensor([[[[ 0.1000, 0.1000, 0.1000],  [ 0.1000, 0.1000, 0.1000],  [ 0.1000, 0.1000, 0.1000]]],    [[[-0.1372, 0.0129, 0.2411],  [ 0.4523, 0.1550, 0.1111],  [ 0.1821, -0.2282, -0.2915]]],    [[[ 1.1748, 0.9207, 0.4985],  [ 1.1558, 1.0860, 0.7744],  [ 1.0287, 0.5212, 0.4096]]], ...  

Что здесь происходит? Как это weight[0] связано с нейронной сетью?

Комментарии:

1. Я думаю, что они такие и разница только в округлении? Попробуйте вычесть первый тензор из второго и посмотрите, в чем разница?

2. Ты имеешь в виду weight[0] - weight[1] ?

3. Пожалуйста, будьте более точны. Вы удивлены, что вес модели изменился? Вы ожидали, что это произойдет? Или вы имеете в виду разницу между 0,2411 и 0,24107361?

4. Я имел в виду вычитание 2-й матрицы 2-го тензора веса из 2-й матрицы первого тензора веса. Разница, скорее всего, будет равна нулю, что указывает на то, что единственная разница связана с различными настройками печати по умолчанию.

5. @лейлот, да. Я удивлен, почему изменения weight[0] влияют на значения весов сети.

Ответ №1:

Я нашел ответ. По-видимому, при копировании np arrays вы должны использовать copy() в противном случае это ссылка для передачи. Так что использование copy() помогло.