The Author Online Book Forums are Moving

The Author Online Book Forums will soon redirect to Manning's liveBook and liveVideo. All book forum content will migrate to liveBook's discussion forum and all video forum content will migrate to liveVideo. Log in to liveBook or liveVideo with your Manning credentials to join the discussion!

Thank you for your engagement in the AoF over the years! We look forward to offering you a more enhanced forum experience.

449049 (17) [Avatar] Offline
#1
Although the dataset isn't yet in the book's repo. I was able to download it without much hassle since you provided the source. I made sure I was using the right one by checking it's dimensions. Everything worked fine until the following line:
daily_bikes = bikes.view(-1, 24, bikes.shape[1])

This line attempts to break the dataset into batches of daily (24 hours) segments. However this produces the following error:
RuntimeError: invalid argument 2: size '[-1 x 24 x 17]' is invalid for input with 295443 elements

My guess: The storage is holding 295443 elements. If we try to divide that by the other two dimensions (24*17) the result is a decimal number. So inferring the first dimension via -1 won't work?

Solution: If we remove the last 3 rows from the dataset, the total number of elements in storage is reduced to 295392, which is divisible by the other two dimensions (24*17).
total_elements = 295443
for i in range(295443):
    total_elements -= 17
    if total % (24*17) == 0:
        print(total)
        print(i)
        break


Now the line works as intended. I imagine you had prepped the raw data from the source so it would just work, but you forgot to add it to the repo. ;-)
bikes = bikes[sorted_row_idxs]
bikes_test = bikes[:-3, :]
bikes_test = bikes_test.view(-1, 24, bikes.shape[1])
Luca Antiga (4) [Avatar] Offline
#2
Thank you for your assistance on Ch4 (again). And apologies for the glitches with Ch4.

You're correct, we had slightly edited the bike sharing dataset and didn't post it back on the repository. I'm going to fix this by this weekend.

Thanks again
321640 (1) [Avatar] Offline
#3
The underlying problem is that view may only fold an array into evenly sized chunks, thus B x C x L must be == to the number of elements in the backing storage array.

IMHO the following is the correct way to resolve this:

batch = 24
rows = bikes.shape[0] - bikes.shape[0] % batch
bikes[:rows, :].view(-1, batch, bikes.shape[1]).size()

torch.Size([724, 24, 17])