Examples of how to implement a simple gradient descent with TensorFlow
Algorithm gradient descent with TensorFlow (1D example)
import tensorflow as tfimport matplotlib.pyplot as pltimport numpy as npfrom pylab import figure, cmx = np.arange(-10,10,0.2)y = x**2fig = 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.0def loss_function_minimzie():return x ** 2.0def reset():x = tf.Variable(10.0)return xx = 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.0y = 64.0, x = 8.0y = 41.0, x = 6.4y = 26.2, x = 5.1y = 16.8, x = 4.1y = 10.7, x = 3.3y = 6.9, x = 2.6y = 4.4, x = 2.1y = 2.8, x = 1.7y = 1.8, x = 1.3y = 1.2, x = 1.1y = 0.7, x = 0.9y = 0.5, x = 0.7y = 0.3, x = 0.5y = 0.2, x = 0.4y = 0.1, x = 0.4y = 0.1, x = 0.3y = 0.1, x = 0.2y = 0.0, x = 0.2y = 0.0, x = 0.1y = 0.0, x = 0.1y = 0.0, x = 0.1y = 0.0, x = 0.1y = 0.0, x = 0.1y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0y = 0.0, x = 0.0
Algorithm gradient descent with TensorFlow (2D example)
def loss_function(x1,x2):return x1 ** 2.0 - x1 * 3 + x2 ** 2x1_min = 0.0x1_max = 4.0x2_min = -1.0x2_max = 1.0x1, 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 ** 2def reset():x1 = tf.Variable(10.0)x2 = tf.Variable(10.0)return x1, x2x1, 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.0y = 108.0, x1 = 8.3, x2 = 8.0y = 68.3, x1 = 6.9, x2 = 6.4y = 42.9, x1 = 5.9, x2 = 5.1y = 26.6, x1 = 5.0, x2 = 4.1y = 16.2, x1 = 4.3, x2 = 3.3y = 9.6, x1 = 3.7, x2 = 2.6y = 5.3, x1 = 3.3, x2 = 2.1y = 2.6, x1 = 2.9, x2 = 1.7y = 0.9, x1 = 2.6, x2 = 1.3y = -0.3, x1 = 2.4, x2 = 1.1y = -1.0, x1 = 2.2, x2 = 0.9y = -1.4, x1 = 2.1, x2 = 0.7y = -1.7, x1 = 2.0, x2 = 0.5y = -1.9, x1 = 1.9, x2 = 0.4y = -2.0, x1 = 1.8, x2 = 0.4y = -2.1, x1 = 1.7, x2 = 0.3y = -2.2, x1 = 1.7, x2 = 0.2y = -2.2, x1 = 1.7, x2 = 0.2y = -2.2, x1 = 1.6, x2 = 0.1y = -2.2, x1 = 1.6, x2 = 0.1y = -2.2, x1 = 1.6, x2 = 0.1y = -2.2, x1 = 1.6, x2 = 0.1y = -2.2, x1 = 1.6, x2 = 0.1y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0y = -2.2, x1 = 1.5, x2 = 0.0
