DeepReinforcementLearning / DeepReinforcementLearningInAction

Code from the Deep Reinforcement Learning in Action book from Manning, Inc
MIT License
703 stars 302 forks source link

Appendix A.4 #42

Open Oderlesspanic opened 8 months ago

Oderlesspanic commented 8 months ago

I get an error returned for this and i have no idea how to fix it

I write in Spyder 5.4.3 with Python 3.11

codeline:

`import torch import torchvision as TV import numpy as np from matplotlib import pyplot as plt

def nn(x,w1,w2): l1 = x @ w1 l1 = torch.relu(l1) l2 = l1 @ w2 return l2

w1 = torch.randn(784,200,requires_grad=True) w2 = torch.randn(200,10,requires_grad=True)

mnist_data = TV.datasets.MNIST("MNIST", train=True, download=False)

plt.figure(figsize=(10,7)) plt.imshow(mnist_data.train_data[0]) plt.axis('off')

lr = 0.0001 epochs = 2500 batch_size = 1000 losses = [] lossfn = torch.nn.CrossEntropyLoss() for i in range(epochs): rid = np.random.randint(0,mnist_data.train_data.shape[0],size=batch_size) x = mnist_data.train_data[rid].float().flatten(start_dim=1) x /= x.max() pred = nn(x,w1,w2) target = mnist_data.train_labels[rid] loss = lossfn(pred,target) losses.append(loss) loss.backward() with torch.no_grad(): w1 -= lr w1.grad w2 -= lr w2.grad

plt.figure(figsize=(10,7)) plt.xlabel("Training Time", fontsize=22) plt.ylabel("Loss", fontsize=22) plt.plot(losses)`

console return:

File ~/anaconda3/lib/python3.11/site-packages/spyder_kernels/py3compat.py:356 in compat_exec exec(code, globals, locals)

File ~/.spyder-py3/temp.py:49 plt.plot(losses)

File ~/anaconda3/lib/python3.11/site-packages/matplotlib/pyplot.py:2812 in plot return gca().plot(

File ~/anaconda3/lib/python3.11/site-packages/matplotlib/axes/_axes.py:1688 in plot lines = [self._get_lines(args, data=data, **kwargs)]

File ~/anaconda3/lib/python3.11/site-packages/matplotlib/axes/_base.py:311 in call yield from self._plot_args(

File ~/anaconda3/lib/python3.11/site-packages/matplotlib/axes/_base.py:496 in _plot_args x, y = index_of(xy[-1])

File ~/anaconda3/lib/python3.11/site-packages/matplotlib/cbook/init.py:1661 in index_of y = _check_1d(y)

File ~/anaconda3/lib/python3.11/site-packages/matplotlib/cbook/init.py:1353 in _check_1d return np.atleast_1d(x)

File <__array_function__ internals>:200 in atleast_1d

File ~/anaconda3/lib/python3.11/site-packages/numpy/core/shape_base.py:65 in atleast_1d ary = asanyarray(ary)

File ~/anaconda3/lib/python3.11/site-packages/torch/_tensor.py:956 in array return self.numpy()

RuntimeError: Can't call numpy() on Tensor that requires grad. Use tensor.detach().numpy() instead.

Oderlesspanic commented 8 months ago

i solve it, use this

plt.plot([loss.item() for loss in losses])

instead of this

plt.plot(losses)