Examples of how to implement a simple gradient descent with TensorFlow
Algorithm gradient descent with TensorFlow (1D example)
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
from pylab import figure, cm
x = np.arange(-10,10,0.2)
y = x**2
fig = figure(num=None, figsize=(12, 10), dpi=80, facecolor='w', edgecolor='k')
plt.plot(x,y)
plt.title('Gradient Descent with TensorFlow (1D)')
plt.xlabel('x')
plt.ylabel('y')
plt.savefig("gradient_descent_tensorflow_01.png", bbox_inches='tight')
plt.show()
def loss_function(x):
return x ** 2.0
def loss_function_minimzie():
return x ** 2.0
def reset():
x = tf.Variable(10.0)
return x
x = reset()
opt = tf.keras.optimizers.SGD(learning_rate=0.1)
for i in range(50):
print ('y = {:.1f}, x = {:.1f}'.format(loss_function(x).numpy(), x.numpy()))
opt.minimize(loss_function_minimzie, var_list=[x])
returns
y = 100.0, x = 10.0
y = 64.0, x = 8.0
y = 41.0, x = 6.4
y = 26.2, x = 5.1
y = 16.8, x = 4.1
y = 10.7, x = 3.3
y = 6.9, x = 2.6
y = 4.4, x = 2.1
y = 2.8, x = 1.7
y = 1.8, x = 1.3
y = 1.2, x = 1.1
y = 0.7, x = 0.9
y = 0.5, x = 0.7
y = 0.3, x = 0.5
y = 0.2, x = 0.4
y = 0.1, x = 0.4
y = 0.1, x = 0.3
y = 0.1, x = 0.2
y = 0.0, x = 0.2
y = 0.0, x = 0.1
y = 0.0, x = 0.1
y = 0.0, x = 0.1
y = 0.0, x = 0.1
y = 0.0, x = 0.1
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
y = 0.0, x = 0.0
Algorithm gradient descent with TensorFlow (2D example)
def loss_function(x1,x2):
return x1 ** 2.0 - x1 * 3 + x2 ** 2
x1_min = 0.0
x1_max = 4.0
x2_min = -1.0
x2_max = 1.0
x1, x2 = np.meshgrid(np.arange(x1_min,x1_max, 0.1), np.arange(x2_min,x2_max, 0.1))
y = f(x1,x2)
fig = figure(num=None, figsize=(12, 10), dpi=80, facecolor='w', edgecolor='k')
plt.imshow(y,extent=[x1_min,x1_max,x2_min,x2_max], cmap=cm.jet)
plt.title('Gradient Descent with TensorFlow (2D)')
plt.xlabel('x')
plt.ylabel('y')
plt.savefig("gradient_descent_tensorflow_02.png", bbox_inches='tight')
plt.show()
def loss_function_minimzie():
return x1 ** 2.0 - x1 * 3 + x2 ** 2
def reset():
x1 = tf.Variable(10.0)
x2 = tf.Variable(10.0)
return x1, x2
x1, x2 = reset()
opt = tf.keras.optimizers.SGD(learning_rate=0.1)
for i in range(50):
print ('y = {:.1f}, x1 = {:.1f}, x2 = {:.1f}'.format(loss_function(x1, x2).numpy(), x1.numpy(), x2.numpy()))
opt.minimize(loss_function_minimzie, var_list=[x1, x2])
returns
y = 170.0, x1 = 10.0, x2 = 10.0
y = 108.0, x1 = 8.3, x2 = 8.0
y = 68.3, x1 = 6.9, x2 = 6.4
y = 42.9, x1 = 5.9, x2 = 5.1
y = 26.6, x1 = 5.0, x2 = 4.1
y = 16.2, x1 = 4.3, x2 = 3.3
y = 9.6, x1 = 3.7, x2 = 2.6
y = 5.3, x1 = 3.3, x2 = 2.1
y = 2.6, x1 = 2.9, x2 = 1.7
y = 0.9, x1 = 2.6, x2 = 1.3
y = -0.3, x1 = 2.4, x2 = 1.1
y = -1.0, x1 = 2.2, x2 = 0.9
y = -1.4, x1 = 2.1, x2 = 0.7
y = -1.7, x1 = 2.0, x2 = 0.5
y = -1.9, x1 = 1.9, x2 = 0.4
y = -2.0, x1 = 1.8, x2 = 0.4
y = -2.1, x1 = 1.7, x2 = 0.3
y = -2.2, x1 = 1.7, x2 = 0.2
y = -2.2, x1 = 1.7, x2 = 0.2
y = -2.2, x1 = 1.6, x2 = 0.1
y = -2.2, x1 = 1.6, x2 = 0.1
y = -2.2, x1 = 1.6, x2 = 0.1
y = -2.2, x1 = 1.6, x2 = 0.1
y = -2.2, x1 = 1.6, x2 = 0.1
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0
y = -2.2, x1 = 1.5, x2 = 0.0