(Примечание: я знаю, что подобный вопрос был задан здесь , но предоставленные ответы не касались вопроса о семени, постоянно поддерживаемом в записной книжке Jupyter.)
I ' я пытаюсь запустить код, основанный на определенном семени в блокноте Jupyter. Мой первый код:
np.random.seed(42)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1) # 4 + 3X + noise
X_b = np.c_[np.ones((100,1)), X] # concatenate x0 = 1 to each instance
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
theta_best
, который выводит
array([[4.21509616],
[2.77011339]])
Lovely.
Теперь, когда я запускаю следующий код градиентного спуска в другой ячейке:
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)
X_b = np.c_[np.ones((100,1)), X] # concatenate x0 = 1 to each instance
eta = 0.1 # learning rate
n_iterations = 1000
m = 100
theta = np.random.randn(2,1) # random initialization
for iteration in range(n_iterations):
gradients = 2/m * X_b.T.dot(X_b.dot(theta) - y) # the equation of the gradient vector from above
theta = theta - eta * gradients # next step of theta
print(theta)
Я должен вывести те же результаты, что и выше. Единственная причина, по которой я этого не делаю, заключается в том, что rand()
основан на другом семени. (Вы можете спросить, почему я повторил определения переменных, но это не имеет отношения к рассматриваемому вопросу.) Единственный способ получить последовательный вывод - это переопределить начальное значение в np.random.seed(42)
до градиентного спуска. Есть ли способ установить np.random.seed()
для всего ноутбука Jupyter?