Пока я изучаю «Deeplearning с нуля» и его пример кода, я вижу, что значение глобальной переменной изменяется внутри функции.
Я пытался понять это, но не смог. Я надеюсь, что кто-то скажет мне, как работает этот код.
Подробно, объект "net.W" изменяется после изменения ключевого слова "weight", получающего "net.W" в функции. Я думаю, что "net.W" не изменится, потому что это глобальная переменная без глобальной. Но это изменилось, и я не могу понять.
Код был изменен на основе https://github.com/oreilly-japan/deep-learning-from-scratch.
import sys
import os
import numpy as np
class simpleNet:
def __init__(self):
self.W = np.random.rand(2,3)
def predict(self, x):
return np.dot(x, self.W)
def loss(self, x, t):
z = self.predict(x)
z = np.sum(z)
return z
def numerical_gradient(f, weight):
h = 1.0
grad = np.zeros_like(weight)
it = np.nditer(weight,
flags=['multi_index'],
op_flags=['readwrite'])
while not it.finished:
idx = it.multi_index
print("Before net.W: \n",net.W)
weight[idx] = weight[idx] + h
print("After net.W: \n",net.W)
print(' ')
it.iternext()
net = simpleNet()
print('Originla net.W: \n', net.W)
x = np.array([0.6, 0.9])
t = np.array([0,0,1])
dW = numerical_gradient(f, net.W)
Я ожидал, что напечатанные объекты "net.W" совпадают, но компонент "net.W" изменяется (+1,0 на h) каждый раз после изменения ключевого слова "weight".
''''''
Originla net.W:
[[0.74942285 0.28408918 0.43493956]
[0.50182208 0.19556924 0.75924396]]
''''''
''''''
Before net.W:
[[0.74942285 0.28408918 0.43493956]
[0.50182208 0.19556924 0.75924396]]
After net.W:
[[1.74942285 0.28408918 0.43493956]
[0.50182208 0.19556924 0.75924396]]
Before net.W:
[[1.74942285 0.28408918 0.43493956]
[0.50182208 0.19556924 0.75924396]]
After net.W:
[[1.74942285 1.28408918 0.43493956]
[0.50182208 0.19556924 0.75924396]]
Before net.W:
[[1.74942285 1.28408918 0.43493956]
[0.50182208 0.19556924 0.75924396]]
After net.W:
[[1.74942285 1.28408918 1.43493956]
[0.50182208 0.19556924 0.75924396]]
Before net.W:
[[1.74942285 1.28408918 1.43493956]
[0.50182208 0.19556924 0.75924396]]
After net.W:
[[1.74942285 1.28408918 1.43493956]
[1.50182208 0.19556924 0.75924396]]
Before net.W:
[[1.74942285 1.28408918 1.43493956]
[1.50182208 0.19556924 0.75924396]]
After net.W:
[[1.74942285 1.28408918 1.43493956]
[1.50182208 1.19556924 0.75924396]]
Before net.W:
[[1.74942285 1.28408918 1.43493956]
[1.50182208 1.19556924 0.75924396]]
After net.W:
[[1.74942285 1.28408918 1.43493956]
[1.50182208 1.19556924 1.75924396]]
''''''