# Tensorflow Example
library(tensorflow)
library(reticulate)
# X_train and Y_train data
train_X = c(3.3,4.4,5.5,6.71,6.93,4.168,9.779,6.182,7.59,2.167,
                      7.042,10.791,5.313,7.997,5.654,9.27,3.1)
train_Y <- c(1.7,2.76,2.09,3.19,1.694,1.573,3.366,2.596,2.53,1.221,
             2.827,3.465,1.65,2.904,2.42,2.94,1.3)
n_samples <- length(train_X)
# Parameters 
learning_rate <- 0.01
training_epochs <- 1000
display_step <- 50
# Tensorflow graph input 
X = tf$placeholder(dtype = "float")
Y <- tf$placeholder(dtype = "float")
# Set model weights
W <- tf$Variable(tf$random_uniform(shape(1L), -1.0, 1.0))
#b <- tf$Variable(tf$zeros(shape = (0)))
b <- tf$Variable(tf$zeros(shape(1L)))
# Construct a linear model 
pred <- tf$add(tf$multiply(X, W), b)
# Mean squared error 
cost = tf$reduce_sum(input_tensor = tf$pow(pred - Y, 2))/(2*n_samples)
# Gradient descent 
optimizer = tf$train$GradientDescentOptimizer(learning_rate)$minimize(cost)
# Launch graph and initialize variables 
sess = tf$Session()
2018-01-14 21:20:23.880842: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
sess$run(tf$global_variables_initializer())
# Fit the line 
for (step in 1:training_epochs){
  sess$run(fetches = optimizer, feed_dict = dict(X = train_X, Y =train_Y))
  if (step %%20 == 0)
    cat(step, "-", sess$run(W), sess$run(b), "\n")
}
20 - 0.3721182 -0.05534698 
40 - 0.3692235 -0.03484903 
60 - 0.3664016 -0.01484253 
80 - 0.3636473 0.004683835 
100 - 0.3609592 0.02374159 
120 - 0.3583355 0.04234198 
140 - 0.3557749 0.06049599 
160 - 0.3532756 0.07821435 
180 - 0.3508364 0.09550747 
200 - 0.3484557 0.1123856 
220 - 0.3461321 0.1288586 
240 - 0.3438643 0.1449363 
260 - 0.3416509 0.1606282 
280 - 0.3394907 0.1759435 
300 - 0.3373823 0.1908913 
320 - 0.3353244 0.2054804 
340 - 0.333316 0.2197193 
360 - 0.3313558 0.2336165 
380 - 0.3294426 0.2471801 
400 - 0.3275753 0.2604183 
420 - 0.3257528 0.2733388 
440 - 0.3239741 0.2859491 
460 - 0.3222381 0.2982569 
480 - 0.3205437 0.3102692 
500 - 0.31889 0.3219933 
520 - 0.3172759 0.333436 
540 - 0.3157007 0.3446041 
560 - 0.3141632 0.3555042 
580 - 0.3126625 0.3661427 
600 - 0.311198 0.376526 
620 - 0.3097685 0.3866601 
640 - 0.3083734 0.3965509 
660 - 0.3070118 0.4062044 
680 - 0.3056828 0.4156262 
700 - 0.3043857 0.4248219 
720 - 0.3031198 0.4337969 
740 - 0.3018842 0.4425564 
760 - 0.3006783 0.4511058 
780 - 0.2995013 0.4594501 
800 - 0.2983526 0.4675941 
820 - 0.2972314 0.4755426 
840 - 0.2961372 0.4833004 
860 - 0.2950692 0.4908719 
880 - 0.2940268 0.4982618 
900 - 0.2930095 0.5054744 
920 - 0.2920165 0.5125138 
940 - 0.2910474 0.5193844 
960 - 0.2901016 0.52609 
980 - 0.2891784 0.5326347 
1000 - 0.2882774 0.5390224 
LS0tCnRpdGxlOiAiVGVuc29yZmxvdyBUdXRvcmlhbHMiCm91dHB1dDogaHRtbF9ub3RlYm9vawpkZl9wcmludDogcGFnZWQKYXV0aG9yOiAiTmFuYSAgQm9hdGVuZyIKVGltZTogJ2ByIFN5cy50aW1lKClgJwpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclQiAlZCwgJVknKWAiCi0tLQoKCgoKYGBge3Igc2V0dXAsaW5jbHVkZT1GQUxTRX0KCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgIG91dC53aWR0aCA9IjEwMCUiLAogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgZmlnLmFsaWduID0gJ2RlZmF1bHQnLCAKICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgPSBGQUxTRSwgCiAgICAgICAgICAgICAgICAgICAgICBmaWcuY2FwID0iRmlnLiAzMCIsIAogICAgICAgICAgICAgICAgICAgICAgb3V0LndpZHRoPSIxMDAlIikKCm9wdGlvbnMocmVwci5wbG90LmhlaWdodCA9IDUsIHJlcHIucGxvdC53aWR0aCA9IDYpCm9wdGlvbnModGlkeXZlcnNlLnF1aWV0ID0gVFJVRSkKCmBgYAogCgpgYGB7cn0KIyBUZW5zb3JmbG93IEV4YW1wbGUKCmxpYnJhcnkodGVuc29yZmxvdykKbGlicmFyeShyZXRpY3VsYXRlKQoKIyBYX3RyYWluIGFuZCBZX3RyYWluIGRhdGEKCnRyYWluX1ggPSBjKDMuMyw0LjQsNS41LDYuNzEsNi45Myw0LjE2OCw5Ljc3OSw2LjE4Miw3LjU5LDIuMTY3LAogICAgICAgICAgICAgICAgICAgICAgNy4wNDIsMTAuNzkxLDUuMzEzLDcuOTk3LDUuNjU0LDkuMjcsMy4xKQp0cmFpbl9ZIDwtIGMoMS43LDIuNzYsMi4wOSwzLjE5LDEuNjk0LDEuNTczLDMuMzY2LDIuNTk2LDIuNTMsMS4yMjEsCiAgICAgICAgICAgICAyLjgyNywzLjQ2NSwxLjY1LDIuOTA0LDIuNDIsMi45NCwxLjMpCm5fc2FtcGxlcyA8LSBsZW5ndGgodHJhaW5fWCkKCiMgUGFyYW1ldGVycyAKbGVhcm5pbmdfcmF0ZSA8LSAwLjAxCnRyYWluaW5nX2Vwb2NocyA8LSAxMDAwCmRpc3BsYXlfc3RlcCA8LSA1MAoKIyBUZW5zb3JmbG93IGdyYXBoIGlucHV0IAoKWCA9IHRmJHBsYWNlaG9sZGVyKGR0eXBlID0gImZsb2F0IikKWSA8LSB0ZiRwbGFjZWhvbGRlcihkdHlwZSA9ICJmbG9hdCIpCgojIFNldCBtb2RlbCB3ZWlnaHRzCgpXIDwtIHRmJFZhcmlhYmxlKHRmJHJhbmRvbV91bmlmb3JtKHNoYXBlKDFMKSwgLTEuMCwgMS4wKSkKI2IgPC0gdGYkVmFyaWFibGUodGYkemVyb3Moc2hhcGUgPSAoMCkpKQpiIDwtIHRmJFZhcmlhYmxlKHRmJHplcm9zKHNoYXBlKDFMKSkpCgojIENvbnN0cnVjdCBhIGxpbmVhciBtb2RlbCAKcHJlZCA8LSB0ZiRhZGQodGYkbXVsdGlwbHkoWCwgVyksIGIpCgojIE1lYW4gc3F1YXJlZCBlcnJvciAKY29zdCA9IHRmJHJlZHVjZV9zdW0oaW5wdXRfdGVuc29yID0gdGYkcG93KHByZWQgLSBZLCAyKSkvKDIqbl9zYW1wbGVzKQoKIyBHcmFkaWVudCBkZXNjZW50IApvcHRpbWl6ZXIgPSB0ZiR0cmFpbiRHcmFkaWVudERlc2NlbnRPcHRpbWl6ZXIobGVhcm5pbmdfcmF0ZSkkbWluaW1pemUoY29zdCkKCiMgTGF1bmNoIGdyYXBoIGFuZCBpbml0aWFsaXplIHZhcmlhYmxlcyAKCnNlc3MgPSB0ZiRTZXNzaW9uKCkKc2VzcyRydW4odGYkZ2xvYmFsX3ZhcmlhYmxlc19pbml0aWFsaXplcigpKQoKIyBGaXQgdGhlIGxpbmUgCmZvciAoc3RlcCBpbiAxOnRyYWluaW5nX2Vwb2Nocyl7CiAgc2VzcyRydW4oZmV0Y2hlcyA9IG9wdGltaXplciwgZmVlZF9kaWN0ID0gZGljdChYID0gdHJhaW5fWCwgWSA9dHJhaW5fWSkpCiAgaWYgKHN0ZXAgJSUyMCA9PSAwKQogICAgY2F0KHN0ZXAsICItIiwgc2VzcyRydW4oVyksIHNlc3MkcnVuKGIpLCAiXG4iKQp9CmBgYAoKCgo=