## [1] 300 300 4
# Transform data as xs:(xpos, ypos), ys:(R, G, B) ---------
k <- c()
for (i in 1:300) {
k <- append(k,(rep(i, 300)))
}
xs <- cbind(k, 1:300)
colnames(xs) <- c("xpos", "ypos")
red <- reference[, , 1]
green <- reference[, , 2]
blue <- reference[, , 3]
red_row <- c()
blue_row <- c()
green_row <- c()
for (i in 1:300) {
red_row <- c(red_row, red[i,])
green_row <- c(green_row, green[i,])
blue_row <- c(blue_row, blue[i,])
}
ys <- cbind(red_row, green_row, blue_row)
dim(xs) ## dim of xs should (num of pixels, 2)## [1] 90000 2
## [1] 90000 3
library(tensorflow)
library(abind)
X <- tf$placeholder(tf$float32, shape(NULL, 2L))
Y <- tf$placeholder(tf$float32, shape(NULL, 3L))
W1 <- tf$get_variable("W1", shape(2, 32), initializer = tf$contrib$layers$xavier_initializer())
W2 <- tf$get_variable("W2", shape(32, 32), initializer = tf$contrib$layers$xavier_initializer())
W3 <- tf$get_variable("W3", shape(32, 3), initializer = tf$contrib$layers$xavier_initializer())
b1 <- tf$Variable(tf$random_normal(shape(32)))
b2 <- tf$Variable(tf$random_normal(shape(32)))
b3 <- tf$Variable(tf$random_normal(shape(3)))
L1 <- tf$nn$sigmoid(tf$add(tf$matmul(X, W1), b1))
L2 <- tf$nn$sigmoid(tf$add(tf$matmul(L1, W2), b2))
Y_pred <- tf$nn$bias_add(name = 'pred', value = tf$matmul(L2, W3), bias = b3)
error <- tf$abs(tf$subtract(Y, Y_pred))
sum_error <- tf$reduce_sum(error, 1L)
cost <- tf$reduce_mean(sum_error)
optimizer <- tf$train$AdamOptimizer(learning_rate = 0.1)$minimize(cost)
n_iterations <- 100
batch_size <- 300sess = tf$Session()
sess$run(tf$global_variables_initializer())
for (i in 1:n_iterations) {
avg_cost = 0.
idxs <- sample(1:90000)
n_batches = 300L
for (batch_i in 1:batch_size) {
idxs_i = idxs[((batch_i-1) * batch_size + 1): (batch_i * batch_size)]
sess$run(optimizer,
feed_dict = dict(X = xs[idxs_i, ], Y = ys[idxs_i, ]))
avg_cost = avg_cost + sess$run(cost,
feed_dict = dict(X = xs[idxs_i, ], Y = ys[idxs_i, ]))
}
avg_cost = avg_cost + sess$run(cost,
feed_dict = dict(X = xs[idxs_i, ], Y = ys[idxs_i, ]))
if (i %% 10 == 0) {
print(paste("STEP", i, "COST", avg_cost))
}
if(i %% 1 == 0) {
ys_pred = Y_pred$eval(feed_dict = dict(X = xs), session = sess)
r <- matrix(ys_pred[,1], nrow = 300, byrow = TRUE) ## reverse data to img matrix
g <- matrix(ys_pred[,2], nrow = 300, byrow = TRUE)
b <- matrix(ys_pred[,3], nrow = 300, byrow = TRUE)
img_pred <- abind(r, g, b, along = 3) ## bind R, G, B to third dimension
writePNG(img_pred, paste0("temp/", "img_pred", i, ".png")) ## save image
}
}## [1] "STEP 10 COST 51.8998902887106"
## [1] "STEP 20 COST 49.6529832482338"
## [1] "STEP 30 COST 50.1212345212698"
## [1] "STEP 40 COST 47.7752100154757"
## [1] "STEP 50 COST 46.4221978783607"
## [1] "STEP 60 COST 47.196950815618"
## [1] "STEP 70 COST 46.1519154086709"
## [1] "STEP 80 COST 45.0087495446205"
## [1] "STEP 90 COST 45.2613887786865"
## [1] "STEP 100 COST 44.3548915982246"