Nothing
knitr::opts_chunk$set( collapse = TRUE, comment = "#>" )
library(rTorch) nn <- torch$nn transforms <- torchvision$transforms torch$set_default_dtype(torch$float)
# Hyper-parameters input_size <- 784L num_classes <- 10L num_epochs <- 5L batch_size <- 100L learning_rate <- 0.001
# MNIST dataset (images and labels) # IDX format local_folder <- '../datasets/raw_data' train_dataset = torchvision$datasets$MNIST(root=local_folder, train=TRUE, transform=transforms$ToTensor(), download=TRUE) test_dataset = torchvision$datasets$MNIST(root=local_folder, train=FALSE, transform=transforms$ToTensor()) # Data loader (input pipeline) train_loader = torch$utils$data$DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=TRUE) test_loader = torch$utils$data$DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=FALSE)
class(train_loader) length(train_loader)
# Logistic regression model model = nn$Linear(input_size, num_classes) # Loss and optimizer # nn.CrossEntropyLoss() computes softmax internally criterion = nn$CrossEntropyLoss() optimizer = torch$optim$SGD(model$parameters(), lr=learning_rate) print(model)
# Train the model iter_train_loader <- iterate(train_loader) total_step <-length(iter_train_loader)
for (epoch in 1:num_epochs) { i <- 0 for (obj in iter_train_loader) { images <- obj[[1]] # tensor torch.Size([64, 3, 28, 28]) labels <- obj[[2]] # tensor torch.Size([64]), labels from 0 to 9 # cat(i, "\t"); print(images$shape) # Reshape images to (batch_size, input_size) images <- images$reshape(-1L, 28L*28L) # images <- torch$as_tensor(images$reshape(-1L, 28L*28L), dtype=torch$double) # Forward pass outputs <- model(images) loss <- criterion(outputs, labels) # Backward and optimize optimizer$zero_grad() loss$backward() optimizer$step() if ((i+1) %% 100 == 0) { cat(sprintf('Epoch [%d/%d], Step [%d/%d], Loss: %f \n', epoch+1, num_epochs, i+1, total_step, loss$item())) } i <- i + 1 } }
# Adjust weights and reset gradients iter_test_loader <- iterate(test_loader) with(torch$no_grad(), { correct <- 0 total <- 0 for (obj in iter_test_loader) { images <- obj[[1]] # tensor torch.Size([64, 3, 28, 28]) labels <- obj[[2]] # tensor torch.Size([64]), labels from 0 to 9 images = images$reshape(-1L, 28L*28L) # images <- torch$as_tensor(images$reshape(-1L, 28L*28L), dtype=torch$double) outputs = model(images) .predicted = torch$max(outputs$data, 1L) predicted <- .predicted[1L] total = total + labels$size(0L) correct = correct + sum((predicted$numpy() == labels$numpy())) } cat(sprintf('Accuracy of the model on the 10000 test images: %f %%', (100 * correct / total))) })
# Save the model checkpoint torch$save(model$state_dict(), 'model.ckpt')
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.