#' addContentToNetwork
#'
#' @return
#' @export
#' @import reticulate
#' @import imager
#' @references \insertRef{Simonyan2014}{neuralstyleR}
#' @references \insertRef{Gatys2016}{neuralstyleR}
#'
#' @examples
runNeuralStyleR<-function(network, t_cont, dtype="torch.FloatTensor",
params.optimizer = 'lbfgs'){
torch <- import("torch")
sci<-import("scipy.optimize")
#set all modules to loss
for(layer in network$contentLayers){
layer$mode <- "loss"
}
for(layer in network$styleLayers){
layer$mode <- "loss"
}
#ToDo delete unnecessary stuff
img <- torch$randn(t_cont$size())$float()$mul(0.001)
net <- network$net
#y <- net$forward(img)
#dy <- torch$zeros(y$size())
evalMain = py_run_string(
"class evaluator():
def __init__(self, network, contentLayers, styleLayers, width, height):
self.network = network
self.contentLayers = contentLayers
self.styleLayers = styleLayers
self.width = width
self.height = height
def loss(self, input):
self.input = torch.FloatTensor(input).view(1, 3, self.width, self.height)
self.y = self.network.forward(self.input)
self.dy = torch.zeros(self.y.size())
loss = 0
for layer in self.contentLayers:
loss += layer.loss.detach().numpy()
for layer in self.styleLayers:
loss += layer.loss.detach().numpy()
return loss
def grad(self, input):
return self.dy.view(-1).numpy()
")
evaluator <- evalMain$evaluator(network$net, network$contentLayers,
network$styleLayers, 512L, 341L)
res <- optim(par = img$numpy(), fn = evaluator$loss, gr = evaluator$grad,
method = "L-BFGS-B", control = list( maxit = 1, abstol = -1, reltol = -1))
#res<-sci$minimize(fun = evaluator$loss, jac = evaluator$grad, x0 = img$numpy(),
# tol = -1L, options = evalMain$options, method="L-BFGS-B")
#, method="L-BFGS-B"
return(evaluator)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.