#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()
помогло.