`log_preds[:10]`

returns to you the following numpy ndarray (tensor), the first 10 predictions in log scale:

```
# 0 1
array([[ -0.00002, -11.07446], # 0
[ -0.00138, -6.58385], # 1
[ -0.00083, -7.09025], # 2
[ -0.00029, -8.13645], # 3
[ -0.00035, -7.9663 ], # 4
[ -0.00029, -8.15125], # 5
[ -0.00002, -10.82139], # 6
[ -0.00003, -10.33846], # 7
[ -5.00323, -0.73731], # 8
[ -0.0001 , -9.21326]], # 9
dtype=float32)
```

`np.argmax(log_preds, axis=1)`

By adding the axis argument, numpy looks at the rows and columns individually.

`axis=1`

means that the operation is performed across the rows of `log_preds`

.

That means `np.argmax(log_preds, axis=1)`

returns [0, 0, 0, 0, 0, 0, 0, 0, 1, 0] because `log_preds`

has 10 rows. The index of the maximum value in the first row is 0, the index of the maximum value of the ninth row is 1. This is what it means in the code comments ‘from log probabilities to 0 or 1’.

```
# from here we know that 'cats' is label 0 and 'dogs' is label 1.
data.classes
```

As for what the `0`

or `1`

means? Each row in the `log_preds`

tensor is the predictions (log scale) for a sample (one image). For row 1, the predicted label is `0`

, so it’s a cat. For row ninth, the predicted label is `1`

, so it’s a dog.

Using `np.exp`

for transform a `log_preds`

is relatively straight-forward.

Yeah, `log_preds`

returns to you the second column in the numpy ndarray which is the log predictions it’s a dog. And `np.exp`

turns the log predictions to probabilities:

```
array([-11.07446, -6.58385, -7.09025, -8.13645, -7.9663 , -8.15125,
-10.82139, -10.33846, -0.73731, -9.21326])
```