Не могу вызвать numpy() для тензора, для которого требуется градация. Вместо этого используйте tensor.detach().numpy()

#python #numpy #pytorch #tensor

Вопрос:

Это мой второй вопрос по этой проблеме. Изначально у меня была ошибка AttributeError: объект numpy.ndarray не имеет атрибута «журнал». Затем U12-Forward помог мне решить эту проблему. Но возникла новая проблема.

 import torch
import numpy as np
import matplotlib.pyplot as plt

x = torch.tensor([[5., 10.],
                  [1., 2.]], requires_grad=True)
var_history = []
fn_history = []
alpha = 0.001
optimizer = torch.optim.SGD([x], lr=alpha)

def function_parabola(variable):
    return np.prod(np.log(np.log(variable   7)))


def make_gradient_step(function, variable):
    function_result = function(variable)
    function_result.backward()
    optimizer.step()
    optimizer.zero_grad()


for i in range(500):
    var_history.append(x.data.numpy().copy())
    fn_history.append(function_parabola(x).data.cpu().detach().numpy().copy())
    make_gradient_step(function_parabola, x)
print(x)
def show_contours(objective,
                  x_lims=[-10.0, 10.0],
                  y_lims=[-10.0, 10.0],
                  x_ticks=100,
                  y_ticks=100):
    x_step = (x_lims[1] - x_lims[0]) / x_ticks
    y_step = (y_lims[1] - y_lims[0]) / y_ticks
    X, Y = np.mgrid[x_lims[0]:x_lims[1]:x_step, y_lims[0]:y_lims[1]:y_step]
    res = []
    for x_index in range(X.shape[0]):
        res.append([])
        for y_index in range(X.shape[1]):
            x_val = X[x_index, y_index]
            y_val = Y[x_index, y_index]
            res[-1].append(objective(np.array([[x_val, y_val]]).T))
    res = np.array(res)
    plt.figure(figsize=(7,7))
    plt.contour(X, Y, res, 100)
    plt.xlabel('$x_1


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

1. Traceback (most recent call last): File "C:UsersKPPycharmProjectspythonProjectHomeWorkClassWork.py", line 25, in <module> _history.append(function_parabola(x).data.cpu().detach().numpy().copy()) File "C:UsersKPPycharmProjectspythonProjectHomeWorkClassWork.py", line 13, in function_parabola return np.prod(np.log(np.log(variable 7))) File "C:UsersKPPycharmProjectspythonProjectvenvlibsite-packagestorch_tensor.py", line 643, in __array__ return self.numpy() RuntimeError: Can't call numpy() on Tensor that requires grad. Use tensor.detach().numpy() instead.

2. Почему это помечено как TensorFlow? Вы случайно не используете тензоры из обоих фреймворков?

3. @Pranav Vempati К сожалению, я не знаю, но как я могу это узнать?

4. Очевидно, что в опубликованном фрагменте кода TensorFlow нет кода TensorFlow. Использует ли ваше более широкое приложение TensorFlow в какой-либо степени? Кроме того, я полагаю torch , что тег относится PyTorch сюда?

5. @Пранав Вемпати ,да, ПаЙторч.

Ответ №1:

Измените функцию function_parabola() для работы с тензорами PyTorch и используйте эквиваленты PyTorch исходных операций numpy, например:

 import torch
import numpy as np
import matplotlib.pyplot as plt

x = torch.tensor([[5., 10.],
                  [1., 2.]], requires_grad=True)
var_history = []
fn_history = []
alpha = 0.001
optimizer = torch.optim.SGD([x], lr=alpha)

def function_parabola(variable):
    return (torch.prod(torch.log(torch.log(torch.as_tensor(variable   7)))))


def make_gradient_step(function, variable):
    function_result = function(variable)
    function_result.backward()
    optimizer.step()
    optimizer.zero_grad()


for i in range(500):
    var_history.append(x.data.numpy().copy())
    fn_history.append(function_parabola(x).data.cpu().detach().numpy())
    make_gradient_step(function_parabola, x)
print(x)
def show_contours(objective,
                  x_lims=[-10.0, 10.0],
                  y_lims=[-10.0, 10.0],
                  x_ticks=100,
                  y_ticks=100):
    x_step = (x_lims[1] - x_lims[0]) / x_ticks
    y_step = (y_lims[1] - y_lims[0]) / y_ticks
    X, Y = np.mgrid[x_lims[0]:x_lims[1]:x_step, y_lims[0]:y_lims[1]:y_step]
    res = []
    for x_index in range(X.shape[0]):
        res.append([])
        for y_index in range(X.shape[1]):
            x_val = X[x_index, y_index]
            y_val = Y[x_index, y_index]
            res[-1].append(objective(np.array([[x_val, y_val]]).T))
    res = np.array(res)
    plt.figure(figsize=(7,7))
    plt.contour(X, Y, res, 100)
    plt.xlabel('$x_1



)
plt.ylabel('$x_2

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

1. Traceback (most recent call last): File "C:UsersKPPycharmProjectspythonProjectHomeWorkClassWork.py", line 25, in <module> _history.append(function_parabola(x).data.cpu().detach().numpy().copy()) File "C:UsersKPPycharmProjectspythonProjectHomeWorkClassWork.py", line 13, in function_parabola return np.prod(np.log(np.log(variable 7))) File "C:UsersKPPycharmProjectspythonProjectvenvlibsite-packagestorch_tensor.py", line 643, in __array__ return self.numpy() RuntimeError: Can't call numpy() on Tensor that requires grad. Use tensor.detach().numpy() instead.

2. Почему это помечено как TensorFlow? Вы случайно не используете тензоры из обоих фреймворков?

3. @Pranav Vempati К сожалению, я не знаю, но как я могу это узнать?

4. Очевидно, что в опубликованном фрагменте кода TensorFlow нет кода TensorFlow. Использует ли ваше более широкое приложение TensorFlow в какой-либо степени? Кроме того, я полагаю torch , что тег относится PyTorch сюда?

5. @Пранав Вемпати ,да, ПаЙторч.

Ответ №1:

Измените функцию function_parabola() для работы с тензорами PyTorch и используйте эквиваленты PyTorch исходных операций numpy, например:


)
show_contours(function_parabola)
plt.scatter(np.array(var_history)[:,0], np.array(var_history)[:,1], s=10, c='r');
plt.show()

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

1. Traceback (most recent call last): File "C:UsersKPPycharmProjectspythonProjectHomeWorkClassWork.py", line 25, in <module> _history.append(function_parabola(x).data.cpu().detach().numpy().copy()) File "C:UsersKPPycharmProjectspythonProjectHomeWorkClassWork.py", line 13, in function_parabola return np.prod(np.log(np.log(variable 7))) File "C:UsersKPPycharmProjectspythonProjectvenvlibsite-packagestorch_tensor.py", line 643, in __array__ return self.numpy() RuntimeError: Can't call numpy() on Tensor that requires grad. Use tensor.detach().numpy() instead.

2. Почему это помечено как TensorFlow? Вы случайно не используете тензоры из обоих фреймворков?

3. @Pranav Vempati К сожалению, я не знаю, но как я могу это узнать?

4. Очевидно, что в опубликованном фрагменте кода TensorFlow нет кода TensorFlow. Использует ли ваше более широкое приложение TensorFlow в какой-либо степени? Кроме того, я полагаю torch , что тег относится PyTorch сюда?

5. @Пранав Вемпати ,да, ПаЙторч.

Ответ №1:

Измените функцию function_parabola() для работы с тензорами PyTorch и используйте эквиваленты PyTorch исходных операций numpy, например:


)
plt.ylabel('$x_2

)
plt.ylabel('$x_2

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

1. Traceback (most recent call last): File "C:UsersKPPycharmProjectspythonProjectHomeWorkClassWork.py", line 25, in <module> _history.append(function_parabola(x).data.cpu().detach().numpy().copy()) File "C:UsersKPPycharmProjectspythonProjectHomeWorkClassWork.py", line 13, in function_parabola return np.prod(np.log(np.log(variable 7))) File "C:UsersKPPycharmProjectspythonProjectvenvlibsite-packagestorch_tensor.py", line 643, in __array__ return self.numpy() RuntimeError: Can't call numpy() on Tensor that requires grad. Use tensor.detach().numpy() instead.

2. Почему это помечено как TensorFlow? Вы случайно не используете тензоры из обоих фреймворков?

3. @Pranav Vempati К сожалению, я не знаю, но как я могу это узнать?

4. Очевидно, что в опубликованном фрагменте кода TensorFlow нет кода TensorFlow. Использует ли ваше более широкое приложение TensorFlow в какой-либо степени? Кроме того, я полагаю torch , что тег относится PyTorch сюда?

5. @Пранав Вемпати ,да, ПаЙторч.

Ответ №1:

Измените функцию function_parabola() для работы с тензорами PyTorch и используйте эквиваленты PyTorch исходных операций numpy, например:


)
show_contours(function_parabola)
plt.scatter(np.array(var_history)[:,0], np.array(var_history)[:,1], s=10, c='r');
plt.show()

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

1. Traceback (most recent call last): File "C:UsersKPPycharmProjectspythonProjectHomeWorkClassWork.py", line 25, in <module> _history.append(function_parabola(x).data.cpu().detach().numpy().copy()) File "C:UsersKPPycharmProjectspythonProjectHomeWorkClassWork.py", line 13, in function_parabola return np.prod(np.log(np.log(variable 7))) File "C:UsersKPPycharmProjectspythonProjectvenvlibsite-packagestorch_tensor.py", line 643, in __array__ return self.numpy() RuntimeError: Can't call numpy() on Tensor that requires grad. Use tensor.detach().numpy() instead.

2. Почему это помечено как TensorFlow? Вы случайно не используете тензоры из обоих фреймворков?

3. @Pranav Vempati К сожалению, я не знаю, но как я могу это узнать?

4. Очевидно, что в опубликованном фрагменте кода TensorFlow нет кода TensorFlow. Использует ли ваше более широкое приложение TensorFlow в какой-либо степени? Кроме того, я полагаю torch , что тег относится PyTorch сюда?

5. @Пранав Вемпати ,да, ПаЙторч.

Ответ №1:

Измените функцию function_parabola() для работы с тензорами PyTorch и используйте эквиваленты PyTorch исходных операций numpy, например:


)
show_contours(function_parabola)
plt.scatter(np.array(var_history)[:,0], np.array(var_history)[:,1], s=10, c=’r’);

plt.show()

)
plt.ylabel(‘$x_2

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

1. Traceback (most recent call last): File "C:UsersKPPycharmProjectspythonProjectHomeWorkClassWork.py", line 25, in <module> _history.append(function_parabola(x).data.cpu().detach().numpy().copy()) File "C:UsersKPPycharmProjectspythonProjectHomeWorkClassWork.py", line 13, in function_parabola return np.prod(np.log(np.log(variable 7))) File "C:UsersKPPycharmProjectspythonProjectvenvlibsite-packagestorch_tensor.py", line 643, in __array__ return self.numpy() RuntimeError: Can't call numpy() on Tensor that requires grad. Use tensor.detach().numpy() instead.

2. Почему это помечено как TensorFlow? Вы случайно не используете тензоры из обоих фреймворков?

3. @Pranav Vempati К сожалению, я не знаю, но как я могу это узнать?

4. Очевидно, что в опубликованном фрагменте кода TensorFlow нет кода TensorFlow. Использует ли ваше более широкое приложение TensorFlow в какой-либо степени? Кроме того, я полагаю torch , что тег относится PyTorch сюда?

5. @Пранав Вемпати ,да, ПаЙторч.

Ответ №1:

Измените функцию function_parabola() для работы с тензорами PyTorch и используйте эквиваленты PyTorch исходных операций numpy, например:


)
show_contours(function_parabola)
plt.scatter(np.array(var_history)[:,0], np.array(var_history)[:,1], s=10, c=’r’);
plt.show()

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

1. Traceback (most recent call last): File "C:UsersKPPycharmProjectspythonProjectHomeWorkClassWork.py", line 25, in <module> _history.append(function_parabola(x).data.cpu().detach().numpy().copy()) File "C:UsersKPPycharmProjectspythonProjectHomeWorkClassWork.py", line 13, in function_parabola return np.prod(np.log(np.log(variable 7))) File "C:UsersKPPycharmProjectspythonProjectvenvlibsite-packagestorch_tensor.py", line 643, in __array__ return self.numpy() RuntimeError: Can't call numpy() on Tensor that requires grad. Use tensor.detach().numpy() instead.

2. Почему это помечено как TensorFlow? Вы случайно не используете тензоры из обоих фреймворков?

3. @Pranav Vempati К сожалению, я не знаю, но как я могу это узнать?

4. Очевидно, что в опубликованном фрагменте кода TensorFlow нет кода TensorFlow. Использует ли ваше более широкое приложение TensorFlow в какой-либо степени? Кроме того, я полагаю torch , что тег относится PyTorch сюда?

5. @Пранав Вемпати ,да, ПаЙторч.

Ответ №1:

Измените функцию function_parabola() для работы с тензорами PyTorch и используйте эквиваленты PyTorch исходных операций numpy, например: